您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > verilog硬件描述语言
13.8循环语句3.9结构说明语句3.10编译预处理语句3.11语句的顺序执行与并行执行3.12不同抽象级别的VerilogHDL模型3.13设计技巧3.1引言3.2VerilogHDL基本结构3.3数据类型及常量、变量3.4运算符及表达式3.5语句3.6赋值语句和块语句3.7条件语句第3章硬件描述语言VerilogHDL23.1引言一、什么是VerilogHDL二、VerilogHDL的发展历史三、不同层次的VerilogHDL抽象四、VerilogHDL的特点内容概要33.1引言一、什么是VerilogHDLVerilogHDL是一种用于数字逻辑电路设计的硬件描述语言(HradwareDescriptionLanguage),可以用来进行数字电路的仿真验证、时序分析、逻辑综合。用VerilogHDL描述的电路设计就是该电路的VerilogHDL模型。VerilogHDL既是一种行为描述语言也是一种结构描述语言。既可以用电路的功能描述,也可以用元器件及其之间的连接来建立VerilogHDL模型。43.1引言二、VerilogHDL的发展历史1983年,由GDA(GateWayDesignAutomation)公司的PhilMoorby首创;1989年,Cadence公司收购了GDA公司;1990年,Cadence公司公开发表VerilogHDL;1995年,IEEE制定并公开发表VerilogHDL1364-1995标准;1999年,模拟和数字电路都适用的Verilog标准公开发表53.1引言三、不同层次的VerilogHDL抽象VerilogHDL模型可以是实际电路的不同级别的抽象。抽象级别可分为五级:系统级(systemlevel):用高级语言结构(如case语句)实现的设计模块外部性能的模型;算法级(algorithmiclevel):用高级语言结构实现的设计算法模型(写出逻辑表达式);RTL级(registertransferlevel):描述数据在寄存器之间流动和如何处理这些数据的模型;门级(gatelevel):描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;开关级(switchlevel):描述器件中三极管和储存节点及其之间连接的模型。返回3.1263.1引言四、VerilogHDL的特点语法结构上的主要特点:形式化地表示电路的行为和结构;借用C语言的结构和语句;可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述;基本逻辑门、开关级结构模型均内置于语言中,可直接调用;易创建用户定义原语(UDP,UserDesignedPrimitive)。易学易用,功能强73.2VerilogHDL基本结构一、简单的VerilogHDL例子二、VerilogHDL模块的结构三、逻辑功能定义四、关键字五、标识符六、编写VerilogHDL源代码的标准内容概要83.2VerilogHDL基本结构一、简单的VerilogHDL例子[例3.2.1]8位全加器moduleadder8(cout,sum,a,b,cin);outputcout;//输出端口声明output[7:0]sum;input[7:0]a,b;//输入端口声明inputcin;assign{cout,sum}=a+b+cin;endmoduleassign语句:无论右边表达式操作数何时发生变化,右边表达式都会重新计算,并且在指定的延迟后给左边表达式赋值。I/O说明端口定义功能描述模块名(文件名)整个VerilogHDL程序嵌套在module和endmodule声明语句中。每条语句相对module和endmodule最好缩进2格或4格!//……表示注释部分,一般只占据一行。对编译不起作用!单行注释符93.2VerilogHDL基本结构[例3.2.2]8位计数器modulecounter8(out,cout,data,load,cin,clk);output[7:0]out;outputcout;input[7:0]data;inputload,cin,clk;reg[7:0]out;always@(posedgeclk)beginif(load)out=data;//同步预置数据elseout=out+1+cin;//加1计数endassigncout=&out&cin;//若out为8‘hFF,cin为1,则cout为1endmoduleI/O说明端口定义功能描述信号类型声明缩减运算符位运算符103.2VerilogHDL基本结构[例3.2.3]2位比较器modulecompare2(equal,a,b);outputequal;input[1:0]a,b;assignequal=(a==b)?1:0;/*如果a等于b,则equal为1,否则为0*/endmodule“=”非阻塞过程性赋值:将想要赋给左式的值安排在未来时刻。不等上一个赋值完成执行下个赋值语句。“=”阻塞过程性赋值:按照顺序执行,前一个赋值结束才执行下边的赋值语句。连续赋值语句条件运算符/*……*/内表示注释部分,一般可占据多行。对编译不起作用!多行注释符113.2VerilogHDL基本结构[例3.2.4]三态驱动器moduletrist2(out,in,enable);outputout;inputin,enable;bufif1mybuf(out,in,enable);endmodule例化元件名门元件关键字门元件例化——程序通过调用一个在Verilog语言库中现存的实例门元件来实现某逻辑门功能。Inputs|OutputINENABLE|OUTX0|Z11|101|0bufif1的真值表12moduletrist1(out,in,enable);outputout;inputin,enable;mytritri_inst(out,in,enable);endmodulemodulemytri(out,in,enable);outputout;inputin,enable;assignout=enable?in:’bz;/*如果enable为1,则out=in,否则为高阻态*/endmodule3.2VerilogHDL基本结构[例3.2.5]三态驱动器例化元件名子模块名顶层模块子模块模块元件例化——顶层模块(trist1)调用由某子模块(mytri)定义的实例元件(tri_inst)来实现某功能。返回逻辑功能定义133.2VerilogHDL基本结构VerilogHDL程序是由模块构成的。每个模块嵌套在module和endmodule声明语句中。模块是可以进行层次嵌套的。每个VerilogHDL源文件中只准有一个顶层模块,其他为子模块。每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑描述。程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。除了endmodule语句、begin_end语句和fork_join语句外,每个语句和数据定义的最后必须有分号。可用/*.....*/和//...对程序的任何部分作注释。加上必要的注释,以增强程序的可读性和可维护性。143.2VerilogHDL基本结构二、VerilogHDL模块的结构Verilog的基本设计单元是“模块(block)”。Verilog模块的结构由在module和endmodule关键词之间的4个主要部分组成:moduleblock1(a,b,c,d);inputa,b,c;outputd;wirex;assignd=a|x;assignx=(b&~c);endmoduleI/O说明端口定义功能描述信号类型声明1234153.2VerilogHDL基本结构三、逻辑功能定义在Verilog模块中有3种方法可以描述电路的逻辑功能:(1)用assign语句assignx=(b&~c);连续赋值语句常用于描述组合逻辑门元件例化模块元件例化例化元件名门元件关键字(2)用元件例化(instantiate)andmyand3(f,a,b,c);注1:元件例化即是调用VerilogHDL提供的元件;注2:元件例化包括门元件例化和模块元件例化;注3:每个实例元件的名字必须唯一!以避免与其它调用元件的实例相混淆。注4:例化元件名也可以省略!163.2VerilogHDL基本结构(3)用“always”块语句always@(posedgeclk)//每当时钟上升沿到来时执行一遍块内语句beginif(load)out=data;//同步预置数据elseout=data+1+cin;//加1计数end结构说明语句注1:“always”块语句常用于描述时序逻辑,也可描述组合逻辑。注2:“always”块可用多种手段来表达逻辑关系,如用if-else语句或case语句。注3:“always”块语句与assign语句是并发执行的,assign语句一定要放在“always”块语句之外!173.2VerilogHDL基本结构VerilogHDL模块的模板(仅考虑用于逻辑综合的部分)module顶层模块名(输入输出端口列表);output输出端口列表;input输入端口列表;//(1)使用assign语句定义逻辑功能wire结果信号名;assign结果信号名=表达式;//(2)使用always块定义逻辑功能always@(敏感信号表达式)begin//过程赋值语句//if语句//case语句//while,repeat,for循环语句//task,function调用end183.2VerilogHDL基本结构//(3)元件例化module_nameinstance_name(port_list);//模块元件例化gate_type_keywordinstance_name(port_list);//门元件例化endmodule例化元件名也可以省略!193.2VerilogHDL基本结构四、关键字关键字——事先定义好的确认符,用来组织语言结构;或者用于定义VerilogHDL提供的门元件(如and,not,or,buf)。用小写字母定义!——如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire203.2VerilogHDL基本结构VerilogHDL关键字edgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunctionhighz0highz1ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenornotnotif0notif1nmosoroutputparameterpmosposedgeprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisable213.2VerilogHDL基本结构VerilogHDL关键字(续)tri0tri1vectoredwaitwandweak0weak1whilewireworxnorxorrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspecparamstrengthstr
本文标题:verilog硬件描述语言
链接地址:https://www.777doc.com/doc-6295339 .html