Verilog基础知识3(门控时钟及FPGA时钟使能处理)
2016-07-13 13:27
344 查看
需求说明:Verilog设计
内容 :第一部分 门控时钟
第二部分 门控时钟和时钟使能的理解(附代码)
来自 :时间的诗
第一部分 门控时钟
原文:/article/6291569.html
门控时钟的简介:
组合逻辑中多用门控时钟,一般驱动门控时钟的逻辑都是只包含一个门,如果有其他的附加逻辑,就容易因竞争而产生不希望的毛刺。门控时钟通过一个时能信号控制时钟的开关。当系统不工作时可以关闭时钟,整个系统处于非激活状态,这样就能够在某种程度上降低系统功耗。
然而,使用门控时钟并不符合同步设计的思想,它可能会影响设计的实现和验证。单纯从功能上看,使用使能时钟替代门控时钟是一个不错的选择;但是使能时钟在使能信号关闭时,时钟信号仍然在工作,它无法像门控时钟那样降低系统的功耗。
Altera的解决方案:
对于上升沿有效的系统时钟clk,他的下降沿先把门控时钟打一拍,然后再用这个使能信号和系统时钟clk相与后作为后续电路的门控时钟。
这样的门控时钟电路很好的解决了组合逻辑常见的一些问题。它避免了毛刺的出现,同时也有效的抑制了亚稳态可能带来的危害。但是从另一个方面来说,如果这个设计的系统时钟占空比不是很稳定,或者输出的使能信号(enable)与时钟信号(clk)的逻辑过于复杂,那么它也会带来一些功能和时序上的问题。总得来说,只要设计者控制好这个设计中时钟占空比和门控逻辑复杂度,他还是比下面这个简单的门控时钟电路方案可行。
第二部分 门控时钟和时钟使能的理解(附代码)
原文:http://www.eefocus.com/chudonganjin/blog/11-08/229940_5b96c.html
门控时钟
时钟使能电路是同步设计的重要基本电路,在很多设计中,虽然内部不同模块的处理速度不同,但是由于这些时钟是同源的,可以将它们转化为单一的时钟电路处理。在FPGA的设计中,分频时钟和源时钟的skew不容易控制,难以保证分频时钟和源时钟同相。故此推荐采用使用时钟使能的方法,通过使用时钟使能可以避免时钟“满天飞”的情况,进而避免了不必要的亚稳态发生,在降低设计复杂度的同时也提高了设计的可靠性。
门控时钟 Verilog示例代码:
RTL Viewer:
组合逻辑中多用门控时钟,一般驱动门控时钟的逻辑都是只包含一个与门(或门)。如果有其它的附加逻辑,容易因竞争产生不希望的毛刺。
使能时钟
Verilog示例代码:
RTL Viewer:
使能时钟这要是用于时序逻辑中,比门控时钟要来的稳定。
上面只是一个举例,实际上它们实现的功能上还是有一点差别的。门控时钟一例中是能够比较准确的在wr_n的上升沿锁存数据的。而使能时钟一例中在wr_n有效期间的每个时钟周期都会锁存输入数据,最后写入结束后锁存寄存器里的数据是wr_n上升前的0-T(T=1/clk)时间内锁存的数据。因为是个例子,也就不详细说,具体情况具体分析。
在某系统中,前级数据输入位宽为8,而后级的数据输出位宽32,我们需要将8bit的数据转换成32bit的数据,因此后级处理的时钟频率为前级的1/4,若不使用时钟时能,则就要将前级时钟进行4分频来作为后级处理的时钟,这种设计方法会引入新的时钟域,为了避免这种情况,我们采用了时钟时能的方法来减少设计的复杂度。
内容 :第一部分 门控时钟
第二部分 门控时钟和时钟使能的理解(附代码)
来自 :时间的诗
第一部分 门控时钟
原文:/article/6291569.html
门控时钟的简介:
组合逻辑中多用门控时钟,一般驱动门控时钟的逻辑都是只包含一个门,如果有其他的附加逻辑,就容易因竞争而产生不希望的毛刺。门控时钟通过一个时能信号控制时钟的开关。当系统不工作时可以关闭时钟,整个系统处于非激活状态,这样就能够在某种程度上降低系统功耗。
然而,使用门控时钟并不符合同步设计的思想,它可能会影响设计的实现和验证。单纯从功能上看,使用使能时钟替代门控时钟是一个不错的选择;但是使能时钟在使能信号关闭时,时钟信号仍然在工作,它无法像门控时钟那样降低系统的功耗。
Altera的解决方案:
对于上升沿有效的系统时钟clk,他的下降沿先把门控时钟打一拍,然后再用这个使能信号和系统时钟clk相与后作为后续电路的门控时钟。
这样的门控时钟电路很好的解决了组合逻辑常见的一些问题。它避免了毛刺的出现,同时也有效的抑制了亚稳态可能带来的危害。但是从另一个方面来说,如果这个设计的系统时钟占空比不是很稳定,或者输出的使能信号(enable)与时钟信号(clk)的逻辑过于复杂,那么它也会带来一些功能和时序上的问题。总得来说,只要设计者控制好这个设计中时钟占空比和门控逻辑复杂度,他还是比下面这个简单的门控时钟电路方案可行。
第二部分 门控时钟和时钟使能的理解(附代码)
原文:http://www.eefocus.com/chudonganjin/blog/11-08/229940_5b96c.html
门控时钟
时钟使能电路是同步设计的重要基本电路,在很多设计中,虽然内部不同模块的处理速度不同,但是由于这些时钟是同源的,可以将它们转化为单一的时钟电路处理。在FPGA的设计中,分频时钟和源时钟的skew不容易控制,难以保证分频时钟和源时钟同相。故此推荐采用使用时钟使能的方法,通过使用时钟使能可以避免时钟“满天飞”的情况,进而避免了不必要的亚稳态发生,在降低设计复杂度的同时也提高了设计的可靠性。
门控时钟 Verilog示例代码:
input wr_n; //写使能信号,低有效 input cs_n; //片选信号,低有效 input[7:0] db; //输入数据总线 output db_r; //锁存输出 reg db_r; //输入数据寄存器 wire d_clk; //门控时钟信号 assign d_clk = wr_n || cs_n; always @ (posedge d_clk) //门控时钟上升沿 db_r <= db; //锁存输入数据
RTL Viewer:
组合逻辑中多用门控时钟,一般驱动门控时钟的逻辑都是只包含一个与门(或门)。如果有其它的附加逻辑,容易因竞争产生不希望的毛刺。
使能时钟
Verilog示例代码:
input clk; //50MHz时钟信号 input wr_n; //写使能信号,低有效 input cs_n; //片选信号,低有效 input[7:0] db; //数据总线 output db_r; reg db_r; //输入数据寄存器 wire en; //使能信号 assign en = ~wr_n && ~cs_n; always @ (posedge clk) //全局时钟上升沿 if(en) //使能锁存输入 db_r <= db; //锁存输入数据
RTL Viewer:
使能时钟这要是用于时序逻辑中,比门控时钟要来的稳定。
上面只是一个举例,实际上它们实现的功能上还是有一点差别的。门控时钟一例中是能够比较准确的在wr_n的上升沿锁存数据的。而使能时钟一例中在wr_n有效期间的每个时钟周期都会锁存输入数据,最后写入结束后锁存寄存器里的数据是wr_n上升前的0-T(T=1/clk)时间内锁存的数据。因为是个例子,也就不详细说,具体情况具体分析。
在某系统中,前级数据输入位宽为8,而后级的数据输出位宽32,我们需要将8bit的数据转换成32bit的数据,因此后级处理的时钟频率为前级的1/4,若不使用时钟时能,则就要将前级时钟进行4分频来作为后级处理的时钟,这种设计方法会引入新的时钟域,为了避免这种情况,我们采用了时钟时能的方法来减少设计的复杂度。
module gray ( input clk, input rst_n, input [7:0] data_in, output reg [31:0] data_out, output reg clk1x_en ); reg [1:0] cnt; reg [31:0] shift_reg; always @ (posedge clk,negedge rst_n) begin if(!rst_n) cnt <= 2'b0; else cnt <= cnt +1'b1; end always @ (posedge clk,negedge rst_n) begin if(!rst_n) clk1x_en <= 1'b0; else if(cnt ==2'b01) clk1x_en <= 1'b1; else clk1x_en <= 1'b0; end always @ (posedge clk,negedge rst_n) begin if(!rst_n) shift_reg <= 32'b0; else shift_reg <= {shift_reg[23:0],data_in}; end always @ (posedge clk,negedge rst_n) begin if(!rst_n) data_out<= 32'b0; else if(clk1x_en==1'b1)//仅在clk1x_en为1时才将shift_reg的值赋给data_out data_out<=shift_reg; end endmodule
相关文章推荐
- middlegen_utf
- Java数组操作方法
- 第八讲:软考中高项08_沟通管理、合同管理采购管理、信息与配置管理
- html5 postMessage解决跨域、跨窗口消息传递
- DDMS files not found:hprof-conv.exe的解决办法
- python——学习准备
- CentOS7下PostgreSQL安装
- 1043. 输出PATest(20)
- 多文件目录Makefile的写法
- mysql导入excel数据。 需要选项对应数据库
- 第七讲:软考中高项07_沟通管理、合同管理
- 2015ACM-ICPC 北京赛区 Problem K. A Math Problem
- BloomFilter(布隆过滤器)的C#实现
- vSphere 6.0 error “unable to create NFS datastore"
- poj1637 Sightseeing tour
- Oracle删除后,重装方案有哪些?删除后重装出错?多次安装后出错?如何完全删除Oracle?
- poj1637 Sightseeing tour
- sql server的日期格式转化形式
- 滚动dp
- c/c++ 变量名前面加井号#