硬件描述语言Verilog优秀文档_第1页
硬件描述语言Verilog优秀文档_第2页
硬件描述语言Verilog优秀文档_第3页
硬件描述语言Verilog优秀文档_第4页
硬件描述语言Verilog优秀文档_第5页
已阅读5页,还剩31页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章硬件描述语言VerilogHDL5.1VerilogHDL语言简介5.2VerilogHDL的特点5.3VerilogHDL重要的功能和概念5.4VerilogHDL的语法规定与常规要素5.5VerilogHDL代码基本结构

5.6VerilogHDL结构说明语句5.7VerilogHDL的语句顺序与并行执行5.8VerilogHDL不同抽象级别的模型5.9VerilogHDL仿真语句

5.10数字电路VerilogHDL系统设计本章内容5.1VerilogHDL简介Verilog发展过程:1985年:Verilog-XL1989年:Cadence使用Verilog1990年:成立OVI推广Verilog1995年:成为IEEE标准发展趋势:SystemVerilog、Superlog等。5.2Verilog特点简单、规范,易于开发具有混合仿真的能力具有高级语言的结构具有用户定于原语,创建灵活5.3VerilogHDL重要功能和概念抽象模型抽象层模块各层均可以由Verilog语言完成以$开头,提供一种封装好的行为。endcase所有的过程initial、always语句都在0时刻开始执行。行为级描述:就电路需要实现的功能进行描述对于完成的模块,如何在成本和效率上完成测试?outputout;Qtask<任务名>;7VerilogHDL语句的顺序执行与并行执行q=~q;endcaseinputclk,a;assignd=a|x;else连续赋值语句(assign)分支表达式1: 语句1;elseif(表达式n)语句n;VerilogHDL8种行为描述语言顺序、并行执行控制过程的启动时间事件触发Task结构Function结构各种建立表达式的运算符5.4Verilog语法规定与常规要素Verilog规则与C语言类似,但有区别。C语言是顺序执行,Verilog语言则可以定义并行执行。从根本上讲,Verilog是描述硬件的语言,而硬件肯定要有并行模块的。Verilog语义要素块语句:initial块、always块赋值语句:阻塞赋值和非阻塞赋值空格:就是分隔符。注释:单行注释//,多行注释/*……*/整数和实常数:<位数>’<基数><值>如:64’hff01、8’b1101_0001,h’83a标识符。可以使用大小写字母、和下划线开头,可以包含数字、字母、$符。合法的标识符:shift_reg_a,bus_index非法的标识符:34net、a*b_net系统任务和系统函数。以$开头,提供一种封装好的行为。常见的有:$display,$finish,$hold等。编译命令。以“`”反引号开始的标识符是编译器指令。如`define,`ifdef值集合0,1,x,z参数。用于定义时延和变量宽度。数据类型:有两种:线网类型(net)结构化元器件间的物理连线。Wire、tri等。寄存器类型(reg)抽象的数据存储单元。Reg、integer。5.5VerilogHDL代码的基本结构VerilogHDL的基本设计单元是“模块”。Module<模块名>(<端口列表>);端口说明(input,out,inout)参数定义<可选>数据类型定义连续赋值语句(assign)过程块(initial和always)行为描述语句底层模块实例任务和函数延时说明块例如:moduleblock1(a,b,c,d);//端口定义inputa,b,c;//I/O说明outputd;//I/O说明wirex;assignd=a|x;//功能描述assignx=(b&~c);endmoduleVerilog运算符和优先级算术运算符*/%

+

-移位运算符<<>>关系运算符<<=>>=等式运算符==!====!==缩减、位运算符&~&^^~|~|逻辑运算符&&||条件运算符?:VerilogHDL门级结构描述基本门:and、nand、buf、pullup等用户定义原语连续赋值语句assign<驱动强度><#时延值><线网标识符>=<表达式>VerilogHDL行为建模语句过程结构initial、always。所有的过程initial、always语句都在0时刻开始执行。时序控制,用于时延。事件控制边沿触发:posedge、negedge电平触发语句块。顺序语句begin……end并行语句。fork……join过程性赋值只能对寄存器类型的变量赋值。非阻塞性赋值(<=)是在语句块结束后,块内的非阻塞性赋值语才完成赋值操作,进行赋值。modulenonblocking(clk,a,b,c);outputc,b;inputclk,a;regc,b;

always@(posedgeclk)begin

