fpga_可编程单脉冲发生器设计

上传人:mg****85 文档编号:34157605 上传时间:2018-02-21 格式:DOC 页数:11 大小:394KB
返回 下载 相关 举报
fpga_可编程单脉冲发生器设计_第1页
第1页 / 共11页
fpga_可编程单脉冲发生器设计_第2页
第2页 / 共11页
fpga_可编程单脉冲发生器设计_第3页
第3页 / 共11页
fpga_可编程单脉冲发生器设计_第4页
第4页 / 共11页
fpga_可编程单脉冲发生器设计_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《fpga_可编程单脉冲发生器设计》由会员分享,可在线阅读,更多相关《fpga_可编程单脉冲发生器设计(11页珍藏版)》请在金锄头文库上搜索。

1、8.3 可编程单脉冲发生器可编程单脉冲发生器是一种脉冲宽度可编程的信号发生器,其输出为 TTL电平。在输入按键的控制下,产生单次的脉冲,脉冲的宽度由 8 位的输入数据控制(以下称之为脉宽参数)。由于是 8 位的脉宽参数,故可以产生 255 种宽度的单次脉冲。在目标板上,I0I7 用作脉宽参数输入,PULSE_OUT 用做可编程单脉冲输出,而 KEY 和/RB 作为启动键和复位键。图 3 示出了可编程单脉冲发生器的电路图。图 3 可编程单脉冲发生器的电路图8.3.1 由系统功能描述时序关系可编程单脉冲发生器的操作过程是:(1) 预置脉宽参数。(2) 按下复位键,初始化系统。(3) 按下启动键,发

2、出单脉冲。以上三步可用三个按键来完成。但是,由于目标板已确定,故考虑在复位键按下后,经过延时自动产生预置脉宽参数的动作。这一过程可用图 4 的时序来描述。 图 4 可编程单脉冲发生器的时序图图中的/RB 为系统复位脉冲,在其之后自动产生 LOAD 脉冲,装载脉宽参数 N。之后,等待按下/KEY 键。/KEY 键按下后,单脉冲 P_PULSE 便输出。在此,应注意到:/KEY 的按下是与系统时钟 CLK 不同步的,不加处理将会影响单脉冲 P_PULSE 的精度。为此,在 /KEY 按下期间,产生脉冲 P1,它的上跳沿与时钟取得同步。之后,在脉宽参数的控制下,使计数单元开始计数。当达到预定时间后,

3、再产生一个与时钟同步的脉冲 P2。由 P1 和 P2 就可以算出单脉冲的宽度 Tw。8.3.2 流程图的设计根据时序关系,可以做出图 5 所示的流程图。在系统复位后,经一定的延时产生一个预置脉冲 LOAD,用来预置脉宽参数。应该注意:复位脉冲不能用来同时预置,要在其之后再次产生一个脉冲来预置脉宽参数。为了产生单次的脉冲,必须考虑到在按键 KEY 有效后,可能会保持较长的时间,也可能会产生多个尖脉冲。因此,需要设计一种功能,使得当检测到 KEY 有效后就封锁 KEY 的再次输入,直到系统复位。这是本设计的一个关键所在。 图 5 可编程单脉冲发生器的流程图8.3.3 系统功能描述根据时序和流程图,

4、可以进一步描述系统的功能。图 6 给出了系统功能描述。 图 6 可编程单脉冲发生器的系统功能与系统的时序相呼应,功能框图较详细地描述了系统应有的功能。系统主要有以下三大模块组成:(1) 延时模块 P_DLY。(2) 输入检测模块 P_DETECT。(3) 计数模块 LE_EN_DCNT。在此阶段,应尽可能详细地描述系统,给出合理的逻辑关系,进行正确的功能模块分配。例如:不要把计数模块 LE_EN_DCNT 与延时模块 P_DLY 混在一起,否则给后续的设计带来不必要的麻烦。对每一个模块有了详细的功能描述,下一步就可以将其细化为具体的逻辑电路了。8.3.4 逻辑框图将系统功能描述用逻辑框图来描述

