回复 7#vigorkylin 额?sorry,第一个2‘b00我是想在时钟上升沿到来时先给Q给一个初值2’b00,然后由于是在begin…end模块里嘛,顺序执行,所以再判断使能端EN的值,若EN有效,则寄存器正常工作,并检测D端(D=Q+1,这个模块我没给出)的输入,若D的输入为2‘b00,此时将保持输入Q不变,也即是说,两个if是顺序的,判断完第1个才能判断第2个。但是经你这么一说,我突然发现,代码这样写可能会好些: always@(posedge) begin Q = 2‘b00; if(~EN) begin Q <= D; end else begin Q <= Q; end end 因为在Q输出为11时,比较器输出为1,此时EN端无效,就自动执行Q保持的功能了。 代码风格确实有所欠缺,sorry。 最后,其实我想问的是前面这句: Q = 2‘b00。我觉得这么写有问题,但是前仿又可以通过,。我也是醉了。。。