|
为了保证在复位信号消失时时钟有效边沿到达而是寄存器产生的亚稳态,一般推荐采用异步复位,同步置位的方法。
比如http://www.cnblogs.com/qiweiwang/archive/2010/11/25/1887888.html中的代码:
module rst
( input clk, input rst_n, output reg rst_out);
reg R1;
always @ (posedge clk,negedge rst_n)
if(!rst_n)
begin
R1 <= 1'b0;
rst_out <= 1'b0;
end
else
begin
R1 <= 1'b1;
rst_out <= R1;
end
endmodule
其它的文章也是采用类似的方式。
我的问题是为什么大家都是采用2级寄存器进行缓冲,而不是像下面的代码:
module test
(
input clk,
input rst_n,
output reg rst_out
);
always @ (posedge clk,negedge rst_n)
if(!rst_n)
rst_out<=1'b0;
else
rst_out<=1'b1;
endmodule
只使用一级寄存器来实现异步复位,同步置位?二者的效果应该是一样的,采用两级寄存器完全没有必要吧? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|