上升沿监测电路
时间:10-02
整理:3721RD
点击:
现在的项目中需要设计一个上升沿检测电路,被检测信号为异步信号,应该怎样设计才能规避毛刺、亚稳态等问题?如果用如下的方法:
always@(posedge clk or negedge rst) begin
if(!negedge rst) begin
reg1 <= 1'b0;
reg2 <= 1'b0;
end
else begin
reg1 <= data_in;
reg2 <= reg1;
end
end
assign data_out = reg1 & ~reg2;
这种设计即经典的两级同步方法,在异步设计中常用 ,可以保证reg2处于非亚稳态,但reg1仍有可能处于亚稳态,因此是否需要在reg1前再增加一级DFF呢?
always@(posedge clk or negedge rst) begin
if(!negedge rst) begin
reg1 <= 1'b0;
reg2 <= 1'b0;
end
else begin
reg1 <= data_in;
reg2 <= reg1;
end
end
assign data_out = reg1 & ~reg2;
这种设计即经典的两级同步方法,在异步设计中常用 ,可以保证reg2处于非亚稳态,但reg1仍有可能处于亚稳态,因此是否需要在reg1前再增加一级DFF呢?
有必要,前面两级做同步,对同步后的信号做检测。
了解了解
两级必不可少!
因为是异步电路,所以再加一级DFF是必不可少的
看你的输入信号如果本身就带有抖动和毛刺的话,还得考虑去除抖动和毛刺。
额 如果要去毛刺 是否需要再加几级DFF 比如连续采到3个逻辑1才能认为是正常的高电平信号?
应该要再加一级,前面两级纯粹是为了消除亚稳态的,第三级才是作为延时一拍
有专门去抖动和毛刺的代码,你可以搜一下。
一般情况下,前面两级,后面才做时序处理
这个只能用在快时钟采慢时钟的地方啊
kankan
兩級來做應該可以濾掉!
异步复位同步释放是类似应用,问个问题:
异步复位信号已经同步释放之后,那么在进程里面应该怎么写代码呢?是方式一呢,还是方式二呢?
方式一:
process(reset,clkin)
begin
if reset='0' then
dataout <= (others => '0');
elsif clkin'event and clkin='1' then
。。
方式二:
process(reset,clkin)
begin
if clkin'event and clkin='1' then
if reset='0' then
dataout <= (others => '0');
。
