人力资源管理合同

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

VerilogHDL第九章硬件描述语言简介HDL的含义HardwareDescriptionLanguageVerilogHDL与其他HDL比较VerilogHDL—“告诉我你想要电路做什么,我给你提供能实现这个功能的硬件电路”VHDL—和VerilogHDL类似ABEL、AHDL—“告诉我你想要什么样的电路,我给你提供这样的电路”什么是VerilogHDL能够对数字逻辑电路的功能和结构进行描述的一种高级编程语言PLD/FPGA的设计开发语言编写程序描述数字电路的功能与结构描述电路的功能描述电路的结构表达具有并行性VerilogHDL特点符合C语言语法习惯简单,容易上手,缩短培训时间,如果有数字电子技术和C语言的基础,稍加学习即可编写能实现的电路。但也仅仅是语法上的相似而已并发执行,多条语句可能同时执行,在硬件上,实现不同功能的电路在同一时刻工作具有时序的概念,硬件电路输入到输出存在延迟。语法规则死,纠错仿真功能弱,错误信息不完整,较C语言更难发现错误VerilogHDL语言的描述风格VerilogHDL语言的描述风格,或者说描述方式,又可分为三类行为型描述指对行为与功能进行描述,它只描述行为特征,而没有涉及到用什么样的时序逻辑电路来实现,因此是一种使用高级语言的方法,具有很强的通用性和有效性。数据流型描述指通过assign连续赋值实现组合逻辑功能的描述。结构型描述指描述实体连接的结构方式,它通常通过实例进行描述,将Verilog已定义的基元实例嵌入到语言中。2选1数据选择器及仿真研究moduleMux21(a,b,s,y);//----------------inputa,b;inputs;outputy;assigny=(s==0)?a:b;//--------------endmodule//----------------1.assign语句2.表达式1?表达式2:表达式301y~0absy数据流描述moduleMux21(a,b,s,y);inputa,b;inputs;outputy;wired,e;//--------------1assignd=a&(~s);assigne=b&s;assigny=d|e;//--------------2endmodule&01xz00000101xxx0xxxz0xxx|01xz001xx11111xx1xxzx1xx^01xz001xx110xxxXxxxzXxxx~0110xxzx^~01xz010xx101xxxxxxxzxxxx行为级描述MUX的行为可以描述为:只要信号a或b或s发生变化,如果s为0则选择a输出;否则选择b输出。modulemux21(y,a,b,s);inputa,b,s;outputy;regy;always@(soraorb)if(!s)y=a;elsey=b;endmodule在行为级模型中,逻辑功能描述采用高级语言结构,如@,while,wait,if,case。absymux21Logicaloperators逻辑运算符&&(与)、||(或)、!(非)与逻辑优先级别高于或逻辑,但都低于关系和等式运算符。results——1(真)、0(假)andx(不确定值)。a=b&&c;b=a||c;ab-1&&b!=c||c!=d(ab-1)&&(b!=c)||(c!=d)if(!inword)if(inword==0)结构型描述结构级Verilog适合开发小规模元件,如ASIC和FPGA的单元Verilog内部带有描述基本逻辑功能的基本单元(primitive),如and门。综合产生的结果网表通常是结构级的。用户可以用结构级描述简单的组合或时序逻辑。下面是MUX的结构级描述,采用Verilog基本单元(门)描述。描述中含有传输延时。modulemux21(out,a,b,sl);inputa,b,sl;outputout;notu1(nsl,sl);and#1u2(sela,a,nsl);and#1u3(selb,b,sl);or#2u4(out,sela,selb);endmodule4选1数据选择器实例之一modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input[1:0]sel;regout;always@(in0orin1orin2orin3orsel)case(sel)2'b00:out=in0;2'b01:out=in1;2'b10:out=in2;2'b11:out=in3;default:out=x;endcaseendmodulesel(1)sel(0)out00in001in110in211in3wire[7:0]bus;//8位矢量网表busreg[0:40]addr;//41位矢量寄存器addrreg[-1:4]b;//6位矢量寄存器bbus[0]//bus的第0位bus[2:0]//bus的三位最低有效位。注意不能用bus[0:2],应和定义中保持一致。addr[0:1]//addr的两位最高有效位数的表示方法整型常量decimal,hexadecimal,octalorbinaryformat.两种表达方法简单的十进制数.10,9,156.位宽(可选)'进制0-9andatof(hexadecimal)attention!必须在进制符号前加“'”号,并且“'”号和进制符号间不能存在空格进制符号:b或B(二进制),d或D(十进制),h或H(十六进制),o或O(八进制)659//Asigneddecimalnumber'h837FF//isahexadecimalnumber'b101//isa3-bitbinarynumber'o7460//isanoctalnumber4af//isillegal(hexadecimalformatrequires'h)数字与进制之间可以有空格5'D3数字电路中,x表示不定值,z表示高阻态。可在十六进制,八进制和二进制中使用x和z,十六进制中一个x表示有四位都是x,八进制中一个x表示三位都是x,二进制中则表示一位是x。z用法同理。unsizedconstants32bit10=32'd10=32'b10101=32'd1=32'b1当实际数据位数小于定义的位宽时,如果是无符号数,则在左边补零,如果无符号数最左边是“x”,则在左边补“x”,如果无符号数左边是“z”,则在左边补“z”12'h3x=12'h03x,12'hzx=12'hzzx在表示长数据时还可以用下划线“_”进行分割以增加程序的可读性,16‘b1001_0110_1111_zzzz//islegalsyntax8’b_1110_1101//isillegalsyntaxcase语句的语法结构case(表达式)选项值1:语句1;选项值2:语句2;选项值3:语句3;…default:缺省语句;endcaseSEL[1..0]DATA[3..0]OUTMUXMux0outin0in1in2in3sel[1..0]4选1数据选择器实例之二modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input[1:0]sel;regout;always@(in0orin1orin2orin3orsel)beginif(sel==2'b00)out=in0;elseif(sel==2'b01)out=in1;elseif(sel==2'b10)out=in2;elseif(sel==2'b11)out=in3;elseout=2'bx;endendmoduleif(表达式1)语句1;elseif(表达式2)语句2;elseif…else语句n;if(a==0)if(b==0)c=1;elsec=0;begin语句1;语句2;......语句n;endif(a==0)beginif(b==0)C=1;endelsec=0;缺省项问题moduleex3reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always@(aorborc)beginif(a&b)rega=c;else//有缺省项情况rega=0;y=rega;endendmodule010always0~0regayabcmoduleex4reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always@(aorborc)beginif(a&b)rega=c;//缺省项省略y=rega;endendmoduleDENAPRECLRQalways0~0regayabcmoduleinccase(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)case({a,b})2’b11:e=d;2’b10:e=~c;endcaseendmodule4位加法器电路及仿真研究moduleadd_full(A,B,C,Carry,S);inputA,B,C;outputCarry,S;assignS=A^B^C;assignCarry=(A&B)|(B&C)|(A&C);endmodulemoduleadd_full4(A,B,C,S);input[3:0]A,B;output[3:0]S;output[4:0]C;assignC[0]=0;add_fullu1(A[0],B[0],C[0],C[1],S[0]),u2(A[1],B[1],C[1],C[2],S[1]),u3(A[2],B[2],C[2],C[3],S[2]),u4(A[3],B[3],C[3],C[4],S[3]);endmodule实例(Instances),例化(instantiation)设计中我们可能需要调用一些已经定义好的模块,作为我们电路中的单元,调用这些模块的过程,称为实例化(instantiation),调用完之后,这些电路中的模块单元称为实例(Instance)。实例的使用格式为:模块名实例名端口列表;模块的定义只是说明该模块的功能与接口,它只提供了一个模板,它要在电路中获得实际应用与实现需要被调用(实例化)。Verilog中不允许嵌套定义模块,即一对module和endmodule之间只能定义一个模块。但一个模块内可以通过实例的方式多次调用其他模块。add_fullu1(.A(A[0]),.B(B[0]),.C(C[0]),.Carry(C[1]),.S(S[0])),u2(.A(A[1]),.B(B[1]),.C(C[1]),.Carry(C[2]),.S(S[1])),u3(.A(A[2]),.B(B[2]),.C(C[2]),.Carry(C[3]),.S(S[2])),u4(.A(A[3]),.B(B[3]),.C(C[3]),.Carry(C[4]),.S(S[3]));moduledecode47(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)begincase({D3,D2,D1,D0})//用case语句进行译码4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功