版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教材和参考书教材:《VerilogHDL数字集成电路设计原理与应用(第二版)》
西安电子科技大学出版社2/26/20251MicroelectronicsSchoolXidianUniversity第一章VerilogHDL数字集成电路设计方法概述
2/26/20252MicroelectronicsSchoolXidianUniversity数字集成电路的发展和设计方法的演变数字集成电路复杂度趋势数字集成电路设计方法的演变2/26/20253MicroelectronicsSchoolXidianUniversity以单元为基础以RTL综合为基础以IP为基础70年代单片系统80年代90年代当前多块印刷版系片上系统以元件为基础集成电路的发展经过了三个主要阶段第一次变革是在上世纪70年代:以加工制造为主导的IC(IntegratedCircuit)产业发展的初级阶段,主流产品是简单微处理器(MicroProcessorUnit,MPU)、存储器以及标准通用逻辑电路。第二次变革是在上世纪80年代:是标准工艺加工线(Foundry)公司与IC设计公司共同发展的阶段,主流产品是MPU、微控制器(MicroControlUnit,MCU)及专用IC(Application-SpecificIC,ASIC)。第三次变革是在上世纪90年代:IC产业的“四业”开始分离,功能强大的通用型中央处理器(CentralProcessingUnit,CPU)和信号处理器(DigitalSignalProcessing,DSP)成为产业新的增长点。第四次变革正在进行:IC产业开始以Fundry为主导,IP的使用广泛。2/26/20254MicroelectronicsSchoolXidianUniversity硬件描述语言(HDL)产生基础:C、FORTRAN、Pascal等程序化设计语言,极大提高了计算机软件程序设计的效率和可靠性;硬件描述语言HDL(HardwareDescriptionLanguage,HDL):它是一种高级程序语言,通过对数字电路和系统的语言描述,可以对数字集成电路进行设计和验证;主要功能:数字集成电路设计工程师可以根据电路结构的特点,采用层次化的设计结构,将抽象的逻辑功能用电路的方式进行实现。2/26/20255MicroelectronicsSchoolXidianUniversity主要硬件描述语言主要HDL语言:GatewayDesignAutomation公司的VerilogHDL;美国国防高级计划研究局(DARPA)设计的VHDL,美国国防部的基于面向对象的OOVHDL,美国杜克大学的DEVHDL,美国电气和电子工程师协会支持的VITAL等。目前VerilogHDL和VHDL语言是目前主要的两种HDL语言,并分别在1995年和1987年被采纳为IEEE国际标准,广泛用于数字集成电路的设计和验证领域2/26/20256MicroelectronicsSchoolXidianUniversity
VerilogHDL发展2/26/20257MicroelectronicsSchoolXidianUniversity有关VerilogHDL的全部权利移交OVI(OpenVerilogInternational)VerilogHDL公开发表Cadence公司购买Verilog版权SystemVerilogIEEE1800-2005标准公开发表VerilogIEEE1364-2001标准公开发表模拟和数字都适用的Verilog标准公开发表VerilogIEEE1364-1995标准公开发表Verilog-XL诞生19891990199080年代2005200119991995OVI提出了用来描述模拟电路的硬件描述语言Verilog-A1996
VerilogHDL国际标准2/26/20258MicroelectronicsSchoolXidianUniversity名称时间备注VerilogIEEE1364-19951995年12月基于VerilogHDL的优越性,IEEE制定了VerilogHDL的IEEE标准,即VerilogHDL1364-1995Verilog-A1996年Verilog-A是由OVI提出的一种硬件描述语言。是模拟电路行业的标准建模语言,来源于IEEE1364Verilog规范1999年模拟和数字都适用的Verilog标准公开发表VerilogIEEE1364-20012001年IEEE制定了VerilogIEEE1364-2001标准,并公开发表;其中HDL部分相对于1995标准有较大增强,PLI部分变化不大SystemVerilogIEEE1800-20052005年此标准是继VHDL和VerilogHDL之后,仿真工具支持的语言,它建立在VerilogHDL语言的基础上,是
IEEE1364Verilog-2001标准的扩展增强,兼容Verilog-2001,并将成为下一代硬件设计和验证的语言VerilogHDL和VHDL2/26/20259MicroelectronicsSchoolXidianUniversityVerilogSystemVerilogVHDLVITAL开关电路级逻辑门级寄存器传输级算法级系统级描述和抽象能力图1.4VerilogHDL和VHDL建模能力比较用VHDL建立ASIC模型库的基准VerilogHDL在数字集成电路设计中的优点例1:2/26/202510MicroelectronicsSchoolXidianUniversity(a)4位总线与逻辑(b)32位总线与逻辑moduleaand4(a,b,c);input[3:0]a,b;output[3:0]c;reg[3:0]c;always@(aorb)c=a&b;endmodulemoduleaand32(a,b,c);input[31:0]a,b;output[31:0]c;reg[31:0]c;always@(aorb)c=a&b;endmodule原理图方式VerilogHDL描述方式VerilogHDL在数字集成电路设计中的优点2/26/202511MicroelectronicsSchoolXidianUniversity例2:4位移位寄存器moduleshiftregist4(clk,din,Reset,qout);inputclk,Reset,din;output[3:0]qout;reg[3:0]qout;always@(posedgeclkorposedgeReset)beginif(Reset)qout<=4’b0000;elsebeginqout[3]<=qout[2];qout[2]<=qout[1];qout[1]<=qout[0];qout[0]<=din;endendendmoduleVerilogHDL在数字集成电路设计中的优点2/26/202512MicroelectronicsSchoolXidianUniversity例2:8位移位寄存器moduleshiftregist8(clk,din,Reset,qout);inputclk,Reset,din;output[7:0]qout;reg[7:0]qout;always@(posedgeclkorposedgeReset)beginif(Reset)qout<=8'b00000000;elsebeginqout[7:1]<=qout[6:0];qout[0]<=din;endendendmodule功能模块的可重用性2/26/202513MicroelectronicsSchoolXidianUniversity由于模块的可重用性对于硬件电路开发效率的提高至关重要。因此业界提出了数字集成电路的软核、硬核和固核的概念。.(1)“软核”(SoftCore)一般是指经过功能验证、5000门以上的可综合VerilogHDL或VHDL模型;(2)“固核”(FirmCore)通常是指在ASIC和FPGA器件上,经过综合验证、大于5000门以上的电路网表文件;(3)“硬核”(HardCore)通常是指在ASIC器件上,经过验证正确的、大于5000门以上的电路结构版图掩模。VerilogHDL数字集成电路设计流程中作用2/26/202514MicroelectronicsSchoolXidianUniversity第二章VerilogHDL基础知识2/26/202515MicroelectronicsSchoolXidianUniversity2.1VerilogHDL语言要素2.1.1空白符:空白符包括空格符(\b)、制表符(\t)、换行符和换页符。在编译和综合时,空白符被忽略。
例:initialbegina=3’b100;b=3’b010;end与相当initialbegina=3’b100; b=3’b010;end2/26/202516MicroelectronicsSchoolXidianUniversity2.1.2注释符(1)单行注释:以“//”开始,VerilogHDL忽略从此处到行尾的内容。(2)多行注释:多行注释以“/*”开始,到“*/”结束,VerilogHDL忽略其中的注释内容。例:单行注释 assigna=b&c;//单行注释多行注释 assigna[3:0]=b[3:0]&c[3:0;];/*注释行1
注释行2*/非法多行注释:/*注释内容/*多行注释嵌套多行注释*/注释内容*/合法多行注释:/*注释内容//多行注释嵌套单行注释*/2/26/202517MicroelectronicsSchoolXidianUniversity2.1.3标识符在VerilogHDL中标识符(Identifier)被用来命名信号名、模块名、参数名等,它可以是任意一组字母、数字、$
符号和_(下划线)符号的组合。应该注意的是标识符的字母区分大小写,并且第一个字符必须是字母或者下划线。2/26/202518MicroelectronicsSchoolXidianUniversity例2.1-3:合法标示符countCOUNT//与count不同_CC_G5 B25_78SIX例2.1-4:非法标示符30count //标识符不允许以数字开头out* //标识符中不允许包含字符*a+b-c //标识符中不允许包含字符+和-n@238 //标识符中不允许包含字符@2.1.3转义标示符
VerilogHDL规定了转义标识符(EscapedIdentifier)。采用转义标识符可以在一条标识符中包含任何可打印字符,转义标识符以“\”(反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。2/26/202519MicroelectronicsSchoolXidianUniversity例2.1-5:\a+b=c\7400\.*.$\{******}\~Q\OutGate //与OutGate相同
2.1.4关键字
VerilogHDL语言内部已经使用的词称为关键字或保留字,它是VerilogHDL语言内部的专用词,是事先定义好的确认符,用来组织语言结构,这些关键字用户不能随便使用。需注意的是,所有关键字都是小写的。例如,ALWAYS不是关键字,它只是标识符,与always(关键字)是不同的。关键字列表参见2.1.4节。2/26/202520MicroelectronicsSchoolXidianUniversity2.1.5
数值VerilogHDL有四种基本的逻辑数值状态2/26/202521MicroelectronicsSchoolXidianUniversity状态含义0低电平、逻辑0或“假”1高电平、逻辑1或“真”x或X不确定或未知的逻辑状态z或Z高阻态整数及其表示2/26/202522MicroelectronicsSchoolXidianUniversity数制基数符号合法表示符二进制b或B0、1、x、X、z、Z、?、_八进制o或O0~7、x、X、z、Z、?、_十进制d或D0~9、_十六进制h或H0~9、a~f、A~F、x、X、z、Z、?、_+/-<size>’<base_format><number>例2.1-6:正确的表示8’b10001101//位宽为8位的二进制数100011018’ha6//位宽为8位的十六进制数a65’o35//5位八进制数354’d6//4位十进制数64’b1x_01//4位二进制数1x01例2.1-7:错误的表示4’d-4//数值不能为负,有负号应放最左边3’b001 //’和基数b之间不允许出现空格(4+4)’b11//位宽不能是表达式形式
实数及其表示(1)十进制表示法,采用十进制格式,小数点两边必须都有数字,否则为非法的表示形式。例如:3.0,4.54,0.2等等都是正确的,而5.就是错误扯,因为小数点两侧都必须要有数字。(2)科学计数法。例如:564.2e2的值为56420.0,8.7E2的值为870.0(e不分大小写),3E-3的值为0.003。2/26/202523MicroelectronicsSchoolXidianUniversity例2.1-82.7 //十进制计数法5.2e8 //科学计数法3.5E-6 //科学计数法可用e或E表示,其结果相同5_4582.2158_5896 //使用下划线提高可读性6. //非法表示.3e5 //非法表示2.2数据类型物理数据类型:连线型、寄存器型和存储器型数据类型;信号强度表示数字电路中不同强度的驱动源,用来解决不同驱动强度存在下的赋值冲突:2/26/202524MicroelectronicsSchoolXidianUniversity标记符名称类型强弱程度supply电源级驱动驱动最强最弱strong强驱动驱动pull上拉级驱动驱动large大容性存储weak弱驱动驱动medium中性驱动存储small小容性存储highz高容性高阻2.2.1物理数据类型1.连线型2/26/202525MicroelectronicsSchoolXidianUniversity连线型数据类型功能说明wire,tri标准连线(缺省为该类型)wor,trior多重驱动时,具有线或特性的连线型wand,trand多重驱动时,具有线与特性的连线型trireg具有电荷保持特性的连线型数据(特例)tri1上拉电阻tri0下拉电阻supply1电源线,用于对电源建模,为高电平1supply0电源线,用于对“地”建模,为低电平0(1)wire和tri(2)wor和trior2/26/202526MicroelectronicsSchoolXidianUniversitywire/tri01xz00xx01x1x1xxxxxz01xzwor/trior01xz001x011111xx1xxz01xz2.寄存器型:reg型是数据储存单元的抽象类型,其对应的硬件电路元件具有状态保持作用,能够存储数据,如触发器、锁存器等。reg型变量常用于行为级描述,由过程赋值语句对其进行赋值。reg型变量简单例子:rega; //定义一个一位的名为a的reg变量reg[3:0]b; //定义一个4位的名为b的reg型变量reg[8:1]c,d,e; //定义了三个名称分别为c、d、e的8位的reg型变量reg型变量一般为无符号数,若将一个负数赋给reg型变量,则自动转换成其二进制补码形式。例如:regsigned[3:0]rega;rega=-2; //rega的值为1110(14),是2的补码2/26/202527MicroelectronicsSchoolXidianUniversity2.2.2
连线型和reg型数据类型的声明连线型数据类型的声明
<net_declaration><drive_strength><range><delay>[list_of_variables];net_declaration包括wire、tri、tri0、tri1、wand、triand、trior、wor中的任意一种。range:用来指定数据为标量或矢量。若该项默认,表示数据类型为1位的标量,超过1位则为矢量形式。delay:指定仿真延迟时间。list_of_variables:变量名称,一次可定义多个名称,之间用逗号分开。drive_strength:表示连线变量的驱动强度。2/26/202528MicroelectronicsSchoolXidianUniversity寄存器型数据类型的声明
reg<range><list_of_register_variables>;range为可选项,它指定了reg型变量的位宽,缺省时为1位。<list_of_register_variables>为变量名称列表,一次可以定义多个名称,之间用逗号分开。2/26/202529MicroelectronicsSchoolXidianUniversity例2.2-2物理数据类型声明的例子regrega; //定义一个1位的寄存器型变量reg[7:0]regb; //定义一个8位的寄存器型变量tri[7:0]tribus; //定义一个8位的三态总线tri0[15:0]busa; //定义一个16位的连线型,处于三态时为上拉电阻tri1[31:0]busb; //定义一个32为的连线型,处于三态时为下拉电阻regscalared[1:4]b; //定义一个4位的标量型寄存器矢量wire(pull1,strong0)c=a+b;//定义一个1和0的驱动强度不同的1位连线型变量ctrireg(large)storeline; //定义一个具有大强度的电荷存储功能的存储线2/26/202530MicroelectronicsSchoolXidianUniversity2.2.3
存储器型存储器型变量可以描述RAM型、ROM型存储器以及reg文件。存储器变量的一般声明格式为:reg<range1><name_of_register><range2>;range1和range2都是可选项,缺省都为1。<range1>:表示存储器当中寄存器的位宽,格式为[msb:lsb]。<range2>:表示寄存器的个数,格式为[msb:lsb],即有msb-lsb+1个。<name_of_register>为变量名称列表,一次可以定义多个名称,之间用逗号分开。2/26/202531MicroelectronicsSchoolXidianUniversity例2.2-3:reg[7:0]mem1[255:0];
//定义了一个有256个8位寄存器的存储器mem1
//地址范围是0到255。reg[15:0]mem2[127:0],reg1,reg2; //定义了一个具有128个16位寄存器的存储器mem2 //和两个16位的寄存器reg1和reg2例2.2-4:reg[n-1:0]a; //表示一个n位的寄存器aregmem1[n-1:0]; //表示一个由n个1位寄存器构成的存储器mem12/26/202532MicroelectronicsSchoolXidianUniversity2.2.4
抽象数据类型抽象数据类型主要包括整型(integer)、时间型(time)、实型(real)及参数型(parameter)。整型integer<list_of_register_variables>;例2.2-6:integerindex; //简单的32位有符号整数integeri[31:0] //定义了整型数组,它有32个元素2/26/202533MicroelectronicsSchoolXidianUniversity时间型时间型数据与整型数据相类似,只是它是64位的无符号数。时间型数据主要用于对模拟时间的存储与计算处理,常与系统函数$time一起使用。时间型数据的声明格式为:time<list_of_register_variables>;例如:timea,b; //定义了两个64位的时间型变量2/26/202534MicroelectronicsSchoolXidianUniversity实型:实型数据在机器码表示法中是浮点型数值,可用于对延迟时间的计算。实型数据的声明格式如下:real<list_of_variables>;例如:realstime;
//定义了一个实数型数据参数型(parameter):属于常量,在仿真开始之前就被赋值,在仿真过程中保持不变,以提高程序的可读性和维护性。参数类型的定义格式为:parameter参数名1=表达式1,参数名2=表达式2,…,参数名n=表达式n;例2.2-7: parameterlength=32,weight=16; parameterPI=3.14,LOAD=4’b1101; parameterDELAY=(BYTE+BIT)/2;2/26/202535MicroelectronicsSchoolXidianUniversity2.3运算符和表达式2/26/202536MicroelectronicsSchoolXidianUniversityVerilog运算符功能运算符的优先级别!、~反逻辑、位反相高优先级别
低优先级别*、
/、%乘、除、取模+、-加、减<<、
>>左移、右移<、<=、>、>=小于、小于等于、大于、大于等于==、!=、===、!==等、不等、全等、非全等&按位与^、^~按位逻辑异或和同或|按位逻辑或&&逻辑与||逻辑或?:条件运算符,唯一的三目运算符,等同于if-else2.3.1算术操作符加法(+);减法(-);乘法(*);除法(/);取模(%)。(1)算术操作结果的位宽算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结果的长度由操作左端目标长度决定。例2.3-1: reg[3:0]A,B,C; reg[5:0]D; A=B+C; //4位 D=B+C; //6位2/26/202537MicroelectronicsSchoolXidianUniversity(2)有符号数和无符号数的使用
例2.3-2: modulearith_tb; reg[3:0]a; reg[2:0]b; initial begin a=4'b1111; //15 b=3'b011; //3 $display("%b",a*b); //乘法运算,结果为4'b1101,高位被舍去 //等于45的低四位 $display("%b",a/b); //除法运算,结果为4'b0101 $display("%b",a+b); //加法运算,结果为4'b0010 $display("%b",a-b); //减法运算,结果为4'b1100 $display("%b",a%b); //取模运算,结果为4'b0000 end endmodule2/26/202538MicroelectronicsSchoolXidianUniversity2.3.2关系操作符大于“>”、小于“<”、大于等于“>=”和小于等于“<=”。
例2.3-3: modulerela_tb; reg[3:0]a,b,c,d; initial begin a=3;
b=6;
c=1;
d=4'hx; $display(a<b); //结果为真1 $display(a>b); //结果为假0 $display(a<=c); //结果为假0 $display(d<=a); //结果为未知数x end endmodule2/26/202539MicroelectronicsSchoolXidianUniversity2.3.3相等关系操作符等于“==”、不等于“!=”、全等“===”、非全等“!==”比较的结果有三种,即真“1”、假“0”和不定值“x”2/26/202540MicroelectronicsSchoolXidianUniversity表2.3-2(a)“==”
运算符的真值表===01xz0100010100x0010z0001表2.3-2(b)“===”运算符的真值表==01xz010xx101xxxxxxxzxxxx例2.3-4:moduleequal_tb;reg[3:0]a,b,c;reg[1:0]d;initial
begin a=4'b0xx1; b=4'b0xx1; c=4'b0011; d=2'b11; $display(a==b);//结果为不定值x $display(c==d);//结果为真1 $display(a===b);//结果为真1 $display(c===d);//结果为假0
endendmodule2.3.4逻辑运算符逻辑与运算符“&&”、逻辑或运算符“||”、逻辑非运算符“!”例如:寄存器变量a,b的初值分别为4’b1110和4’b0000,则:!a=0,!b=1,a&&b=0;a||b=1。例如:a的初值分别为4’b1100,b的初值分别为4’b01x0,则!a=0,!b=x,a&&b=x,a||b=x。操作数中存在不定态x,则逻辑运算的结果也是不定态2/26/202541MicroelectronicsSchoolXidianUniversityab!a!ba&&ba||b1100111001010110010011002.3.5按位运算符按位取反“~”、按位与“&”、按位或“|”、按位异或^、按位同或^~2/26/202542MicroelectronicsSchoolXidianUniversity按位与真值表&01x0000101xx0xx例2.3-5:modulebit_tb;reg[4:0]a;reg[4:0]b;initialbegina=5'b101; //运算的时候a自动变为5’b00101b=5'b11101;$display("%b",~a); //结果为5'b11010$display("%b",~b); //结果为5'b00010$display("%b",a&b); //结果为5'b00101$display("%b",a|b); //结果为5'b11101$display("%b",a^b); //结果为5'b11000endendmodule2.3.6归约运算符(缩位运算符)与“&”、或“|”、异或“^”,以及相应的非操作“~&”、“~|”、“~^”、“^~”2/26/202543MicroelectronicsSchoolXidianUniversity例2.3-6:modulecut_tb;reg[5:0]a;initialbegina=6'b101011;$display("%b",&a);//结果为1'b0$display("%b",|a);//结果为1'b1$display("%b",^a); //结果为1'b0endendmodule2.3.7移位操作符左移位运算符“<<”、右移位运算符“>>”。运算过程是将左边(右边)的操作数向左(右)移,所移动的位数由右边的操作数来决定,然后用0来填补移出的空位。2/26/202544MicroelectronicsSchoolXidianUniversity例2.3-7:moduleshift_tb;reg[5:0]a,b,c,d;reg[7:0]e;initial begin a=6'b101101; b=a<<2; c=a>>3; d=a<<7; e=a<<2; $display("%b",b);//结果为6'b110100 $display("%b",c);//结果为6'b000101 $display("%b",d);//结果为6'b000000 $display("%b",e);//结果为8'b10110100 endendmodule2.3.8条件运算符表达形式如下:<条件表达式>?<表达式1>:<表达式2>条件表达式的计算结果有真“1”、假“0”和未知态“x”三种,当条件表达式的结果为真时,执行表达式1,当条件表达式的结果为假时,执行表达式2。2/26/202545MicroelectronicsSchoolXidianUniversity例2.3-8:modulemux2(in1,in2,sel,out);input[3:0]in1,in2;inputsel;output[3:0]out;assignout=(!sel)?in1:in2; //sel为0时out等于in1,反之out等于in2endmodule2选1数据选择器2.3.9连接和复制运算符连接运算符“{}”和复制运算符“{{}}”连接操作符{信号1的某几位,信号2的某几位,…,信号n的某几位}重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业管理-病案服务管理制度
- 辽宁省北镇市第一初级中学2026年初三下学期开学(第一次模拟)考试化学试题含解析
- 长沙市2026年初三下学期9月初态测试物理试题含解析
- 江苏省苏州市立达中学2026年初三下学期教学反馈检测试题试物理试题含解析
- 上海市浦东新区南片联合体达标名校2026届初三中考模拟训练评估卷(2)数学试题含解析
- 天津市蓟州区第三联合学区2026年初三冲刺模拟数学试题含解析
- 江苏省启东市南苑中学2026年秋初三(下)期末测试卷物理试题含解析
- 江西省九江市名校2026年初三下学期零诊模拟物理试题含解析
- 河南省许昌市襄城县市级名校2026届初三第一次五校联考数学试题试卷含解析
- 血小板减少患者的出院指导
- 2026年2月时政题库(附答案)
- 2026江苏无锡江阴水韵新城建设投资有限公司招聘工作人员7人笔试备考试题及答案解析
- 2026年河南林业职业学院单招职业适应性测试题库带答案详解
- 2026年内蒙古商贸职业学院单招职业技能考试题库附答案详解
- 2026年安徽城市管理职业学院单招职业适应性测试题库带答案详解(新)
- KTV事故隐患内部报告奖励制度
- 应急管理干部警示教育以案促改心得体会
- 2026年小学六年级下册劳动教育教学计划
- 乡卫生院卫生统计制度
- 2026年妇联岗位面试考点梳理练习题及答案
- 露天矿山应急管理课件
评论
0/150
提交评论