1 、wire型和reg型
wire网线型表示硬件单元之间的连线,值由驱动单元决定,缺省值是高阻值z。模块的输入输出信号数据类型默认为wire型。
reg寄存器型表示一个抽象的数据储存单元,只能在always和initial语句中用<=赋值,缺省值是不定值x。
2 、连续赋值和过程赋值
连续赋值常以assign为关键词,用"="赋值,赋值的对象是wire型用于驱动wire网线,assign不能出现在always和initial语句中。
示例:assign c=sel?a:b; assign c={a,b};
过程赋值只能出现在initial和always语句中,用"="和"<="赋值,赋值的对象是reg型用于驱动reg寄存器,过程赋值又分为阻塞赋值和非阻塞赋值。
3 、阻塞赋值和非阻塞赋值
首先要知道在同一个always里不能既用非阻塞赋值又用阻塞赋值。不能在两个不同的always语句块中对同一个变量赋值。
阻塞赋值操作符是"=",赋值语句在句块中按顺序依次赋值,一条赋值语句执行完成等式左边的值立刻改变,下一条赋值语句只能等当前赋值语句执行完成才能执行。
假设初始值A=1,B=3
always@(posedge clk)
begin
B=A;
C=B+1;
end
这个语句块执行一次后的结果为B=1,C=2
非阻塞赋值操作符是"<=",非阻塞赋值首先计算语句块中所有赋值语句等式右边表达式的值,然后等always语句块结束再同时对所有赋值语句左边寄存器变量进行赋值。
假设初始值A=1,B=3
always@(posedge clk)
begin
B<=A;
C<=B+1;
end
这个语句块执行一次后的结果为B=1,C=4
4 、二进制码与BCD码、格雷码