5、,可以用图 7 来说明。图 7 可编程单脉冲发生器的逻辑功能(1) 延时模块 P_DLY。CLK 给延时单元提供计数时基,在复位脉冲/RB 从有效变为无效时,启动延时单元。延时时间到后便输出一个负有效的脉冲,其宽度为一个时钟周期。(2) 输入检测模块 P_DETECT。/RB 复位系统后,该模块等待 /KEY 的输入,一旦检测到有下跳,便一方面封锁输入,一方面产生并保持与时钟同步的一个上跳脉冲。该脉冲用以开启计数模块 LE_EN_DCNT 的计数允许端 EN。(3) 计数模块 LE_EN_DCNT。脉宽参数端 IN 接受 8 位的数据,经数据预置端 LOAD 装载脉宽参数,在计数允许端有效后便

6、开始计数。该计数器设计成为减法计数的模式,当其计数到 0 时,输出端 OUT 由高电平变为低电平。该输出与来自延时模块 P_DETECT 的输出进行 与运算,便可得到单脉冲的输出。但是,根据以上的逻辑功能,还不能方便地用 Verilog-HDL 来描述,需要进一步分析、细化各模块的功能。另外,即使分析清楚了各模块,也应该将各模块分别进行仿真,正确无误后,再将所有的模块连接起来,进行系统级的仿真。8.3.5 延时模块的详细描述及仿真如图 8 所示, /RB 的下跳沿将 U1 复位,上跳沿将 U1 的输出端置1。同时,/RB 将 U3 复位,其输出端开启 三与门。在这种情况下,时钟 CLK 通过三

7、与门 输入到 U2 的 IN 端,U2 延时一定时间(本设计为 5 个时钟周期)后输出下跳的脉冲,该脉冲持续一个时钟周期后又上跳,上跳沿输入到 T 触发器,T 触发器的输出端封锁 三与门 。这一时序关系如图 9 所示。图 8 延时模块的逻辑功能描述图 9 延时脉冲的时序关系图 8 中的延时单元 DLY_UNIT 可用图 10 的逻辑电路实现。图 10 延时模块中的计数器至此,延时模块 P_DLY 已可用 Verilog-HDL 来描述了。/* 延时模块 P_DLY 的 Verilog-HDL 描述 */module pulse ( CLK, RB, DLY_OUT); / 模块名及端口定义,范

8、围至 endmoduleinput CLK, RB; / 输入端口定义output DLY_OUT; / 输出端口定义wire Q, QB, CNT_CLK; / 中间变量定义DFF_R U1 ( CLK, Q, RB); / D 触发器assign CNT_CLK = CLK / 赋值语句,实现把三与门的输出赋给 CNT_CLKDELAY U2 ( RB, CNT_CLK , DLY_OUT); / 延时单元TFF U3 ( DLY_OUT, QB, RB ); / T 触发器endmodule/* 延时单元 DELAY */module DELAY ( RESET_B, CLK, DIV_

9、CLK ); / 模块名及端口定义,范围至 endmoduleinput RESET_B, CLK; / 输入端口定义output DIV_CLK; / 输出端口定义reg 2:0 Q; / 中间变量定义always ( posedge CLK or negedge RESET_B )/ always 语句,表示每当 CLK 的上升沿或 RESET_B 的下降沿到来时,完成 begin-end 之间语句的操作if ( !RESET_B ) / 如果 RESET_B=0Q = 0; / 则 Q = 0,即:计数器清 0else if ( Q = 5 ) / 否则,如果 Q=5,即:计数器计数已满

