一、在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)