对最近学习的基础东西总结,防止又给忘了...
——线网类型
1. wire类型:
起到连接功能,且需要被持续的驱动(驱动它的可以是逻辑门或者模块),当驱动的值发生变化时,新值会自动传送到线网上。
经常用于连续赋值语句的输出。
注意:程序模块中输入输出信号类型默认为wire型。
wire d ; //默认1 bit 的连线
wire [7:0] x, y, z; //x,y,z都是8 bit 的wire 型连线
2.tri类型:
多种驱动源驱动同一个线时的线网数据类型。
栗子:tri [7:0] data; 就是声明了一个 8 bit 三态线网
我们就可以用wire表示下图:
module mux2_1(out,in1,in2,sel);
output out ;
input in1 in2 sel;
wire sel_ba,and_out1,and_out2;
not u1(sel_ba,sel);
and u2(and_out1,in1,sel_ba);
and u3(and_out2,in2,sel);
or u4(out,and_out1,and_out2);
endmodule
//没试验,所以不知道对着还是错。。。不过表达的意思应该没问题;
——变量声明:
有reg,time,integer等,初始值是不定态“x”值。
*声明过的变量就不能再声明
——寄存器类型:
除了类型名称,和c语言的变量的作用我觉得没区别。
在被赋予新值之前能一直保持原数值的变量类型,这也是和线网类型的不同之处,线网类型需要一直被驱动才能保持原数值。
1.reg:
可为正,可为负,当reg型数据是表达式中的数据时,其值默认是正值,所以reg型变量要明确声明其符号(当然我的建议是用下面的integer)。将有符号数赋给reg会变成别的数。
-
使用Verilog的reg信号,用于过程块中的左值赋值。
-
使用Verilog的wire信号,用于连续赋值。
2.integer:
integer型变量不必也不允许声明符号,其中存储的二进制数本身就代表有符号数
3.real:
实数寄存器。
当实数赋给整数时,实数会取最接近的整数赋给整数变量。
就像下面的这个:
real dhx;
integer zl;
dhx = 3.14;
zl = dhx; // 这个时候zl的值是3,如果dhx是3.7的时候zl是4
4.time:
保存仿真时间。
——标量与矢量:
标量:位宽1 bit 的线网和寄存器类型。
矢量:位宽大于1 bit的线网和寄存器类型。
——端口:
module 模块名字(端口 , 端口 ,......) ;
注意:端口必须声明;端口声明不能重复;数据间的数据只能通过其端口调用。