10、Q = 0; / 则 Q = 0,即:计数器清 0elseQ = Q + 1; / 否则,计数器加 1assign DIV_CLK = (Q2 / 赋值语句,实现把三与门的输出反向后赋值给 DIV_CLKendmodule由于 D 触发器和 T 触发器的设计比较简单,这里就不做描述了,具体描述见参考文献(3 )。图 11 为延时模块的仿真结果。从仿真结果可以看出与设计是相吻合的。 图 11 延时模块的仿真结果8.3.6 输入检测模块的详细描述及仿真图 12 为输入检测模块的逻辑电路。工作原理简述如下:(1) 系统复位脉冲/RB 使 U1、U2 复位。(2) U2 的输出端允许 CLK 进入 U

11、1 的 CLK 端。(3) U1 的反相输出端开启与/KEY 相关的与门,允许/KEY 的第一次有效。(4) /KEY 无效(高电平),使 U1 的 D 端为低电平。(5) P_DETECT 的输出始终为低电平。(6) /KEY 有效(低电平)。(7) U1 的 D 端为高电平。(8) 待时钟 CLK 的上跳沿到来时,将 U1 的 D 端高电平打至 U1 的输出端并保持。此输出的上跳沿与时钟 CLK 同步。(9) 此时,U1 的反相输出端为低电平,该电平封锁与 /KEY 相关的与门,从而禁止/KEY 的再次输入,直到复位脉冲 /RB 的到来。 图 12 输入检测模块的逻辑功能描述/* 输入检测

12、模块 P_DETECT 的 Verilog-HDL 描述 */module pulse ( CLK, RB, KEY , OUT); / 模块名及端口定义,范围至 endmoduleinput CLK, RB, KEY; / 输入端口定义output OUT; / 输出端口定义wire CLK2, T_QB ; / 中间变量定义assign CLK2 = CLK / 赋值语句,实现把与门的输出赋给 CLK2DFF_R U1 ( CLK2 , KEY / D 触发器TFF U2 ( OUT, T_QB, RB ); / T 触发器endmodule由于 D 触发器和 T 触发器的设计比较简单,这

13、里就不做描述了,具体描述见参考文献(3 )。图 13 为输入检测模块的仿真结果。可以看出,在复位脉冲之后,KEY 的有效(低电平)使检测模块的输出为高电平,其一直保持到系统复位脉冲的到来。还可以看出,KEY 有效后,输出并不一定立刻出现高电平,而要等到时钟CLK 的上跳沿到来。在输出为高电平的情况下,即使 KEY 再次有效,也不会影响输出。这说明模块一旦接受到了输入,便立刻禁止在其之后的输入,除非接收到复位脉冲的到来。在仿真时,应该给出尽可能多的信号组合来测试系统,否则会常常将人引入误区。 图 13 输入检测模块的仿真结果8.3.7 计数模块的详细描述计数模块的逻辑电路如图 14 所示。数据预

14、置端 IN 的数据在 LOAD 有效(高电平)时被打入内部的寄存器。在 EN 有效的情况下,计数器开始做减法计数。当计数值减为 0 时,输出为低电平。此模块描述较简单,故省略模块的仿真。图 14 计数模块的逻辑功能描述8.3.8 可编程单脉冲发生器的系统仿真以上,已经对各个模块进行了描述。下面,就可以进行系统仿真了。可编程单脉冲发生器的系统描述可见参考文献(3)。图 15 为可编程单脉冲发生器的逻辑仿真结果。由仿真结果可以看出,单脉冲输出的持续时间(脉冲宽度)由输入的脉宽参数 DATA_IN 决定。 图 15 可编程单脉冲发生器的逻辑仿真结果8.3.9 可编程单脉冲发生器的硬件实现仿真工作结束后,按照第六讲介绍的方法,用 WebPACK Project Navigator 软件,把源文件生成目标文件,并通过下载电缆将目标代码写入芯片。这样,就可以实际检测该硬件电路的工作情况了。图 16 为可编程单脉冲发生器的实测波形。本例中,脉宽参数的设定值为 1。因此,应该产生宽度为一个时钟周期的单脉冲。又由于时钟为 10MHz,即周期为 100ns。所以图 16 的脉宽为 100ns。实测的数据显示了本设计的正确性。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号