always@(posedge clk )中的多个if else 语句的执行顺序?
always@(posedge clk )begin
if
elseif 1
elseif 2
elseif 3
end
上面 always@(posedge clk )中的多个if else 语句是按12 3从上到下 顺序执行的吧 ?同一个时钟周期只能判断一个条件, 不要用程序执行语句的思想看,硬件上一次直接把所有条件都判断了 有= 和<=区别,不要想像成软件,要把它理解成硬件电路 if的优先级最高,后面依次减低。 分步执行,不过用时是一个时钟;IF太多对最高时钟有影响 是同一个时钟周期判断所有的条件,但是只能进入一个分支 if(...)里的条件是在一个时钟周期里同时判断的
多个if-else表示的是优先编码器,也就是之前的条件满足了就不会管后面的了
也就是说,综合的结果可能是多个2:1 mux……如果可以的话尽可能避免这种做法
用case就是并行判断了。 同样建议用case并行判断 Nuker 发表于 2017-7-16 15:05
是同一个时钟周期判断所有的条件,但是只能进入一个分支
再补充一句,在一个周期内从上往下判断是有顺序的,先判断上面的。
页:
[1]