verilog HDL 中 在 always 的敏感条件 的分辨问题

verilog HDL 中 在 always 的敏感条件
例如在 always @(posedge clk1,posedge clk2) 中clk1,clk2 是2个无关的信号,有没有什么办法 可以较好的 分辨出 这两个 信号是其中的哪个信号触发的本次条件?
最后在硬件上 是怎么实现 边沿的识别的?

问题2 如果一个标记位(sign)的赋值操作 sign =0/1 由两个不同的 条件触发,两个无关条件(例如从捕获clk1的上升沿 开始 sign = 1,不管clk1 怎么变化 直到 clk2 上升沿发生时 sign =0 )这样的 逻辑怎么实现?

第1个回答  2011-05-20
1、always @(posedge clk1,posedge clk2)语句下边 begin后必须 有 IF语句,例如IF(clk1) 之类的 否则的话 编译不通过。有了IF就能够识别是哪个电平触发了。

2、不太明白,clk1触发后 sign=1 然后无论clk1下降或上升直到 clk2上升触发了sign=0?
如果是这样的话不能够这样写。clk1 clk2 触发的同一段程序,按你第一条那样编写是不行的。
应该always@(posedge clk1)
begin
if(!clk2) sign=1;
else sign=0;
end
这个比较简单,但是有个缺点是 clk2拉高以后 必须等到clk1再来一个上升沿sign才能变0;本回答被网友采纳
第2个回答  2011-05-22
1 always 的时间控制可以是沿触发也可以是电平触发的,可以单个信号也可以多个信号,中间需要用关键字 or 连接,如:
always @(posedge clock1 or posedge clock2) //由两个沿触发的always块
begin
if (clock1)
begin a<=0; /这里面不就可以判断出来了么,如果CLOCK1为1,即是第一个发生变化,然后执行0给a/
……
end

always @( a or b or c ) //由多个电平触发的always块
begin
……
end本回答被提问者采纳
相似回答