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

2024-11-06 00:35:42
推荐回答(2个)
回答(1):

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):

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