
大家好,又见面了,我是你们的朋友全栈君。
门声明语句格式: <门的类型>[<驱动能力><延时>]<门实例 1>[,<门实例 2>,…<门实例 n>];
根据语义进行理解,wire 是连线,表示内部节点或者连线,assign语句中被赋值的信号必须是wire类型;reg 为 register 也就是寄存器,可以用来暂存内容,而且在always块中被赋值的信号必须定义为reg型。
always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
begin
i <= 4'd0;
....... end
else
case( i )
0:
.......
endcase因为在Verilog语言中,程序是并发执行的,如果我们去看一大段并发执行的代码,估计够呛,所以这里我也认真思考了作者提供的“基于仿顺序操作想法”的模板,我们可以清晰的分析出在每个不同的条件下会触发哪些语句的实现并且有条理的将这些语句联想出一个功能。
下面一段是作者原话:
基本上要搞懂这两个赋值操作符号的作用,就必须把“时序”的概念搞懂先。
一般上,参考书只是告诉我们一个是非阻塞,一个是非阻塞 .... 说实话,
当笔者把厚厚的参考书吃完以后,笔者完全还搞不懂究竟参考书都在说什么。
如果从笔者的角度去理解的话,只有在时序的活动中才可以很清楚的看清它们的区别。
宏观上,如同参考书中所说的一样;
微观上,在时序中“=”是引发“即时事件”,“<=”则是引发“时间点事件”。可是貌似在看完这段话后,我发现还是没有理解透彻。。。因此自己去查阅了其他的资料。
module ifblock(clk,a,b,c);
input clk,a;
output b,c;
reg rb = 0,rc = 0;
assign c = rc;
assign b = rb;
always @(posedge clk)
begin
rb = a;//阻塞赋值
rc = rb;
end
endmodule
module ifblock(clk,a,b,c);
input clk,a;
output b,c;
reg rb = 0,rc = 0;
assign c = rc;
assign b = rb;
always @(posedge clk)
begin
rb <= a;//非阻塞赋值
rc <= rb;
end
endmodule
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125652.html原文链接:https://javaforall.cn