您好,欢迎访问三七文档
Verilog硬件描述语言数字逻辑与处理器基础实验HDL的特点和优势2基于文本的方式,具有可重用性和设计灵活性高层次实现,与具体细节无关,例如MOS、BJT设计开发容易,能够在设计初期发现问题自动将高层次描述转换到具体的工艺实现大量的自动化工具辅助完成设计验证和实现形成了芯片设计验证的统一标准,是芯片行业飞速发展的重要基础大量的HDL语言–ABEL、ISPS、VHDL、Verilog、SystemC、SystemVerilog……Verilog语言的发展历史3VerilogXL诞生Synopsys公司支持Verilog输入Cadence购买Verilog版权VerilogHDL公开发表有关Verilog的全部权利都移交OVIVerilogIEEE1364-1995标准发布使用模拟和数字的Verilog标准发布VerilogIEEE1364-2001标准发布VerilogIEEE1364-2005标准发布1987198919951980,s1990199920012005并入SystemVerilog标准IEEE18002009“Verilog”=“Verification”+“Logic”VerilogisaHDL4软件编程语言最终被转换为机器指令,可以在一台计算机上运行硬件描述语言,其语法和结构用于描述硬件电路的行为和结构moduleMUX4x1(Z,D0,D1,D2,D3,S0,S1);outputZ;inputD0,D1,D2,D3,S0,S1;andu0(T0,D0,S0bar,S1bar),u1(T1,D1,S0bar,S1),u2(T2,D2,S0,S1bar),u3(T3,D3,S0,S1);notu4(S0bar,S0),u5(S1bar,S1);oru6(Z,T0,T1,T2,T3);endmodulemoduleadder(input[3:0]a,b,output[3:0]sum,outputcout);......endmoduleVerilog层次化建模5moduleadder(a,b,sum,cout);input[3:0]a,b;output[3:0]sum;outputcout;......endmodulemoduleFA(inputa,b,cin,outputc,cout);......endmodulemoduleadder(input[3:0]a,b,output[3:0]sum,outputcout);wire[2:0]c;FAfa0(.a(a[0]),.b(b[0]),.cin(1'b0),.c(sum[0]),.cout(c[0]));FAfa1(.a(a[1]),.b(b[1]),.cin(c[0]),.c(sum[1]),.cout(c[1]));FAfa2(.a(a[2]),.b(b[2]),.cin(c[1]),.c(sum[2]),.cout(c[2]));FAfa3(.a(a[3]),.b(b[3]),.cin(c[2]),.c(sum[3]),.cout(cout));endmodulemoduleadder(input[3:0]a,b,output[3:0]sum,outputcout);wire[2:0]c;FAfa0(a[0],b[0],1'b0,sum[0],c[0]);FAfa1(a[1],b[1],c[0],sum[1],c[1]);FAfa2(a[2],b[2],c[1],sum[2],c[2]);FAfa3(a[3],b[3],c[2],sum[3],cout);endmoduleVerilog层次化建模6基于位置基于名字fa0fa1fa2fa3语法规范与注释7标志符由数字、字母、符号($)和下划线构成,但是必须以字母或者下划线作为首字符标志符区分大小写语句遵循自由格式,可以每一条语句占用一行或者多条语句共用一行基本语句以“;”结束注释有两种形式“//”和“/**/”if(ab)beginc=a;endif(ab)beginc=a;end//单行注释/*多行注释可以单行也可以跨行*/常量88’b0100_1011十进制,表示位宽(b,o,d,h)基数表示下划线被忽略,用于增强可读性X表示不定值(电路中不存在),Z表示高阻值数字之间可以采用下划线分开,以增强可读性常量的位数不说明,则缺省为32位4’b00_11;8’hA7;6’o76;5’d31LogicValuedescription0Zero、Loworfalse1One、highortrueXorxUnknownoruninitializedZorzHighImpedance实数:1.34,1.3e2(130)字符串:“FourValue”整数型:常量9parameter定义标志符,可重载实现参数化模块localparam定义本地标志符,不可重载参数型常量:parameter,localparamparametertime_delay=5,time_count=10;localparamPERIOD_VALUE=20;变量10Net型变量Reg型变量Net型变量11KeywordFunctionalityDescriptionwireortriSimpleinterconnectingwireworortriorWiredoutputsORtogetherwandortriandWiredoutputsANDtogethertri0Pullsdownwhentri-statedtri1Pullsupwhentri-statedsupply0Constantlogic0(supplystrength)supply1Constantlogic1(supplystrength)triregStoreslastvaluewhentri-stated(capacitancestrength)Net型变量一般用来表示电路中的连线逻辑或者组合逻辑wirea;//1比特线网变量wire[7:0]b;//8比特线网变量Reg型变量12Reg型变量需要被明确地赋值,在设计中变量必须放在过程块语句中(如initial或always),通过过程赋值语句赋值,而且在过程块内被赋值的每一个变量必须定义成该类型reg:常用寄存器型变量integer:32位带符号整数型变量real:64位带符号实数型变量(不可综合)time:无符号时间变量(不可综合)Reg型变量不一定对应寄存器,仅代表可以在过程语句中被赋值的变量rega,b;//定义了两个一位宽reg变量a,b;reg[7:0]data;//定义8位宽reg向量rega=0;//初始化操作数组13若干个相同宽度向量构成数组,通过数组可以定义存储器类型变量多维数组parameterwordwidth=8,memsize=1024;reg[wordwidth-1:0]mymemory[memsize-1:0];//定义存储变量mymemory[8]=1;//给存储变量某一个单元赋值reg[7:0]array2[0:255][0:16];驱动能力14StrengthLevelStrengthNameKeywordDisplay7SupplyDrivesupply0supply1Su0Su16StrongDrivestrong0Strong1St0St15PullDrivepull0Pull1Pu0Pu14LargeCapacitiveLargeLa0La13WeakDriveweak0Weak1We0We12Med.CapacitiveMediumMe0Me11SmallCapacitiveSmallSm0Sm10HighImpedancehighz0highz1HiZ0HiZ1如果两个具有不同强度的信号驱动同一个线网,则竞争结果值为高强度信号的值。如果两个强度相同的信号之间发生竞争,则结果为不确定值。算术运算符15+,-,*:加、减、乘运算/:除法运算,整数类型的除法运算结果是通过截去小数位得到的%:取模运算,对于integer型有符号数,结果的符号与取模运算中第一个操作数的符号相同在除法运算中,被零除结果为不确定在算术运算操作中,任何一个操作数的任何位不确定,将导致运算结果的不确定逻辑运算符16&&:逻辑与;||:逻辑或;!:逻辑非逻辑运算的结果是一位的,1代表逻辑真值,0代表逻辑假值在逻辑运算中,如果操作数是多位的,则应当把操作数当成一个整体来看,如果操作数的每一位都是0值,则看成是逻辑0;如果有一位是1值,则认为是逻辑1值;其他情况,则认为是不定态在逻辑运算操作中,如果任何操作数是不定态,则整个结果也是不定的a=4'b0000;//Logic'0'b=4'b1101;//Logic'1'c=4'b000x;//x位运算符17按位进行运算,结果的位数与操作数的位数相同;对于两个具有不同长度的操作数,则采取右对齐并对短操作数左边补0的方式进行处理,运算结果的长度与长操作数长度相同~:按位取反(单目运算),x的取反仍然是x&:按位与,x与其非‘0’值与仍然是x;|:按位或,x与非‘1’值或仍然是x;^;按位异或,x与其他任意值异或仍然是x;^~/~^:按位同或,x与其他任意值同或仍然是x;位运算18&/|/^/~^运算符操作数2操作数101x00/0/0/10/1/1/00/x/x/x10/1/1/01/1/0/1x/1/x/xx0/x/x/xx/1/x/xx/x/x/x缩位运算符19只有一个操作数,对操作数的各位进行依次运算,产生一位结果&,~&:缩位与、与非|,~|:缩位或、或非^,~^/^~:缩位异或、同或运算规则同前面的位运算规则关系运算符20,=,,=:小于、小于等于、大于、大于等于如果声明的关系不成立,则返回逻辑0值;关系成立,则返回逻辑1值如果操作数值不确定,则返回不确定值等式运算符21==:相等于,逐位比较,如果都相同,则结果为逻辑1;如果操作数中有不定(或Z),则结果为不定!=:不等于===:全等于,与相等于操作相同,只是对操作数中的不定位(或Z)也进行比较,如果相同则返回逻辑1!==:不全等于A=4’b11x0;//A取值B=4’b11x0;//B取值A==B?A===B?移位和拼接运算符22,:逻辑左移和逻辑右移左移和右移产生的空位将由0来填补{}:将两个或多个信号的某些位连接起来,可以嵌套使用,可以定义重复操作数目.o1={b,a,b,a,b,a,b};o2={b,{3{a,b}}};条件运算符23condition?true_expression:false_expression根据condition的取值决定最终表达式的取值,如果condition为真则表达式取值true_expression,否则为false_expression。如果condition的取值为不定态,则结果以位运算的方式产生;对于每一位来说,如果true_expression和false_expression的对应位都为‘1’/‘0’,则结果中对应位为‘1’/‘0’,否则为不定态b=1;c=0;a=(cond2)?b:c;运算符优先级24运算符优先级!~&~&|~|^~^(单目)高优先级低优先级*/%+-====!====!==&~&^~^|~|&&||?:模块定义及例化25module模块名(端口1,端口2,端口3,...,端口n);端口说明内部数据说明功能定义语句......endmodule模块端口说明可以与端口定义集成在一起,也可以分别进行说明默认情况下,输出端口被定为wire类型;如果输出端口在过程语句中被赋值,那么需要显式的对输出端口的数据类型进行说明模块实例化时,如果不需要从外部引用模块内部的标识符,那么可以省略模块的例化标识符模块实例化时,可以采用基于名称的端口映射方式,也可以采用基于位
本文标题:verilog语法
链接地址:https://www.777doc.com/doc-3721193 .html