第三章
1.模块结构:模块端口定义,IO说明,内部信号说明,功能定义。
过程块都是并行执行(initial always)、连续赋值语句(assign)、实例引用语句。无关顺序
2.数据类型:(wire、reg、integer、parameter)最常用。Large medium scalered …16共16种
3.常量:数字,进制有关:注意负数写法:-30’d10、8’h4x(低四位不定)、8’b1100_0011(可读性)“AB”=16’B01000001_01000010 (字符串AB,值为16’h4142),长度默认是32位或64。
4.参数型:parameter average_delay=(r+f)/2 参数型在调用时具有很高的灵活性。定义延迟时间和位宽。
5.变量:网络类型的变量只能被驱动(门,连续赋值语句,assign)等,若无则为高组态。
6.Wire 常为单门驱动,而tri则是多驱动器是的网络数据。Wire或tri在逻辑强度不同时会产生不定值。
Wire [N-1:0] a,b;
7.reg 常代表触发器,默认初始值为不定。Always中的每一个信号都必须为reg型。Reg[ N-1:0] a,b;可以正负值。当为操作数时其为无符号值,即当一个4为的寄存器值倍赋值为-1时,运算时将会被当作+15。
memory型即通过reg型建立数组建模,描述ram型存储器、rom储存器、reg文件。Reg[7:0] mema[255:0]; 256个八位储存器,寻址范围0到255。对mema操作 必须指定位置。如mema[3]=0;
8.算术运算符(+,-, x,/,%)赋值运算(=,<=)关系运算符(<,>,<=,>=)逻辑运算符(&&,||,!)条件运算符(?:)位运算符(~,|,^,&,^~)移位运算符(<<,>>)拼接运算符({})%运算符最后去被除数符号:例如-10%3= -1;
Parameter在实例中的应用优势
module decode(a,f)
Parameter width=1;polarity=1;
...
endmodule
module top;
wire [3:0] a4;wire [4:0] a5;
wire[15:0] f16;wire[31:0] f32;
decode #(4,0) d1(a4,f16);
decode #(5) d1(a5,f32);
endmodule
d1得到了来自参数传递过来的值其此时的width和polarity分别为4,0而d2的为5和0。
不可综合条件:字符串$display,网络类型wire初始化,defparam,deassign,延时(#5),mos开关,双向传输开关,cmos门和电源上下拉,循环语句(forever,while)specify语句和自定义udp元件
一个模块中改变另一个模块中的参数值则需使用defparam命令。(不可综合)
‘include “top.v” ‘include “block.v”
‘include “annotate.v”
module test
Wire w; top t();
endmodule
module top;
wire w;block b1();block b2();
endmodule
module block;
Parameter p=0;
endmodule
module annotate;
defparam
test.t.b1.p=2; test.t.b2.p=3;
endmodule