数据类型
- 基本数据类型:integer、parameter、reg和wire
- 其他类型:类似tri0
- 常量:数字、parameter
1)其中<位宽>‘<进制><数字>表示常整数,
2)x和z值:当表明位宽的数在某些位用来x和z来表示,只有他们在最左边的时候表示这几位上具有扩展性。对于?”号也表示z
3)负数:-8’d5(要用5的补数进行标识)
4)parameter:右边必须是常数。只在本模块中有用,如果在模块中要用,需要通过参数传递。这里还有一个localparm,仅适用于当前的module,不能进行传递参数 - 模块实例引用时传递参数defparam
module m(a,b,out);//被引用模块
parameter c= 7;
endmodule
module test
m mk(a,b,out);
defparam mk.c = 5;//例化模块名,和参数名
//m #(4) mk(a,b,out);对模块m的实例引用
...
endmodule
5)变量
-
nets type
输出随输入的变化而变化,wire变量,是通过assign语句进行组合逻辑,缺省时为wire。其中wire[n-1:0] 数据m表示每条总线,位宽为n,共有m条总线。 -
register type
可以看成是触发器,寄存器。然后主要使用过程块语句initial always task function等进行赋值,它需要明确的赋值,然后在重新赋值前保持原值。reg不一定都是触发器的组成,也可能是组合逻辑。
module w(a,b,out,c);
input a,b;
output out;
reg out;
wire c;
assign c = a;//assign只能生产组合逻辑
always @(b)//reg就可以生成由电平d的组合逻辑
out < = ~b;
endmodule
- memory type
由若干个相同宽度的reg的向量组成的数组。
类似reg[n-1:0] rega是一个n位的寄存器,reg mema[n-1:0]是由n个1位组成的寄存器组成的存储器。
赋值方式不一样:n位寄存器可以用一条赋值语句赋值,存储器的赋值需要先指明该单元在这个存储器的地址后,再进行读写操作。例如:rega = 0;√,mema[1023:0] = 0;√,其中的1023是指明了存储单元的地址。