




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/1/41第三章常用Verilog语法(一)周晓波北京交通大学电子信息学院xbzhou@516836362022/12/291第三章常用Verilog语法(一)周2023/1/42内容提要3.1模块结构3.2数据类型2022/12/292内容提要3.1模块结构2023/1/433.1模块结构Verilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的:一)描述接口;二)描述逻辑功能,即定义输入是如何影响输出的。下面举例说明:2022/12/2933.1模块结构Verilog的基本设2023/1/443.1模块结构端口定义I/O说明内部信号声明功能定义2022/12/2943.1模块结构端口定义2023/1/453.1模块的结构Verilog模块的结构由在module和endmodule
关键词之间的四个主要部分组成:
-端口信息:moduleblock1(a,b,c,d);-输入/输出说明:inputa,b,c;outputd;-内部信号:wirex;-功能定义:assignd=a|x;assignx=(b&~c);endmodule
2022/12/2953.1模块的结构Verilog模块2023/1/46编写VerilogHDL模块的练习请在下面的空格中填入适当的符号使其成为右图的Verilog模块:
moduleblock1(a,b,—,—,—);input—,—,—;——d,—;assignd=a|(b&~c);assigne=(b&~c);______abcde2022/12/296编写VerilogHDL模块的练习请2023/1/47编写VerilogHDL模块的练习请在下面的空格中填入适当的符号使其成为右图的Verilog模块:
moduleblock1(a,b,c,d,e);inputa,b,c;
outputd,e;assignd=a|(b&~c);assigne=(b&~c);
endmoduleabcde2022/12/297编写VerilogHDL模块的练习请2023/1/48“与或非”门电路moduleAOI(A,B,C,D,F);inputA,B,C,D;outputF;wireA,B,C,D,F; assignF=~((A&B)|(C&D));endmodule2022/12/298“与或非”门电路2023/1/493.1.1模块的端口定义模块的端口声明了模块的输入输出端口
module模块名(端口1,端口2,端口3,…);模块的端口表示的是模块的输入输出口名,与别的模块联系端口的标识。模块引用的问题
2022/12/2993.1.1模块的端口定义模块的端口声2023/1/410模块调用(引用)形式模块调用的基本形式为:模块名调用名(端口名表项)
由于描述的是具体的硬件逻辑,每个模块都表示一个具有特定功能的电路块。因此每当它被其它模块调用时,该模块内部被调用的电路块就被复制一次。如果在当前模块中多次调用同一个模块,则需要用不同的调用名。VerilogHDL的模块调用和C语言的函数调用相似,也存在形参和实参的结合问题。2022/12/2910模块调用(引用)形式模块调用的基本形2023/1/411模块调用(引用)方式模块的调用方式可大致分为两种:位置关联调用方式、端口名关联调用方式。【例】模块调用的例子。moduleha(out1,out2,in1,in2);inputin1,in2;outputout1,out2;…...endmodule2022/12/2911模块调用(引用)方式模块的调用方式可2023/1/412模块调用(引用)方式模块调用采用位置关联调用方式,只需按序列出实例的端口名。模块实例语句如下:
hah1(P,Q,S,C);在本语句中,ha是模块名,h1是实例名称,并且端口按序关联。模块调用采用端口名关联调用方式,则无需按序排列端口名,但实例的端口信号和被调用模块的端口信号必须一一列出。模块实例语句如下:
hah2(.in2(C),.in1(S),.out1(P),.out2(Q),)
由于端口之间的对应关系十分清楚,因此端口名的排列顺序可随意改变。2022/12/2912模块调用(引用)方式模块调用采用位置2023/1/413模块端口定义声明输入、输出或是双向声明数据类型(wireorreg)default:wire输入和双向不能声明为reg型测试模块不需要端口定义2022/12/2913模块端口定义声明输入、输出或是双向2023/1/4143.1.2模块内容I/O说明内部信号声明功能定义2022/12/29143.1.2模块内容I/O说明2023/1/415I/O说明的格式(1)输入口:input[信号位宽-1,0]端口名1;input[信号位宽-1,0]端口名2;……input[信号位宽-1,0]端口名i;输出口output[信号位宽-1,0]端口名1;output[信号位宽-1,0]端口名2;……output[信号位宽-1,0]端口名j;输入输出口inout[信号位宽-1,0]端口名1;inout[信号位宽-1,0]端口名2;……inout[信号位宽-1,0]端口名k;2022/12/2915I/O说明的格式(1)输入口:2023/1/416I/O说明的格式(2)可以在端口声明语句中同时进行端口类型说明modulemodule_name(inputport1,inputport2,…outputport1,outputport2…);2022/12/2916I/O说明的格式(2)可以在端口声明2023/1/417内部信号说明对端口信号、节点信号必须进行数据类型的定义默认定义:wire类型
regcout;reg[3:0]out;wireA,B,C,D;2022/12/2917内部信号说明对端口信号、节点信号必须2023/1/418功能定义在Verilog模块中有三种方法可以生成逻辑电路:-用assign语句:assigncs=(a0&~a1&~a2);-用元件的实例调用:and2and_inst(q,a,b);-用always块:always@(posedgeclkorposedgeclr)begin
if(clr)q<=0;
elseif(en)q<=d;end2022/12/2918功能定义在Verilog模块中有三2023/1/419功能定义assign:描述组合逻辑最常用的方法之一always:组合逻辑时序逻辑“<=“一种赋值2022/12/2919功能定义assign:描述组合逻辑2023/1/420并发和顺序执行并发:Verilog模块中各子模块是并发执行过程块:always、initial元件例化assign顺序:always模块内部各个always块之间是并发关系2022/12/2920并发和顺序执行并发:Verilog2023/1/421要点小结Verilog模块中所有过程块、连续赋值语句、实例引用都是并行的;表示一种通过变量名互相连接的关系;同一模块中这三者出线的先后顺序没有关系;只有assign和实例引用语句可以独立于过程块出线在模块的功能定义部分。2022/12/2921要点小结Verilog模块中所有过程2023/1/422内容提要3.1模块结构3.2数据类型2022/12/2922内容提要3.1模块结构2023/1/423Verilog有三种主要的数据类型:
Nets
表示器件之间的物理连接,称为网络连接类型Register
表示抽象的储存单元,称为寄存器/变量类型Parameter
表示运行时的常数,称为参数类型主要的数据类型2022/12/2923Verilog有三种主要的数据类型2023/1/4240、低、伪、逻辑低、地、VSS、负插入01XZ0bufbufbufbufif11、高、真、逻辑高、电源、VDD、正插入X、不确定:逻辑冲突无法确定其逻辑值HiZ、高阻抗、三态、无驱动源Verilog的四种逻辑值2022/12/29240、低、伪、逻辑低、地、VSS、负插2023/1/4253.2.1常量值不改变的量数字整数二进制整数b或B十进制整数d或D十六进制整数h或H八进制整数o或O8‘b101000118’haa2022/12/29253.2.1常量值不改变的量2023/1/4263.2.1常量x和zX:不定值Z:高阻值4’b10x08’h4z2022/12/29263.2.1常量x和z2023/1/4273.2.1常量负数-:放在数字定义表达式的最前面-8’d5下画线分割数的表达2022/12/29273.2.1常量负数2023/1/4283.2.1常量参数parameterparameter参数名1=表达式,参数名2=表达式;表达式必须是常数表达式,只能包含数字或参数parameterbyte_size=8,byte_msb=byte_size-1;2022/12/29283.2.1常量参数paramete2023/1/429参数化设计参数化设计是电路设计的重要概念之一;参数化功能块只要在映射过程中赋予不同的参数,就可以得到不同的设计;参数化设计在IP产业中占有重要的位置;参数属性由其代表的参数属性决定2022/12/2929参数化设计参数化设计是电路设计的重要2023/1/430参数传递举例moduledecode(A,F); parameterwidth=1,polarity=1;endmodulemoduletop; decode#(4,0)D1(A4,F16);decode#(5)D2(A5,F32);endmodule2022/12/2930参数传递举例moduledecod2023/1/431参数要点常用参数来声明运行时的常数。可用字符串表示的任何地方,都可以用定义的参数来代替。参数是本地的,其定义只在本模块内有效。2022/12/2931参数要点常用参数来声明运行时的常数。2023/1/432举例说明:modulemd1(out,in1,in2);…..parametercycle=20,prop_del=3,setup=cycle/2-prop_del,p1=8,x_word=16’bx,file=“/user1/jmdong/design/mem_file.dat”;wire[p1:0]w1;//用参数来说明wire的位宽
….initialbegin$open(file);…….#20000display(“%s”,file);$stopend….endmodule举例2022/12/2932举例说明:举例2023/1/433
举例说明:modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…modmk(out,ina,inb);defparammk.cycle=6,mk.file=“../my_mem.dat”;…endmodule
参数值的改写(方法之一)
2022/12/2933参数值的改写(方法之一)
2023/1/434举例说明:modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…mod#(5,3.20,“../my_mem.dat”)mk(out,ina,inb);…endmodule
参数值的改写(方法之二)2022/12/2934参数值的改写(方法之二)2023/1/4353.2.2变量硬件描述语言中,变量的数据类型用来表示数字电路中的物理连线、数据存储和传输单元等物理量。2022/12/29353.2.2变量硬件描述语言中,变量2023/1/4363.2.2数据类型线网类型:表示结构化元件间的物理连线,综合后一般为连线节点网络(线网)数据类型表示结构实体之间的物理连接不能存储值,必须受到驱动值assign的驱动寄存器类型:抽象的数据存储单元只能在always和initial语句中被赋值,有可能被综合成寄存器2022/12/29363.2.2数据类型线网类型:表示结2023/1/437Nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例如:右图上,selb的改变,会自动地立刻影响或门的输出。netsabslselbselansloutNets线网类型2022/12/2937Nets(网络连线):netsa2023/1/438连接(Nets)类型变量的种类:在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。常见的有以下几种。
类型功能
wire,tri
对应于标准的互连线(缺省)
supply1,supply2
对应于电源线或接地线
wor,trior
对应于有多个驱动源的线或逻辑连接
wand,triand
对应于有多个驱动源的线与逻辑连接
trireg
对应于有电容存在能暂时存储电平的连接
tri1,tri0
对应于需要上拉或下拉的连接如果不明确地说明连接是何种类型,应该是指wire类型。Nets的种类2022/12/2938连接(Nets)类型变量的种类:N2023/1/439Nets线网类型wire和tri线网:两者均为连线,tri用于描述多个驱动源同时驱动同一根线的线网类型,并无特殊意义
wireA,B;wire[7:0]Data;tri[15:0]DataBus;Verilog数据类型的缺省值为1位wire2022/12/2939Nets线网类型wire和tri线网2023/1/440wire型wire型数据通常用来表示以assign语句赋值的组合逻辑信号。模块的输入输出信号类型缺省定义为wireWire可以作为表达式输入,也可以作为assign语句或实例元件的输出。
wiredata1,data2,…,datan; wire[n-1:0]data1,data2,…,datan;2022/12/2940wire型wire型数据通常用来表示2023/1/441
寄存器(register)类型变量
register型变量能保持其值,直到它被赋于新的值。register型变量常用于行为建模,产生测试的激励信号。常用行为语句结构来给寄存器类型的变量赋值。abslselbselansloutreg_areg_selreg_bRegister2022/12/2941寄存器(register)类型变量2023/1/442
寄存器(register)类型变量的数据类型
寄存器类型变量共有四种数据类型:类型功能
.
reg无符号整数变量,可以选择不同的位宽。
integer有符号整数变量,32位宽,算术运算可产生2的补码。
real有符号的浮点数,双精度。
time无符号整数变量,64位宽(Verilog-XL仿真工具用64位的正数来记录仿真时刻)Register的种类可综合2022/12/2942寄存器(register)类型变量2023/1/443reg型registertype表示一个抽象的数据存储单元,对应的是具有状态保持作用的电路元件(触发器、寄存器)只能在always语句和initial语句中被赋值,其值在两次赋值之间被保存,具有x的缺省值。在always,initial等过程块内,被赋值的每一个信号必须是寄存器型。
regdata1,data2,…,datan; reg[n-1:0]data1,data2,…,datan;2022/12/2943reg型registertype表2023/1/444输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输出口(output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输入/输出口(inout)只可以由网络连接驱动,但它本身只能驱动网络连接。如果信号变量是在过程块(initial块或always块)中被赋值的,必须把它声明为寄存器类型变量
如何选择正确的数据类型?2022/12/2944如何选择正确的数据类型?2023/1/445举例说明数据类型的选择moduletop;wirey;rega,b;DUTu1(y,a,b);initialbegina=0;b=0;#10a=1;….endendmodule模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinoutmoduleDUT(Y,A,B_);outputY;inputA,B:wireY,A,B;and(Y,A,B);endmodule举例说明数据类型的选择2022/12/2945举例说明数据类型的选择模块DUT的边2023/1/446
在过程块中对变量赋值时,忘了把它定义为寄存器类型(reg)或已把它定义为连接类型了(wire)把实例的输出连接出去时,把它定义为寄存器类型了把模块的输入信号定义为寄存器类型了。这是经常犯的三个错误!!!选择数据类型时常犯的错误
2022/12/2946选择数据类型时常犯的错误
2023/1/447Verilog模块中的信号只有两种主要的信号类型:
-寄存器类型:reg在always块中被赋值的信号,往往代表触发器,但不一定是触发器。-连线类型:wire用assign关键词指定的组合逻辑的信号或连线2022/12/2947Verilog模块中的信号只有两种主2023/1/448Verilog模块中的信号要点需要注意的是:
-寄存器(reg)类型不一定是触发器。
-它只是在always块中赋值的信号。2022/12/2948Verilog模块中的信号要点需要注2023/1/449Verilog中reg与wire的不同点用寄存器(reg)类型变量生成组合逻辑举例:modulerw1(a,b,out1,out2);inputa,b;outputout1,out2;regout1;wireout2;assignout2=a;always@(b)out1<=~b;endmoduleaout2BUFFbINVout12022/12/2949Verilog中reg与wire的不2023/1/450Verilog中reg与wire的不同点用寄存器(reg)类型变量生成触发器的例子:modulerw2(clk,d,out1,out2);inputclk,d;outputout1,out2;regout1;wireout2;assignout2=d&~out1;always@(posedgeclk)beginout1<=d;endendmoduledout2AND2i1clkout1DQDFF2022/12/2950Verilog中reg与wire的不2023/1/451memory型reg型数组完成存储器的建模RAMROM寄存器2022/12/2951memory型reg型数组完成存储器2023/1/452寄存器reg型变量可以构成寄存器和存储器regmybit;//1位寄存器reg[7:0]mybyte;//8位寄存器位选择和域选择A=mybyte[6];B=mybyte[5:2];2022/12/2952寄存器reg型变量可以构成寄存器和存2023/1/453
Verilog语言支持寄存器阵列的声明:举例说明:integerNUMS[7:0];//8个整型变量的寄存器阵列timet_vals[3:0];//4个时间变量的寄存器阵列数据类型为reg的阵列常称为存储器(即memory):reg[15:0]MEM[0:1023];//1Kx16位的存储器reg[7:0]PREP[‘hfffe:‘hffff];//2x8位的存储器可以用参数来表示存储器的大小:parameterwordsize=16;parametermemsize=1024;reg[wordsize-1:0]MEM3[memsize-1:0];寄存器阵列2022/12/2953Verilog语言支持寄存器阵2023/1/454存储器
若干个相同宽度的reg向量构成数组,也就是存储器。
reg[7:0]mymem[1023:0];parameterwordwidth=8,memsize=1024;reg[wordwidth-1:0]mymen[memsize-1:0];2022/12/2954存储器
若干个相同宽度的reg向量构2023/1/455第三章常用Verilog语法(一)周晓波北京交通大学电子信息学院xbzhou@516836362022/12/291第三章常用Verilog语法(一)周2023/1/456内容提要3.1模块结构3.2数据类型2022/12/292内容提要3.1模块结构2023/1/4573.1模块结构Verilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的:一)描述接口;二)描述逻辑功能,即定义输入是如何影响输出的。下面举例说明:2022/12/2933.1模块结构Verilog的基本设2023/1/4583.1模块结构端口定义I/O说明内部信号声明功能定义2022/12/2943.1模块结构端口定义2023/1/4593.1模块的结构Verilog模块的结构由在module和endmodule
关键词之间的四个主要部分组成:
-端口信息:moduleblock1(a,b,c,d);-输入/输出说明:inputa,b,c;outputd;-内部信号:wirex;-功能定义:assignd=a|x;assignx=(b&~c);endmodule
2022/12/2953.1模块的结构Verilog模块2023/1/460编写VerilogHDL模块的练习请在下面的空格中填入适当的符号使其成为右图的Verilog模块:
moduleblock1(a,b,—,—,—);input—,—,—;——d,—;assignd=a|(b&~c);assigne=(b&~c);______abcde2022/12/296编写VerilogHDL模块的练习请2023/1/461编写VerilogHDL模块的练习请在下面的空格中填入适当的符号使其成为右图的Verilog模块:
moduleblock1(a,b,c,d,e);inputa,b,c;
outputd,e;assignd=a|(b&~c);assigne=(b&~c);
endmoduleabcde2022/12/297编写VerilogHDL模块的练习请2023/1/462“与或非”门电路moduleAOI(A,B,C,D,F);inputA,B,C,D;outputF;wireA,B,C,D,F; assignF=~((A&B)|(C&D));endmodule2022/12/298“与或非”门电路2023/1/4633.1.1模块的端口定义模块的端口声明了模块的输入输出端口
module模块名(端口1,端口2,端口3,…);模块的端口表示的是模块的输入输出口名,与别的模块联系端口的标识。模块引用的问题
2022/12/2993.1.1模块的端口定义模块的端口声2023/1/464模块调用(引用)形式模块调用的基本形式为:模块名调用名(端口名表项)
由于描述的是具体的硬件逻辑,每个模块都表示一个具有特定功能的电路块。因此每当它被其它模块调用时,该模块内部被调用的电路块就被复制一次。如果在当前模块中多次调用同一个模块,则需要用不同的调用名。VerilogHDL的模块调用和C语言的函数调用相似,也存在形参和实参的结合问题。2022/12/2910模块调用(引用)形式模块调用的基本形2023/1/465模块调用(引用)方式模块的调用方式可大致分为两种:位置关联调用方式、端口名关联调用方式。【例】模块调用的例子。moduleha(out1,out2,in1,in2);inputin1,in2;outputout1,out2;…...endmodule2022/12/2911模块调用(引用)方式模块的调用方式可2023/1/466模块调用(引用)方式模块调用采用位置关联调用方式,只需按序列出实例的端口名。模块实例语句如下:
hah1(P,Q,S,C);在本语句中,ha是模块名,h1是实例名称,并且端口按序关联。模块调用采用端口名关联调用方式,则无需按序排列端口名,但实例的端口信号和被调用模块的端口信号必须一一列出。模块实例语句如下:
hah2(.in2(C),.in1(S),.out1(P),.out2(Q),)
由于端口之间的对应关系十分清楚,因此端口名的排列顺序可随意改变。2022/12/2912模块调用(引用)方式模块调用采用位置2023/1/467模块端口定义声明输入、输出或是双向声明数据类型(wireorreg)default:wire输入和双向不能声明为reg型测试模块不需要端口定义2022/12/2913模块端口定义声明输入、输出或是双向2023/1/4683.1.2模块内容I/O说明内部信号声明功能定义2022/12/29143.1.2模块内容I/O说明2023/1/469I/O说明的格式(1)输入口:input[信号位宽-1,0]端口名1;input[信号位宽-1,0]端口名2;……input[信号位宽-1,0]端口名i;输出口output[信号位宽-1,0]端口名1;output[信号位宽-1,0]端口名2;……output[信号位宽-1,0]端口名j;输入输出口inout[信号位宽-1,0]端口名1;inout[信号位宽-1,0]端口名2;……inout[信号位宽-1,0]端口名k;2022/12/2915I/O说明的格式(1)输入口:2023/1/470I/O说明的格式(2)可以在端口声明语句中同时进行端口类型说明modulemodule_name(inputport1,inputport2,…outputport1,outputport2…);2022/12/2916I/O说明的格式(2)可以在端口声明2023/1/471内部信号说明对端口信号、节点信号必须进行数据类型的定义默认定义:wire类型
regcout;reg[3:0]out;wireA,B,C,D;2022/12/2917内部信号说明对端口信号、节点信号必须2023/1/472功能定义在Verilog模块中有三种方法可以生成逻辑电路:-用assign语句:assigncs=(a0&~a1&~a2);-用元件的实例调用:and2and_inst(q,a,b);-用always块:always@(posedgeclkorposedgeclr)begin
if(clr)q<=0;
elseif(en)q<=d;end2022/12/2918功能定义在Verilog模块中有三2023/1/473功能定义assign:描述组合逻辑最常用的方法之一always:组合逻辑时序逻辑“<=“一种赋值2022/12/2919功能定义assign:描述组合逻辑2023/1/474并发和顺序执行并发:Verilog模块中各子模块是并发执行过程块:always、initial元件例化assign顺序:always模块内部各个always块之间是并发关系2022/12/2920并发和顺序执行并发:Verilog2023/1/475要点小结Verilog模块中所有过程块、连续赋值语句、实例引用都是并行的;表示一种通过变量名互相连接的关系;同一模块中这三者出线的先后顺序没有关系;只有assign和实例引用语句可以独立于过程块出线在模块的功能定义部分。2022/12/2921要点小结Verilog模块中所有过程2023/1/476内容提要3.1模块结构3.2数据类型2022/12/2922内容提要3.1模块结构2023/1/477Verilog有三种主要的数据类型:
Nets
表示器件之间的物理连接,称为网络连接类型Register
表示抽象的储存单元,称为寄存器/变量类型Parameter
表示运行时的常数,称为参数类型主要的数据类型2022/12/2923Verilog有三种主要的数据类型2023/1/4780、低、伪、逻辑低、地、VSS、负插入01XZ0bufbufbufbufif11、高、真、逻辑高、电源、VDD、正插入X、不确定:逻辑冲突无法确定其逻辑值HiZ、高阻抗、三态、无驱动源Verilog的四种逻辑值2022/12/29240、低、伪、逻辑低、地、VSS、负插2023/1/4793.2.1常量值不改变的量数字整数二进制整数b或B十进制整数d或D十六进制整数h或H八进制整数o或O8‘b101000118’haa2022/12/29253.2.1常量值不改变的量2023/1/4803.2.1常量x和zX:不定值Z:高阻值4’b10x08’h4z2022/12/29263.2.1常量x和z2023/1/4813.2.1常量负数-:放在数字定义表达式的最前面-8’d5下画线分割数的表达2022/12/29273.2.1常量负数2023/1/4823.2.1常量参数parameterparameter参数名1=表达式,参数名2=表达式;表达式必须是常数表达式,只能包含数字或参数parameterbyte_size=8,byte_msb=byte_size-1;2022/12/29283.2.1常量参数paramete2023/1/483参数化设计参数化设计是电路设计的重要概念之一;参数化功能块只要在映射过程中赋予不同的参数,就可以得到不同的设计;参数化设计在IP产业中占有重要的位置;参数属性由其代表的参数属性决定2022/12/2929参数化设计参数化设计是电路设计的重要2023/1/484参数传递举例moduledecode(A,F); parameterwidth=1,polarity=1;endmodulemoduletop; decode#(4,0)D1(A4,F16);decode#(5)D2(A5,F32);endmodule2022/12/2930参数传递举例moduledecod2023/1/485参数要点常用参数来声明运行时的常数。可用字符串表示的任何地方,都可以用定义的参数来代替。参数是本地的,其定义只在本模块内有效。2022/12/2931参数要点常用参数来声明运行时的常数。2023/1/486举例说明:modulemd1(out,in1,in2);…..parametercycle=20,prop_del=3,setup=cycle/2-prop_del,p1=8,x_word=16’bx,file=“/user1/jmdong/design/mem_file.dat”;wire[p1:0]w1;//用参数来说明wire的位宽
….initialbegin$open(file);…….#20000display(“%s”,file);$stopend….endmodule举例2022/12/2932举例说明:举例2023/1/487
举例说明:modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…modmk(out,ina,inb);defparammk.cycle=6,mk.file=“../my_mem.dat”;…endmodule
参数值的改写(方法之一)
2022/12/2933参数值的改写(方法之一)
2023/1/488举例说明:modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…mod#(5,3.20,“../my_mem.dat”)mk(out,ina,inb);…endmodule
参数值的改写(方法之二)2022/12/2934参数值的改写(方法之二)2023/1/4893.2.2变量硬件描述语言中,变量的数据类型用来表示数字电路中的物理连线、数据存储和传输单元等物理量。2022/12/29353.2.2变量硬件描述语言中,变量2023/1/4903.2.2数据类型线网类型:表示结构化元件间的物理连线,综合后一般为连线节点网络(线网)数据类型表示结构实体之间的物理连接不能存储值,必须受到驱动值assign的驱动寄存器类型:抽象的数据存储单元只能在always和initial语句中被赋值,有可能被综合成寄存器2022/12/29363.2.2数据类型线网类型:表示结2023/1/491Nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例如:右图上,selb的改变,会自动地立刻影响或门的输出。netsabslselbselansloutNets线网类型2022/12/2937Nets(网络连线):netsa2023/1/492连接(Nets)类型变量的种类:在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。常见的有以下几种。
类型功能
wire,tri
对应于标准的互连线(缺省)
supply1,supply2
对应于电源线或接地线
wor,trior
对应于有多个驱动源的线或逻辑连接
wand,triand
对应于有多个驱动源的线与逻辑连接
trireg
对应于有电容存在能暂时存储电平的连接
tri1,tri0
对应于需要上拉或下拉的连接如果不明确地说明连接是何种类型,应该是指wire类型。Nets的种类2022/12/2938连接(Nets)类型变量的种类:N2023/1/493Nets线网类型wire和tri线网:两者均为连线,tri用于描述多个驱动源同时驱动同一根线的线网类型,并无特殊意义
wireA,B;wire[7:0]Data;tri[15:0]DataBus;Verilog数据类型的缺省值为1位wire2022/12/2939Nets线网类型wire和tri线网2023/1/494wire型wire型数据通常用来表示以assign语句赋值的组合逻辑信号。模块的输入输出信号类型缺省定义为wireWire可以作为表达式输入,也可以作为assign语句或实例元件的输出。
wiredata1,data2,…,datan; wire[n-1:0]data1,data2,…,datan;2022/12/2940wire型wire型数据通常用来表示2023/1/495
寄存器(register)类型变量
register型变量能保持其值,直到它被赋于新的值。register型变量常用于行为建模,产生测试的激励信号。常用行为语句结构来给寄存器类型的变量赋值。abslselbselansloutreg_areg_selreg_bRegister2022/12/2941寄存器(register)类型变量2023/1/496
寄存器(register)类型变量的数据类型
寄存器类型变量共有四种数据类型:类型功能
.
reg无符号整数变量,可以选择不同的位宽。
integer有符号整数变量,32位宽,算术运算可产生2的补码。
real有符号的浮点数,双精度。
time无符号整数变量,64位宽(Verilog-XL仿真工具用64位的正数来记录仿真时刻)Register的种类可综合2022/12/2942寄存器(register)类型变量2023/1/497reg型registertype表示一个抽象的数据存储单元,对应的是具有状态保持作用的电路元件(触发器、寄存器)只能在always语句和initial语句中被赋值,其值在两次赋值之间被保存,具有x的缺省值。在always,initial等过程块内,被赋值的每一个信号必须是寄存器型。
regdata1,data2,…,datan; reg[n-1:0]data1,data2,…,datan;2022/12/2943reg型registertype表2023/1/498输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输出口(output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输入/输出口(inout)只可以由网络连接驱动,但它本身只能驱动网络连接。如果信号变量是在过程块(initial块或always块)中被赋值的,必须把它声明为寄存器类型变量
如何选择正确的数据类型?2022/12/2944如何选择正确的数据类型?2023/1/499举例说明数据类型的选择modu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兰州社区团购合同范本
- 再生资源回收收购合同范本
- 化工储罐出租合同范本
- 加盟艺术培训合同范本
- 债权置换合同范本
- 农土租赁合同范本
- 加工店转让合同范本
- 中介拿钥匙装修合同范本
- 劳务包活合同范本
- 劳务派遣辞退合同范本
- 护理不良事件管理及根因分析
- 人教版道德与法治三年级下册全册课件【完整版】
- Module8Myfuturelife教学设计-2023-2024学年英语外研版九年级下册
- 中职历史教学计划
- NB-T+10499-2021水电站桥式起重机选型设计规范
- 六年级美术下册全册教案(浙美版)
- JT∕T 795-2023 事故汽车修复技术规范
- 2024年安徽中医药高等专科学校单招职业适应性测试题库附答案
- 湘教版二年级下册美术教案
- 天津在津居住情况承诺书
- 2022年中考数学二轮专题复习:二次函数性质综合题
评论
0/150
提交评论