verilog语言学习6-9优质PPT.ppt
《verilog语言学习6-9优质PPT.ppt》由会员分享,可在线阅读,更多相关《verilog语言学习6-9优质PPT.ppt(96页珍藏版)》请在冰豆网上搜索。
当or门的输入信号置位时将传输到线网门的输入信号置位时将传输到线网net上。
上。
net类的类型(线网)类的类型(线网)有多种有多种net类型用于设计类型用于设计(design-specific)建模和工艺建模和工艺(technology-specific)建模建模没有声明的没有声明的net的缺省类型为的缺省类型为1位位(标量标量)wire类型。
但这个类型。
但这个缺省类型可由下面的编译指导改变:
缺省类型可由下面的编译指导改变:
default_nettypenet类型类型功功能能wire,trisupply1,supply0wor,triorwand,triandtriregtri1,tri0标准内部连接线标准内部连接线(缺省缺省)电源和地电源和地多驱动源线或多驱动源线或多驱动源线与多驱动源线与能保存电荷的能保存电荷的net无驱动时上拉无驱动时上拉/下拉下拉综合编译综合编译器不支持器不支持的的net类型类型net类的类型(线网)类的类型(线网)wire类型是最常用的类型,只有连接功能。
类型是最常用的类型,只有连接功能。
wire和和tri类型有相同的功能。
用户可根据需要将线网定义为类型有相同的功能。
用户可根据需要将线网定义为wire或或tri以提高可以提高可读性。
例如,可以用读性。
例如,可以用tri类型表示一个类型表示一个net有多个驱动源。
或者将一个有多个驱动源。
或者将一个net声明为声明为tri以指示这个以指示这个net可以是高阻态可以是高阻态Z(hign-impedance)。
可推广至。
可推广至wand和和triand、wor和和triorwand、wor有线逻辑功能;
与有线逻辑功能;
与wire的区别见下页的表。
的区别见下页的表。
trireg类型很象类型很象wire类型,但类型,但trireg类型在没有驱动时保持以前的值。
这个值的类型在没有驱动时保持以前的值。
这个值的强度随时间减弱。
强度随时间减弱。
修改修改net缺省类型的编译指导:
缺省类型的编译指导:
default_nettypenettype不能是不能是supply1和和supply0。
net类在发生逻辑冲突时的决断类在发生逻辑冲突时的决断Verilog有预定义的决断函数有预定义的决断函数支持与工艺无关的逻辑冲突决断支持与工艺无关的逻辑冲突决断wire-and用于集电极开路电路用于集电极开路电路wire-or用于射极耦合电路用于射极耦合电路寄存器类寄存器类(register)寄存器类型在赋新值以前保持原值寄存器类型在赋新值以前保持原值寄存器类型大量应用于行为模型描述及激励描述。
在下面的例子中,寄存器类型大量应用于行为模型描述及激励描述。
在下面的例子中,reg_a、reg_b、reg_sel用于施加激励给用于施加激励给2:
1多路器。
多路器。
用行为描述结构给寄存器类型赋值。
给用行为描述结构给寄存器类型赋值。
给reg类型赋值是在过程块中。
类型赋值是在过程块中。
寄存器类的类型寄存器类的类型寄存器类有四种数据类型寄存器类有四种数据类型寄存器类型功能reg可定义的无符号整数变量,可以是标量(1位)或矢量,是最常用的寄存器类型integer32位有符号整数变量,算术操作产生二进制补码形式的结果。
通常用作不会由硬件实现的的数据处理。
real双精度的带符号浮点变量,用法与integer相同。
time64位无符号整数变量,用于仿真时间的保存与处理realtime与real内容一致,但可以用作实数仿真时间的保存与处理不要混淆寄存器数据类型与结构级存储元件,如不要混淆寄存器数据类型与结构级存储元件,如udp_dffVerilog中中net和和register声明语法声明语法net声明声明rangedelay,net_name;
net_type:
net类型类型range:
矢量范围,以矢量范围,以MSB:
LSB格式格式delay:
定义与定义与net相关的延时相关的延时net_name:
net名称,一次可定义多个名称,一次可定义多个net,用逗号分开。
用逗号分开。
寄存器声明寄存器声明range,reg_name;
reg_type:
寄存器类型:
寄存器类型range:
LSB格式。
只对格式。
只对reg类型有效类型有效reg_name:
寄存器名称,一次可定义多个寄存器,用逗号分开:
寄存器名称,一次可定义多个寄存器,用逗号分开Verilog中中net和和register声明语法声明语法举例:
举例:
rega;
/一个标量寄存器一个标量寄存器wandw;
/一个标量一个标量wand类型类型netreg3:
0v;
/从从MSB到到LSB的的4位寄存器向量位寄存器向量reg7:
0m,n;
/两个两个8位寄存器位寄存器tri15:
0busa;
/16位三态总线位三态总线wire0:
31w1,w2;
/两个两个32位位wire,MSB为为bit0选择正确的数据类型选择正确的数据类型moduletop;
wirey;
rega,b;
DUTu1(y,a,b);
initialbegina=0;
b=0;
#5a=1;
endendmodulemoduleDUT(Y,A,B);
outputY;
inputA,B;
wireY,A,B;
and(Y,A,B);
endmodule输入端口可以由输入端口可以由net/register驱动,但输驱动,但输入端口只能是入端口只能是net输出端口可以是输出端口可以是net/register类型,输出类型,输出端口只能驱动端口只能驱动net在过程块中只能给在过程块中只能给register类型赋值类型赋值若若Y,A,B说明为说明为reg则会产生错误。
则会产生错误。
in1in2OABY双向端口输入双向端口输入/输出输出只能是只能是net类型类型选择数据类型时常犯的错误选择数据类型时常犯的错误用过程语句给一个用过程语句给一个net类型的或忘记声明类型的信号赋值。
类型的或忘记声明类型的信号赋值。
信息:
illegalassignment.将实例的输出连接到声明为将实例的输出连接到声明为register类型的信号上。
类型的信号上。
hasillegaloutputportspecification.将模块的输入信号声明为将模块的输入信号声明为register类型。
类型。
incompatibledeclaration,下面所列是常出的错误及相应的错误信息下面所列是常出的错误及相应的错误信息(errormessage)信号可以分为端口信号和内部信号。
出现在端口列表中的信号是端口信号,其它的信号为内部信号可以分为端口信号和内部信号。
出现在端口列表中的信号是端口信号,其它的信号为内部信号。
信号。
对于端口信号,输入端口只能是对于端口信号,输入端口只能是net类型。
输出端口可以是类型。
输出端口可以是net类型,也可以是类型,也可以是register类型。
若类型。
若输出端口在过程块中赋值则为输出端口在过程块中赋值则为register类型;
若在过程块外赋值类型;
若在过程块外赋值(包括实例化语句),则为包括实例化语句),则为net类类型。
型。
内部信号类型与输出端口相同,可以是内部信号类型与输出端口相同,可以是net或或register类型。
判断方法也与输出端口相同。
若在类型。
若在过程块中赋值,则为过程块中赋值,则为register类型;
若在过程块外赋值,则为类型;
若在过程块外赋值,则为net类型。
若信号既需要在过程块中赋值,又需要在过程块外赋值。
这种情况是有可能出现的,如决断信若信号既需要在过程块中赋值,又需要在过程块外赋值。
这种情况是有可能出现的,如决断信号。
这时需要一个中间信号转换。
号。
信号类型确定方法总结如下:
选择数据类型时常犯的错误举例选择数据类型时常犯的错误举例修改前:
修改前:
moduleexample(o1,o2,a,b,c,d);
inputa,b,c,d;
outputo1,o2;
regc,d;
rego2andu1(o2,c,d);
always(aorb)if(a)o1=b;
elseo1=0;
endmodule修改后:
修改后:
/regc,d;
/rego2rego1;
andu1(o2,c,d);
endmoduleexample.v选择数据类型时常犯的错误举例选择数据类型时常犯的错误举例Compilingsourcefileexample.vError!
Illegalleft-hand-sideassignmentVerilog-ILHSAexample.v,11:
o1=b;
Error!
Illegalleft-hand-sideassignmentVerilog-ILHSAexample.v,12:
o1=0;
2errors第一次编译信息第一次编译信息verilogcexample.v第二次编译信息第二次编译信息Compilingsourcefileexample.vError!
Incompatibledeclaration,(c)definedasinputatline2Verilog-IDDILexample.v,5:
Incompatibledeclaration,(d)definedasinputatline2Verilog-IDDILexample.v,5:
Gate(u1)hasillegaloutputspecificationVerilog-GHIOSexample.v,8:
3errors参数(参数(parameters)用参数声明一个可变常量,常用于定义延时及宽度变量。
用参数声明一个可变常量,常用于定义延时及宽度变量。
参数定义的语法:
parameter;
可一次定义多个参数,用逗号隔开。
在使用文字在使用文字(literal)的地方都可以使用参数。
的地方都可以使用参