在Verilog中的always块内判断上升沿或下沿事件 (2008-07-15 12:53:54)

hegangben
2025-07-14 / 0 评论 / 1 阅读 / 正在检测是否收录...

一、在Verilog中的always块内判断上升沿或下沿事件!
上一篇 / 下一篇 2006-09-17 13:28:53 / 天气: 晴朗 / 心情: 高兴

查看( 498 ) / 评论( 1 ) / 评分( 0 / 0 )
最近代码中设计了状态机,状态触发条件需要根据两个寄存器变量决定,一个是一位寄存器a,另一个是状态的2位寄存器变量b.
触发条件是a的上升沿或是b的值发生变化时.由于不能在条件中使用上升沿一变量值变化的组合,因此需要触发条件改为不通过边沿触发,而是改为

always @(a or b)

那么需要在always块内部判断是否产生了上升沿.经过实验代码如下:

块执行条件为clk时钟发生变化时,注意clk时钟频率过高时,必须用沿触发,不然块内代码不执行,不知道为什么??
always @(posedge clk)
begin
temp[0]<=a; // 保存当前信号值
temp[1]<=temp[0]; // 保存信号前一状态值

//////////////////////////////////////////////////
if((temp==2'b01) && b == txd_idle) // a信号的上升沿且b=txd_idle时,注意temp==2'b10时为下降沿.

试验成功!!

二、判断时钟的上升沿只有用频率更高的时钟去打,然后再在更高的时钟域里面判断。

如:

clk,clk_fast

always@(posedeg clk_fast)

begin

clkq=<clk;

clkqq<=clkq;

end

assign clkposedge=clkq & (~clkqq);

0

评论 (0)

取消