




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
10.1引言,第10章Verilog硬件描述语言实例,VerilogHDL描述逻辑电路时常用3种描述方式,分别为:行为型描述、数据流型描述和结构型描述。,行为型描述只描述行为特征,不涉及逻辑电路的实现,是一种高级语言描述方式,具有很强的通用性和有效性;数据流型描述指通过assign连续赋值实现组合逻辑功能的描述方式;结构型描述指描述实体连接的结构方式,所谓实体一般指Verilog语言已定义的基元,也就是说结构型描述指利用Verilog语言已定义的基元描述逻辑电路的描述方式。,行为型描述语句更简练,有可能不被综合;结构型描述语句通常容易被综合,但语句显得复杂。在实际开发中往往结合使用多种描述方法。,10.22选1数据选择器,2选1数据选择器可以有多种描述方式,通过4个实例和3种描述方式对例子中出现的语法现象进行解释。,10.2.12选1数据选择器的行为型描述方式;10.2.22选1数据选择器的数据流型描述方式;10.2.32选1数据选择器的行为型描述方式;10.2.42选1数据选择器的结构型描述方式;,10.2.12选1数据选择器实例1,/例10.2.1moduleMux21(a,b,s,y);/-1inputa,b;inputs;outputy;assigny=(s=0)?a:b;/-2endmodule/-3,10.2.12选1数据选择器实例1,/例10.2.1moduleMux21(a,b,s,y);/-1inputa,b;inputs;outputy;assigny=(s=0)?a:b;/-2endmodule/-3,1.Verilog语言描述,2.程序说明,(1)注释行(2)模块定义语句module和endmodule所有的程序都置于模块(module)框架结构内。模块是Verilog最基本的构成单元。一个模块可以是一个元件或者一个设计单元。,module(端口列表)endmodule,该模块共包括四个端口:输入端口a,b,s和输出端口y。它定义的是二选一数据选择器。,Verilog端口类型只有input(输入),output(输出),inout(双向端口)三种,端口类型申明描述了端口的信号传输方向。,图10.2.2Verilog端口类型,(3)连续赋值语句assign“assigny=(s=0)?a:b;”为一条连续赋值语句。连续赋值语句assign能够给网表变量赋值。只要等号右边的表达式值发生变化,这种赋值行为就会立刻发生。连续赋值语句能模拟组合逻辑电路。,(4)条件操作符“?”s=0?a:b为一条件表达式。式中条件操作符“?”为三目操作符,由两个操作符隔离三个操作数构成,语法格式如下:表达式1?表达式2:表达式3执行操作时,首先会计算表达式1的值,如果表达式1的值为1,那么将计算表达式2的值,做为条件表达式的最后结果;如果表达式1的值为0,则计算表达式3的值,并做为条件表达式最后的结果。,仿真结果,仿真电路图,仿真波形图,10.2.22选1数据选择器实例2,/例10.2.2moduleMux21(a,b,s,y);inputa,b;inputs;outputy;/-1wired,e;/-2assignd=aendmodule,(1)连线类型wire程序中出现的中间变量d和e定义为wire类型,表示内部结点或连线。程序行1输出端口y的数据类型默认为wire类型。网表类型可通过连续赋值语句(assign语句)或逻辑门驱动。如果一个网表没有和任何驱动源连接,其值为高阻状态。,1.Verilog语言描述,2.程序说明,(2)位运算符按位取反()、按位与(inputa,b,s;outputy;regy;always(aorbors)/-1if(!s)y=a;/-2elsey=b;/-3endmodule,(1)寄存器类型reg输出端口y的数据类型申明为reg即寄存器型,在always块中被赋值的信号必须定义为reg型。寄存器(reg)类型不一定是触发器。只能在always语句中通过过程赋值语句进行赋值。,1.Verilog语言描述,2.程序说明,程序行1“always(aorbors)”为重复执行语句。always后面跟了一个时间控制语句,时间控制通过事件表达式(关键词“”)实现,时间控制部分为完整敏感信号列表,只要任意敏感信号发生变化,过程块将重复连续执行,持续整个模拟过程。(3)条件语句(if-else)条件语句if-else语句可用来选择是否执行某条语句。(4)逻辑运算符三种逻辑运算符:逻辑与“inputa,b,s;outputy;notu1(ns,s);andu2(sela,a,ns);andu3(selb,b,s);oru4(y,sela,selb);endmodule,例10.2.4调用了多个底层模块的实例。调用模块的过程,称为实例化。实例的使用格式为:,1.Verilog语言描述,2.程序说明,;,非模块,与模块,或模块,例10.2.4为门级结构描述,它提供了模型和实际电路之间直接的一一对应的关系。VerilogHDL中一些基元与关键字对应关系如下:,not非门;buf缓冲器;and与门;or非门;nand与非门;nor或非门;xor异或门;xnor同或门。,这些模块称为Verilog语言的基元(Primitive),图10.2.5例10.2.4仿真电路图,10.34选1数据选择器,10.3.14选1数据选择器实例1,4选1数据选择器功能表如表10.3.1所示。4个数据输入端口in0、in1、in2、in3,也称为输入变量,两位选择变量sel(1)和sel(0),数据输出端为out。,四选一数据选择器功能表,/例10.3.1modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input1:0sel;/-1regout;always(in0orin1orin2orin3orsel)/-2case(sel)2b00:out=in0;2b01:out=in1;2b10:out=in2;2b11:out=in3;default:out=1bx;endcaseendmodule,1.Verilog语言描述,2.程序说明,Verilog中如果一个网表型变量和寄存器型变量定义时没有指定位长度,则它被认为是1位标量,如果设定了位长度,则被认为是一个矢量。,(1)矢量类型,wire7:0bus;/8位矢量网表busreg0:40addr;/41位矢量寄存器addr,reg-1:4b;/6位矢量寄存器b,位长度定义时高位和低位甚至可以是负数。,矢量的引用方式比较灵活,比如对前面定义过的矢量:,bus0/bus的第0位bus2:0/bus的三位最低有效位。注意不能用bus0:2,应和定义中保持一致。addr0:1/addr的两位最高有效位,(2)数的表示方法,按进制划分,整数可以表示成十进制数,十六进制数,八进制和二进制数。Verilog中整数通常有两种表述方式,分别为十进制数和指定位数表述方式。,十进制数表述方式:,指定位数表述方式:,用0到9的数字序列表示。,。,在硬件描述语言中,x表示不定值,z表示高阻态。可以在十六进制,八进制和二进制中使用x和z,十六进制中一个x表示4位都是x,八进制中一个x表示3位都是x,二进制中则表示一位是x。z用法同理。,整数的表示示例:,h123F/无位长度的十六进制数o123/无位长度的八进制数3b101/3位二进制数5D3/5位十进制数12hx/12位不确定数16oz/16位高阻态16b1001_0110_1111_zzzz/16位二进制数,以下表示是不正确的:,123af/十六进制数,缺少进制符号h,在表示长数据时还可以用下划线“_”进行分割以增加程序的可读性,,(3)case语句的语法结构,case(表达式)选项值1:语句1;选项值2:语句2;选项值3:语句3;default:缺省语句;endcase,缺省语句不是必须有的。,10.3.24选1数据选择器实例2,1.if-else语句实现的4选1数据选择器,/例10.3.2modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input1:0sel;regout;always(in0orin1orin2orin3orsel)beginif(sel=2b00)out=in0;elseif(sel=2b01)out=in1;elseif(sel=2b10)out=in2;elseif(sel=2b11)out=in3;,elseout=1bx;endendmodule,2.程序说明,(1)if条件语句除了if-else结构外,还有if-else-if结构,if(表达式1)语句1;elseif(表达式2)语句2;elseifelse语句n;,(2)顺序块语句begin-end,顺序块语句通常用来将两条或多条语句组合在一起,使其在格式上更象一条语句。,begin语句1;语句2;.语句n;end,顺序块有以下特点:1)块内的语句是按顺序执行的,即只有上面一条语句执行完后下面的语句才能执行。2)直到最后一条语句执行完,程序才跳出该语句块。,(3)缺省项问题,缺省项是可以省略的,但省略缺省项会引入锁存器,在组合逻辑电路设计中可能会带来一些问题。,/例10.3.3moduleex3reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always(aorborc)begin,if(aendendmodule,rega被综合为一个数据选择器:,省略了缺省项的Verilog语言程序,/例10.3.4moduleex4reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always(aorborc)beginif(aendendmodule,if-else结构的缺省项省略了,当ainputA,B,C;outputCarry,S;/全加器进位和assignS=ABC;assignCarry=(Aendmodule,实例(Instances),/四位加法器moduleadd_full4(A,B,C,S);input3:0A,B;output3:0S;/加法器和output4:0C;/加法器进位assignC0=0;add_fullu1(A0,B0,C0,C1,S0),/-1u2(A1,B1,C1,C2,S1),u3(A2,B2,C2,C3,S2),u4(A3,B3,C3,C4,S3);endmodule,实例化(instantiation),2.程序说明,实例(Instances),实例化(instantiation),已经定义好的模块,作为我们电路中的单元。调用这些模块的过程,称为实例化(instantiation),调用完之后,这些电路中的模块单元称为实例(Instance)。实例的使用格式为:;这是管脚按顺序映射调用方式。,Verilog中不允许嵌套定义模块,即一对module和endmodule之间只能定义一个模块。但一个模块内可以通过实例的方式多次调用其他模块。,实例的调用格式2:,add_fullu1(.A(A0),.B(B0),.C(C0),.Carry(C1),.S(S0),u2(.A(A1),.B(B1),.C(C1),.Carry(C2),.S(S1),u3(.A(A2),.B(B2),.C(C2),.Carry(C3),.S(S2),u4(.A(A3),.B(B3),.C(C3),.Carry(C4),.S(S3);,;,10.5七段数码管显示译码器,例10.5.1实现的是将BCD码转换成七段数码管的显示码,并假设LED数码管是共阴极。电路有4个输入端,7个输出端。,/例10.5.1moduledecode48(a,b,c,d,e,f,g,D3,D2,D1,D0);outputa,b,c,d,e,f,g;inputD3,D2,D1,D0;/输入4位BCD码rega,b,c,d,e,f,g;/输出驱动7个笔划段always(D3orD2orD1orD0)begincase(D3,D2,D1,D0)/用case语句进行译码,1.Verilog语言描述,4d0:a,b,c,d,e,f,g=7b1111110;4d1:a,b,c,d,e,f,g=7b0110000;4d2:a,b,c,d,e,f,g=7b1101101;4d3:a,b,c,d,e,f,g=7b1111001;4d4:a,b,c,d,e,f,g=7b0110011;4d5:a,b,c,d,e,f,g=7b1011011;4d6:a,b,c,d,e,f,g=7b1011111;4d7:a,b,c,d,e,f,g=7b1110000;4d8:a,b,c,d,e,f,g=7b1111111;4d9:a,b,c,d,e,f,g=7b1111011;default:a,b,c,d,e,f,g=7bx;endcaseendendmodule,2.程序说明,拼接操作符():拼接操作符将两个或者更多的表达式结果的各个位进行连接。其表达式由大括弧中的用逗号分割的表达式构成:,表达式1,表达式2,a,b1:2,c,4b00104y,第一行等同于a,b1,b2,c,1b0,1b0,1b1,1b0,第二行是嵌套反复多次调用,它等同于y,y,y,y,例如:,10.6D触发器,/例10.6.1moduled_ff(q,d,clk);outputq;inputd,clk;regq;always(posedgeclk)q=d;endmodule,1.Verilog语言描述,2.程序说明,上升沿和下降沿检测语句功能表,上升沿触发指变量值从0变为1、0变为x和z、或者从x,z变为1,用posedge表示。下降沿触发指变量值从1变为0、1变为x和z或者从x,z变为0,用negedge表示。,3仿真结果,例10.6.1的仿真电路图:,例10.6.1的仿真波形图:,Verilog语言有两种赋值方式:连续赋值assign和过程赋值。过程赋值用来更新寄存器类型变量的值,过程赋值包括阻塞赋值“=”和非阻塞赋值“=”两种。,/例10.6.2moduled_ff(q1,q2,d,clk);outputq1,q2;inputd,clk;regq1,q2;always(posedgeclk)beginq1=d;q2=q1;endendmodule,阻塞赋值:,阻塞赋值“=”:这种赋值方式是立即执行。也就是说执行下一条语句时,q1已等于d。,在clk时钟的上升沿,q1=d和q2=q1两条语句是先后执行的,最后结果相当于q1n+1=dn,q2n+1=qn+1=dn。,非阻塞赋值:,/例10.6.3moduled_ff(q1,q2,d,clk);outputq1,q2;inputd,clk;regq1,q2;always(posedgeclk)beginq1=d;q2=q1;endendmodule,非阻塞过程赋值语句不会阻塞进程,直到整个块的操作执行完才一次完成赋值操作。用于几个寄存器需要同一时刻赋值的情况。q1n+1=dn,q2n+1=q1n=dn-1,10.7计数器,10.7.14位二进制加法计数器,1.Verilog语言描述,/例10.7.1modulecount4(out,reset,clk);output3:0out;inputreset,clk;reg3:0out;always(posedgeclk)beginif(reset)out=0;/同步清零elseout=out+1;/计数endendmodule,10.7.2同步置数同步清零加法计数器,/例10.7.2modulecount(out,data,load,reset,clk);output7:0out;input7:0data;inputload,clk,reset;reg7:0out;always(posedgeclk)/clk上升沿触发beginif(!reset)out=8h00;/同步清零,低电平有效elseif(!load)out=data;/同步预置elseout=out+1;/计数endendmodule,1.Verilog语言描述,10.7.3异步清零计数器,1.Verilog语言描述,/例10.7.3modulecount2(out,reset,clk);output7:0out;inputclk,reset;reg7:0out;always(posedgeclkornegedgereset)beginif(!reset)out”和左移位运算符“n或ana代表要进行移位的操作数,n代表要移几位。这种移位运算都用0来填补移出的空位。,3.仿真结果,例10.7.4的仿真电路图:,例10.7.4的仿真波形图:,10.8状态机,在有限的状态内,在时钟的驱动下,通过给定初始状态,能够自动完成状态间的循环和相应状态输出的时序逻辑电路。,1.状态机的概念,0/0,0/0,状态转换图,din/op,用触发器设计状态机,用触发器设计状态机,C1,1J,1K,FF1,C1,1J,1K,FF2,din,CP,op,49,(b)Mealy型状态机结构图,(a)Moore型状态机结构图,输出为当前状态的函数。,输出为当前状态和输入的函数。,2.状态机的分类,自动售货机功能:,(4)用状态机设计一个自动售货机,它的投币口每次只能投入一枚五角或一元的硬币。投入一元五角钱硬币后机器自动给出一杯饮料;投入两元(两枚一元)硬币后,在给出饮料的同时找回一枚五角的硬币,投币时只能一个一个地投。,根据设计要求,共有7个变量,分别为:clk:时钟输入;reset:系统复位信号;half_dollar:代表投入5角硬币;one_dollar:代表投入1元硬币;half_out:售货机找回一枚5角硬币信号;dispense:机器售出一瓶饮料;collect:提示投币者取走饮料。,设计分析:,输入:高位一元,低位五角;00不投币,01投币五角,10投币一元;输出:高位为售出饮料,低位为找回五角硬币;00没有输出,10售出饮料,11售出饮料的同时找回五角硬币。,状态转换图的确定,one_dollarhalf_dollar/dispensehalf_out,/*clk:时钟;reset:系统复位输入:half_dollar:投入五角硬币;one_dollar:投入一元硬币;状态:idle:空闲状态;half:五角硬币状态;one:一元硬币状态;输出:dispense:售出一瓶饮料;half_out:找回五角硬币;collect:提示投币者取走饮料*/,Verilog语言描述,modulemachine(one_dollar,half_dollar,collect,half_out,dispense,reset,clk);parameteridle=2b00,half=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚书面合同协议书模板:财产分割及子女抚养权处理
- 离婚协议中股权分割与共同债务承担三方协议
- 票据代理与融资租赁合同模板(融资租赁公司)
- 班组操作安全培训内容课件
- 非洲旅游攻略课件
- 2025年泌尿外科学考试模拟试卷答案及解析
- 望洞庭识字课件
- 快递技术员考试题及答案
- 交通银行2025秋招无领导小组面试案例库吉林地区
- 邮储银行2025衡阳市秋招群面模拟题及高分话术
- 护坡工程竣工汇报
- 地下水污染的控制与修复课件
- 设备设施管理培训课件
- 急诊科护士的病人家属安抚与沟通
- 单位就业人员登记表
- 原始社会的解体和阶级社会的演进统编版高中政治必修1
- 万人计划青年人才答辩万人计划青年拔尖人才课件
- 干部人事档案审核情况登记表
- 【课件】什么是美术作品+课件-2023-2024学年高中美术湘美版(2019)美术鉴赏
- 离婚协议书下载电子版完整离婚协议书下载
- 入团积极分子培训
评论
0/150
提交评论