b<=a;c<=b;endendmodule仿真波形阻塞赋值阻塞性赋值是指立即赋值,在该语句结束时就完成了赋值操作。modulenblocking(clk,a,b,c);outputc,b;inputclk,a;regc,b;always@(posedgeclk)beginb=a;c=b;endendmodule仿真波形If条件语句If条件语句有三种格式:1)if(表达式)语句;2)if(表达式)语句1; else 语句2;3)if(表达式1)语句1; elseif(表达式2)语句2;…elseif(表达式n)语句n;else语句n+1;assignz=(y==C);5VerilogHDL代码的基本结构beginmodulenonblocking(clk,a,b,c);循环语句:forever、repeat、while、for用于定义时延和变量宽度。//Definethenextstatecombinationalcircuitif(Resetn==0)y<=A;具有用户定于原语,创建灵活阻塞性赋值是指立即赋值,在该语句结束时就完成了赋值操作。==!====!==elseY=A;outputcout;case条件语句语法格式:case(控制表达式) 分支表达式1: 语句1; 分支表达式2: 语句2; … 分支表达式n: 语句n; [default: 语句n+1;]endcaseCasez,将高阻忽略Casex,将高阻和未定x均忽略不计。循环语句:forever、repeat、while、for5.6VerilogHDL的结构说明语句always说明语句——不断重复执行,直到仿真结束modulealways_demo(counter,tick,clk);outputtick;inputclk;reg[7:0]counter;regtick;always@(posedgeclk)begintick=~tick;counter=counter+1;endinitial语句task和function语句分别用来由用户定义任务和函数task<任务名>;//任务定义端口及数据类型声明语句;其他语句;endtask5.7VerilogHDL语句的顺序执行与并行执行在“always”模块内,逻辑按书写的顺序执行。moduleserial1(q,a,clk);outputq,a;inputclk;regq,a;always@(posedgeclk)beginq=~q;//阻塞赋值语句a=~q;endendmodule续“always”模块外的“assign”语句、实例元件都是同时(即并行)执行的,它们在程序中的先后顺序对结果并没有影响。moduleparall2(q,a,clk);outputq,a;inputclk;regq,a;always@(posedgeclk)begina=~q;endalways@(posedgeclk)beginq=~q;endendmodule“always”模块外的“assign”语句、实例元件都是同时(即并行)执行的,它们在程序中的先后顺序对结果并没有影响。分支表达式n: 语句n;q=~q;function[2:0]FUNC_COMP;output[1:0]Y;outputout;modulemux4_1(out,in1,in2,in3,in4,cntrl1,cntrl2);6VerilogHDL的结构说明语句not(notcntrl1,cntrl1);用于定义时延和变量宽度。function[1:0]FUNC_ENC;1995年:成为IEEE标准reg[2:1]y,Y;default:Y=2'bxx;过程结构initial、always。output[3:0]SUM;5.8VerilogHDL模块的种类和描述Verilog模块分为行为模块和可综合模块。描述分为行为级描述和门级描述。行为级描述:就电路需要实现的功能进行描述modulemux4_1(out,in1,in2,in3,in4,cntrl1,cntrl2);outputout;inputin1,in2,in3,in4,cntrl1,cntrl2;assignout=(in1&~cntrl1&~cntrl2)|(in2&~cntrl1&cntrl2)|(in3&cntrl1&~cntrl2)|(in4&cntrl1&cntrl2);endmodule门级描述门级描述modulemymux(out,in1,in2,in3,in4,cntrl1,cntrl2);outputout;inputin1,in2,in3,in4,cntrl1,cntrl2;wirenotctrl1,notcntrl2,w,x,y,z;not(notcntrl1,cntrl1);not(notcntrl2,cntrl2);and(w,in1,notcntrl1,notcntrl2);and(x,in2,notcntrl1,cntrl2);and(y,in3,cntrl1,notcntrl2);and(z,in4,cntrl1,cntrl2);or(out,w,x,y,z);endmodule以上两种描述的逻辑电路5.9VerilogHDL仿真语言仿真的必要对于完成的模块,如何在成本和效率上完成测试?VerilogHDL仿真语句的基本任务信息显示系统任务。用于仿真过程中在标准输出设备上显示仿真信息。display、write仿真监视系统任务对变量,字符串等进行监视。如monitor等5.10常用数字电路的VerilogHDL系统设计1、组合逻辑门电路设计加法器moduleadder4(COUT,SUM,A,B,CIN);output[3:0]SUM;outputCOUT;input[3:0]A,B;inputCIN;assign{COUT,SUM}=A+B+CIN;endmodule四位加法器的仿真波形数据比较器moduleCOMP(A,B,LG,EQ,SM);input[1:0]A,B;outputLG,EQ,SM;assign{LG,EQ,SM}=FUNC_COMP(A,B);function[2:0]FUNC_COMP;input[1:0]A,B;if(A>B)FUNC_COMP=3'b100;elseif(A<B)FUNC_COMP=3'b001;elseFUNC_COMP=3'b010;endfunctionendmodule编码器moduleENC(IN,Y);input[3:0]IN;output[1:0]Y;parameterSW_IN0=4'b0001;parameterSW_IN1=4'b0010;parameterSW_IN2=4'b0100;parameterSW_IN3=4'b1000;assignY=FUNC_ENC(IN);function[1:0]FUNC_ENC;input[3:0]IN;case(IN)SW_IN0:FUNC_ENC=0;SW_IN1:FUNC_ENC=1;SW_IN2:FUNC_ENC=2;SW_IN3:FUNC_ENC=3;endcaseendfunctionendmodule2、时序逻辑电路系统设计JK触发器moduleSY_JK_FF(J,K,CLK,Q,QB);inputJ,K,CLK;outputQ,QB;regQ;always@(posedgeCLK)case({J,K})0:Q<=Q;1:Q<=0;2:Q<=1;3:Q<=~Q;endcaseassignQB=~Q;endmodule摩尔型有限状态机

modulesimple(Clock,Resetn,w,z);inputClock,Resetn,w;outputz;reg[2:1]y,Y;parameter[2:1]A=2'b00,B=2'b01,C=2'b10;//Definethenextstatecombinationalcircuitalways@(w,y)case(y)A:if(w)Y=B;elseY=A;B:if(w)Y=C;elseY=A;C:if(w)Y=C;elseY=A;default:Y=2'bxx;endcase//Definethesequentialblock

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论