verilog 中always可以用多个敏感信号控制吗

2024-11-19 12:02:03
推荐回答(5个)
回答(1):

可以呀!组合逻辑:always@(in_a or in_b or in_c or in_d)begin sum = in_a + in_b + in_c + in_d;end时序逻辑:always@(posedge Clk or negedge Rst)begin if(!Rst) Out <= 2'b00; else Out <= Out + 1'b1;end

回答(2):

我个人表示这种写法很奇怪,如果在always模块中使用边沿触发的一般是时钟信号,而作为if的判断条件一般是控制单元或者数据通道中的某一个信号。
真心不建议这么写,有两个问题,一个是设计的可读性,到底是同步时钟还是异步时钟在逻辑综合时很混乱,另一个就是时序约束的时候会很麻烦。

回答(3):

不要纠缠于verilog语法,你想从事IC设计的话,只需要知道组合逻辑与时序逻辑怎样用verilog去描述就行了。就像你学英语不是为了学单词,而是为了学习用英文单词正确表达意思,即使你每个单词都是对的,组成一句话,也可能表达不了任何意思。
verilog也是这样,哪怕你的语法都正确,但描述不了任何硬件,或者描述的硬件是不存在的。

回答(4):

当然可以,
对于时序逻辑,一般敏感信号为时钟和复位,可自行确定上下沿还是电平。

对于组合逻辑,一般要求触发为所有内部用到的信号,可以用always@(*)

回答(5):

可以呀!
组合逻辑:
always@(in_a or in_b or in_c or in_d)
begin
sum = in_a + in_b + in_c + in_d;
end

时序逻辑:
always@(posedge Clk or negedge Rst)
begin
if(!Rst)
Out <= 2'b00;
else
Out <= Out + 1'b1;
end