门控时钟 门控时钟
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)
RTL Viewer: db_r <= db;
//门控时钟上升沿 //锁存输入数据
组合逻辑中多用门控时钟,一般驱动门控时钟的逻辑都是只包含一个与门
(或门)。如果有其它的附加逻辑,容易因竞争产生不希望的毛刺。
使能时钟 使能时钟
Verilog示例代码: input clk; input wr_n;
//50MHz时钟信号
//写使能信号,低有效
//片选信号,低有效 //数据总线
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) //使能锁存输入
RTL Viewer:
db_r <= db;
//锁存输入数据
使能时钟这要是用于时序逻辑中,比门控时钟要来的稳定。
上面只是一个举例,实际上它们实现的功能上还是有一点差别的。门控时钟
一例中是能够比较准确的在wr_n的上升沿锁存数据的。而使能时钟一例中在wr_n有效期间的每个时钟周期都会锁存输入数据,最后写入结束后锁存寄存器里
的数据是wr_n上升前的0-T(T=1/clk)时间内锁存的数据。因为是个例子,也就不详细说,具体情况具体分析。
因篇幅问题不能全部显示,请点此查看更多更全内容