Verilog HDL复杂数字系统设计(夏宇闻)_第1页
Verilog HDL复杂数字系统设计(夏宇闻)_第2页
Verilog HDL复杂数字系统设计(夏宇闻)_第3页
Verilog HDL复杂数字系统设计(夏宇闻)_第4页
Verilog HDL复杂数字系统设计(夏宇闻)_第5页
已阅读5页,还剩464页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/7/4,南通大学电子信息学院,1,硬件描述语言,南通大学电子信息学院,2,2020/7/4,第一部分 Verilog HDL入门,南通大学电子信息学院,3,2020/7/4,1.1 数字电子系统CAD技术的发展,三个阶段: (1)20世纪60年代80年代初期 CAD (Computer Aided Design)阶段 (2)20世纪80年代初期90年代初期 CAE(Computer Aided Engineering)阶段 (3)20世纪90年代以来 EDA(Electronic Design Automation )阶段,第1章Verilog复杂数字设计综述,南通大学电子信息学院,

2、4,2020/7/4,数字系统EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言(Hardware Description Language )完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。 EDA技术的出现,提高了电路设计效率和可行性,减轻了设计者劳动强度。20世纪90年代以来,在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。 可编程逻辑器件(如CPLD、FPGA)的应用已得到普及。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同

3、软件设计那样方便快捷。,南通大学电子信息学院,5,2020/7/4,1.2 硬件描述语言Verilog HDL,1.2.1 什么是Verilog HDL Verilog HDL 是硬件描述语言的一种,它是目前应用最广泛的硬件描述语言之一,用于数字系统的设计。设计者用它进行数字逻辑系统的仿真模拟、时序分析、逻辑综合。,南通大学电子信息学院,6,2020/7/4,1.2.2 Verilog HDL的发展历史,1989 Cadence 公司购买 Verilog HDL的版权,1990 Verilog HDL 公开发表,1980s Verilog-XL 诞生,1990有关Verilog HDL的 全部

4、权利都移交给OVI(Open Verilog International)组织,1995 Verilog IEEE1364 标准公开发表,1999 模拟和数字都适用的 Verilog 标准公开发表,2001 Verilog IEEE1364-2001 标准公开发表,Verilog IEEE 1364-2005,南通大学电子信息学院,7,2020/7/4,1.2.3 Verilog HDL的优点 Verilog HDL是一种通用的硬件描述语言,易学易用。具有C语言编程经验的设计者很容易学习和掌握。 Verilog HDL允许在同一个电路模型内进行不同抽象层次的描述。设计者可以从开关、门级、RTL

5、和行为等各个层次对电路模型进行定义。 Verilog HDL是在全球最大的EDA供应商Cadence公司的扶持下针对EDA工具开发的HDL语言。绝大多数流行的综合工具都支持Verilog HDL,这是Verilog HDL成为设计者的首选语言的重要原因之一。 Verilog HDL的编程风格简洁明了,高效便捷。 所有的制造厂商提供用于Verilog HDL综合之后的逻辑仿真的元件库,使用Verilog HDL进行设计,即可在更广泛的范围内选择委托制造的厂商。 在ASIC设计领域,Verilog HDL占有明显的优势,南通大学电子信息学院,8,2020/7/4,1.3复杂数字系统的设计方法,1.

6、3.1 复杂数字逻辑系统 嵌入式微处理机系统 数字信号处理系统 高速并行计算逻辑 高速通信协议电路 高速编码/解码、加密/解密电路 复杂的多功能智能接口 门逻辑总数超过几万门达到几百甚至达几千万门的数字系统,南通大学电子信息学院,9,2020/7/4,1.3.2 传统的设计方法,查用器件手册; 选用合适的微处理器和电路芯片; 设计面包板和线路板; 调试; 定型;,设计复杂的数字系统(几十万门以上) 极其困难!,南通大学电子信息学院,10,2020/7/4,1.3.3 Verilog HDL设计法,选用合适的 EDA仿真工具; 选用合适电路图输入和HDL编辑工具; 逐个编写可综合HDL模块; 逐

7、个编写HDL测试模块; 逐个做 HDL 电路逻辑访真; 编写 HDL总测试模块; 做系统电路逻辑总仿真; 选用合适的基本逻辑元件库和宏库 租用或购买必要的IP核; 选用合适的综合器; 进行综合得到门级电路结构; 布局布线,得到时延文件; 后仿真; 定型, FPGA编码或ASIC投片,南通大学电子信息学院,11,2020/7/4,采用Verilog HDL输入法时,由于Verilog HDL的标准化,可以很容易把完成的设计进行移植到不同厂家的不同芯片。采用Verilog HDL输入法最大的优点是其与工艺无关性。,南通大学电子信息学院,12,2020/7/4,1.3.4 软核、固核和硬核,软核(S

8、oft Core):经过验证的、可综合的、实现后门数在5000门以上的HDL模型 固核(Firm Core):在某FPGA器件上实现的、经过验证、5000门以上的电路结构编码文献 硬核(Hard Core):以某种工艺实现的、经过验证、5000门以上的电路结构版图掩膜,南通大学电子信息学院,13,2020/7/4,1.4 典型设计流程,系统级设计,模块A,模块B,模块C,模块A1,模块A2,模块A3,模块B1,模块B2,模块B3,模块C1,模块C2,Top-Down自顶向下的设计概念,南通大学电子信息学院,14,2020/7/4,用EDA设计数字系统的典型流程,电路图设计,HDL设计,电路功能

9、仿真,HDL功能仿真,逻辑综合、时序验证,优化、布局布线,布线后门级仿真,工艺文件,电路制造版图或FPGA 码流文件,设计要求,实现,南通大学电子信息学院,15,2020/7/4,1.5 硬件描述语言的发展趋势,当前集成电路的设计面临一些问题,如设计重用、知识产权和内核插入;高层次综合和混合模型的总和;验证包括仿真验证和形式验证等自动验证手段;深亚微米效应;等等。这些问题给EDA技术的发展提出了新的要求,因此硬件描述语言的改进和发展非常必要。,南通大学电子信息学院,16,2020/7/4,1.6 设计资源,设计工具 Cadence Synopsys Mentor Graphics -Model

10、Sim Synplicity-Synplify XILINX-ISE Altera-Quartus 华大-Zeni FPGA芯片厂商 Xilinx Altera Lattice EDA网站 ,南通大学电子信息学院,17,2020/7/4,参考书:,Verilog HDL数字设计与综合,电子工业出版社 数字系统的Verilog HDL设计,机械工业出版社(江国强) CPU芯片逻辑设计技术M.北京:清华大学出版社(朱子玉,李亚民) 数字信号处理的FPGA实现 ,清华大学出版社,南通大学电子信息学院,18,2020/7/4,第2章 Verilog的模块,2.1 概

11、 述,Verilog HDL既是一种行为描述语言,也是一种结构描述语言。即:描述电路功能行为的模型或描述元器件或较大部件互连的模型均可以用Verilog HDL实现。,南通大学电子信息学院,19,2020/7/4,Verilog HDL能够描述电路的5种抽象级别:,1)系统级:用高级结构实现外部性能的模型2)算法级:用高级结构实现算法运行的模型3)RTL级(Register Transfer Level ):描述数据在寄存器之间的流动和如何处理、控制这些数据流动的模型4)门级:描述逻辑门及其互相之间连接的模型5)开关级:描述器件中三极管和存储节点以及互相之间连接的模型,南通大学电子信息学院,2

12、0,2020/7/4,Verilog HDL特别适合算法级和RTL级的模型设计 提供了一套完整的组合逻辑基本元件、双向通路和电阻器件的原语 可建立MOS器件的电荷分享和衰减动态模型 Verilog HDL与C语言的风格很类似,南通大学电子信息学院,21,2020/7/4,一个完整系统的Verilog HDL模型由若干个Verilog HDL模块构成,每个模块又由若干个子模块构成,Verilog模型(模块) -Verilog的基本设计单元,层次化的模型,2.2 Verilog的模块,南通大学电子信息学院,22,2020/7/4,例2-1a 多路选择器- 2选1 module muxtwo(out

13、,a,b,sl); input a,b,sl; output out; reg out; always (sl or a or b) if(!sl) out=a; else out=b; endmodule,sl,out,a,b,南通大学电子信息学院,23,2020/7/4,例2-1b 多路选择器-4选1 module mux4_to_1 (out, i0, i1, i2, i3, s1, s0); output out; input i0, i1, i2, i3,s1, s0; reg out; always (s1 or s0 or i0 or i1 or i2 or i3) begin

14、case (s1, s0) 2b00: out = i0; 2b01: out = i1; 2b10: out = i2; 2b11: out = i3; default: out = 1bx; endcase end endmodule,s1,out,i0,i1,i3,i2,s0,南通大学电子信息学院,24,2020/7/4,例2-2a 2选1 module muxtwo(out,a,b,sl); input a,b,sl; output out; not u1(nsl,sl); and #1 u2(sela, a, nsl); and #1 u3(selb, b, sl); or #2 u

15、4(out, sela, selb); endmodule,南通大学电子信息学院,25,2020/7/4,例2-2b 4选1多路选择器 module mux4_to_1 (out, i0, i1, i2, i3, s1, s0); output out; input i0, i1, i2, i3; input s1, s0; wire s1n, s0n; wire y0, y1, y2, y3; not not0(s1n, s1); not not1(s0n, s0); and and0(y0, i0, s1n, s0n); and and1(y1, i1, s1n, s0); and and

16、2(y2, i2, s1, s0n); and and3(y3, i3, s1, s0); or or0(out, y0, y1, y2, y3); endmodule,南通大学电子信息学院,26,2020/7/4,分析: 例2-1a和例2-1 b模块属于行为描述,例2-2 a例2-1 b模块属于门级描述。 通过综合,行为描述的模块可转化为门级描述的模块。,南通大学电子信息学院,27,2020/7/4,例2-3 加法器,module adder(count, sum, a, b, cin); input 2:0 a, b; input cin; output count; output 2:0

17、 sum; assign count,sum=a+b+cin; endmodule 说明: 求a 、 b、 cin 的和sum,count为进位。,南通大学电子信息学院,28,2020/7/4,例2-4 比较器,module compare(equal, a, b); input 1:0 a, b; output equal; assign equal =(a= =b)? 1:0; endmodule,南通大学电子信息学院,29,2020/7/4,例2-5 三态驱动器,module trist2(out,in,enable ); output out; input in,enable; buf

18、if1 mybuf(out,in,enable); endmodule,南通大学电子信息学院,30,2020/7/4,例2-6 三态驱动器,module trist1(sout,sin,ena ); output sout; input sin,ena; mytri tri_inst(.out(sout),.in(sin),.enable(ena); endmodule module mytri (out,in,enable ); output out; input in,enable; assign out=enable?in:bz; endmodule,南通大学电子信息学院,31,2020

19、/7/4,例2-7 测试,include “muxtwo.v” module t; reg ain,bin,select; reg clock; wire outw; initial begin ain=0;bin=0;select=0;clock=0;end always #50 clock=clock; always(posedge clock) begin ain= $random%2; #3 bin= $random%2; end always #10000 select=select; muxtwo m(.out(outw),.a(ain),.b(bin),.sl(select);

20、endmodule,南通大学电子信息学院,32,2020/7/4,作业,1. 试画出下列模块的仿真波形图(仿真时间0-2000): include “muxtwo.v” module t; reg ain,bin,select; reg clock; wire outw; initial begin ain=0;bin=0;select=0;clock=0;end always #50 clock=clock; always(posedge clock) begin ain=$random%2; #3 bin= $random%2; end always #500 select=select;

21、 muxtwo m(.out(outw),.a(ain),.b(bin),.sl(select); endmodule module muxtwo(out,a,b,sl); input a,b,sl; output out; reg out; always (sl or a or b) if(!sl) out=a; else out=b; endmodule,南通大学电子信息学院,33,2020/7/4,模块(block)由两部分组成: 端口定义(接口描述) 模块内容(逻辑功能描述),2.3 模块的结构,例如:module block(a,b,c,d); input a,b; output c

22、,d; assign c=a|b; assign d=a endmodule,a,b,c,d,南通大学电子信息学院,34,2020/7/4,2.3.1模块的端口定义格式: module 模块名(口1,口2, ) ;,例: module mytri (out,in,enable ); output out; input in,enable; assign out=enable?in:bz; endmodule 调用: mytri tri_inst(sout,sin,ena); mytri tri_inst(.out(sout),enable(ena ),.in(sin);,南通大学电子信息学院,

23、35,2020/7/4,2.3.2 模块的内容:,1.I/O说明 例如:input k1,k2,in0; input 7:0 data; output 3:0 out; inout 15:0 db; 2.内部信号的说明 例如:reg2:0 a; wire b, c, d ;,南通大学电子信息学院,36,2020/7/4,3.功能定义(有3种方法实现逻辑功能) 1)用assign声明语句 例:assign a=b+c; assign f=(x)?y:z; 2)用实例元件 and #2 u1(q,a,b); 3)用always块,南通大学电子信息学院,37,2020/7/4,( Verilog共有

24、19种数据类型,仅介绍4种;量:常量、变量) 3.1 常量 数字: 二进制、八进制、十进制、十六进制; 例: 8b00110011 8h33 16d48 6o17,第3章 Verilog的基础知识,南通大学电子信息学院,38,2020/7/4,参数型(parameter)-定义常量 例如: parameter data_width=8, addr_width=16; parameter counter=8*1024;,南通大学电子信息学院,39,2020/7/4,3.2变量,1、 wire型 wire型变量可以是任何方程式的输入信号,也可以是assign语句或实例元件的输出。 对wire型变量

25、的说明: wire a,b,c; wire 4:0 db; 下表说明了wire型变量在多驱动情况时的结果,南通大学电子信息学院,40,2020/7/4,表:,南通大学电子信息学院,41,2020/7/4,2、reg型-寄存器数据类型 通过赋值语句可以改变reg型变量的值。 reg型信号将用在always块中。 reg型信号通常是寄存器或触发器的输出,但并不一定是。 例如:对reg型变量的说明: reg 7:0 data; reg q0,q1,q2,q3; reg 15:0 addr;,南通大学电子信息学院,42,2020/7/4,3、reg型的扩展:memory型-存储器 通过扩展reg型变量

26、的地址实现。 例如:对memory型变量的说明: reg 7:0 memp 1023:0; reg 7:0 memd 255:0;,memory型不可综合,南通大学电子信息学院,43,2020/7/4,3.3运算符和表达式,1 、 基本的算术运算符 +(加法运算符,正) -(减法运算符,负) *(乘法运算符) / (除法运算符) % (模运算符),南通大学电子信息学院,44,2020/7/4,2 、位运算符 (按位取反,单目运算符) ,南通大学电子信息学院,45,2020/7/4,3.4 逻辑运算,3.4.1逻辑运算符(结果为真/假) ,南通大学电子信息学院,50,2020/7/4,3.4.6

27、缩减运算符,所谓缩减运算就是对单个操作数进行“与、或、非”递推运算,使结果变成1位。 例如:reg 3:0 b; reg c; c= 设b=4b0110, 则c=0.,南通大学电子信息学院,51,2020/7/4,3.5 优先级别,南通大学电子信息学院,52,2020/7/4,3.6关键词 IEEE Std 1364-2001 IEEE standard Verilog hardware description language,南通大学电子信息学院,53,2020/7/4,南通大学电子信息学院,54,2020/7/4,作业,P.38: 3;5;6;9;10,南通大学电子信息学院,55,202

28、0/7/4,第4章 赋值语句、块语句和程序控制语句,4.1 赋值语句 1、非阻塞赋值 非阻塞赋值符:= 例如:f=a; 说明:块结束后才完成赋值(因此f不是立即被赋值),在always块描述的时序电路中应使用非阻塞赋值。,南通大学电子信息学院,56,2020/7/4,例4-1 always (posedge clk) begin b=a; c=b; end 赋值在 always 块结束后执行,其功能是移位寄存器:,a,clk,b,c,Q,D,CLK,Q,D,CLK,南通大学电子信息学院,57,2020/7/4,例4-2 always (posedge clk) begin b=a; c=b;

29、end b=a立即执行,然后c=b执行,即c等于a。得到的电路为:,a,clk,b,c,Q,D,CLK,南通大学电子信息学院,58,2020/7/4,2、阻塞赋值 阻塞赋值符:= 例如:f=a; 说明:赋值完成后块才结束;f立即被赋值;在always块描述的时序电路中使用阻塞赋值可能产生错误;一般用在组合逻辑电路中。,南通大学电子信息学院,59,2020/7/4,4.2 块语句 1、顺序块 格式:begin:块名 块内声明语句 语句1; 语句2; 语句n; end 特点:块内语句顺序执行,如参数声明、reg、integer 、real型变量声明,南通大学电子信息学院,60,2020/7/4,例

30、如: begin a=b; c=a; end,南通大学电子信息学院,61,2020/7/4,2、并行块 格式:fork:块名 块内声明语句 语句1; 语句2; 语句n; join 特点:块内语句并行执行,块内各语句的顺序是任意的。,南通大学电子信息学院,62,2020/7/4,3、块名为块取一个名字 可以在块内定义局部变量 可以被其它语句调用,南通大学电子信息学院,63,2020/7/4,4.3 条件语句 1、if-else语句 例如:if(a= =1) out=a; 例如:if(a=b) q0=0; else begin q0=0; q1=1; end,南通大学电子信息学院,64,2020/

31、7/4,例如: if(x=5) a=b; else if(x=3) a=c; else if(x=7) a=d;,南通大学电子信息学院,65,2020/7/4,If语句的嵌套:,注意:else总是与前面最近的if配对 例如:c=a+b, 补码表示,判是否有溢出。 if(sign_a=0 ,南通大学电子信息学院,66,2020/7/4,4.4 case语句-多分支选择语句,一般形式: case(表达式)endcase casez(表达式)endcase casex(表达式)endcase case表达式:语句; 默认项:语句;,南通大学电子信息学院,67,2020/7/4,例如:reg2:0 i

32、n; reg7:0 out; case(in) 3b000:out=8b11111110; 3b001:out=8b11111101; 3b010:out=8b11111011; 3b011:out=8b11110111; 3b100:out=8b11101111; 3b101:out=8b11011111; 3b110:out=8b10111111; 3b111:out=8b01111111; default:out=8bxxxxxxxx; endcase,南通大学电子信息学院,68,2020/7/4,说明:1)控制表达式的值等于分支表达式的值时,执行分支表达式后面的语句。case-判表达式

33、与分支项是否严格相等casez-忽略高阻,判表达式与分支项是否相等casex-忽略高阻和不确定,判表达式与分支项是否相等2)如果控制表达式的值与分支表达式的值都不相等时,则执行default后面的语句。3)所有表达式的位宽必须相等。,南通大学电子信息学院,69,2020/7/4,4.5 循环语句,4.5.1 forever语句 格式: forever 语句(或语句组); 用于产生周期性波形,必须用在initial块中。,南通大学电子信息学院,70,2020/7/4,4.5.2 repeat语句(重复执行,次数由表达式决定) 格式: repeat(表达式) 语句(或语句组); 常量,南通大学电子

34、信息学院,71,2020/7/4,4.5.3 while语句 格式: while(表达式) 语句(或语句组); 功能:若表达式为真(或非0)则执行“语句”;若表达式为假(或为0)就结束。,南通大学电子信息学院,72,2020/7/4,4.5.4 for语句 格式: for(表达式1;表达式2;表达式3) 语句(或语句组); 循环变量初值 循环条件 循环变量修改 其中循环条件(教材中称结束条件) : 表达式为真(或非0)则循环,南通大学电子信息学院,73,2020/7/4,例如: begin:init_mem reg7:0 tempi; for(tempi=0;tempimemsize;temp

35、i=tempi+1) memorytempi=0; end,南通大学电子信息学院,74,2020/7/4,例 统计rega中1的个数。 begin:count1s reg7:0tempreg; count=0; for(tempreg=rega;tempreg;tempreg= tempreg 1) if(tempreg0 =1) count=count+1; end,南通大学电子信息学院,75,2020/7/4,第5章 结构说明、任务与函数,我们将学习2种结构说明语句: initial always,南通大学电子信息学院,76,2020/7/4,5.1 initial语句 格式: initi

36、al begin 语句1; 语句2; 语句n; end 说明:在仿真开始时执行一次。,南通大学电子信息学院,77,2020/7/4,5.2 always语句 格式: always 说明: 1) always语句在仿真时不断重复执行,而后面的语句是否执行取决于“时序控制”条件是否满足。 2)时序控制条件即触发条件,包括边沿触发(posedge/negedge)、电平触发,单个或多个。 3)一个模块中可以有多个always 块。,南通大学电子信息学院,78,2020/7/4,回顾例2-1a 2选1 module muxtwo(out,a,b,sl); input a,b,sl; output ou

37、t; reg out; always (sl or a or b) if(!sl) out=a; else out=b; endmodule,sl,out,a,b,南通大学电子信息学院,79,2020/7/4,例:8位数据寄存器 module hardreg(d,clk,q); input clk; input7:0 d; output7:0 q; reg7:0 q; always (posedge clk) q=d; endmodule,南通大学电子信息学院,80,2020/7/4,例:8位具有清0端的数据寄存器 module hardreg(d,clk,clrb,q); input clk

38、,clrb; input7:0 d; output7:0 q; reg7:0 q; always (posedge clk or posedge clrb) begin if(clrb) q=8b00000000;/清0 else q=d; /置数 end endmodule,南通大学电子信息学院,81,2020/7/4,5.3 task,把大的程序分解成比较小的程序; 不同地方多次使用的相同程序段设计成task或function,能够简化程序。,任务和函数说明语句作用:,南通大学电子信息学院,82,2020/7/4,1)任务的定义: task ; endtask 2)任务的调用: (端口1,

39、端口12,,端口n);,南通大学电子信息学院,83,2020/7/4,例如:module compare1(a,b,c,d,e,f); reg a,b,c,d,e,f; always (a or b or c) my_task(a,b,c,d,e,f); task my_task;/ input a,b,c ; output d,e,f; begin d=0;e=0;f=0; if(a=b) d=1; if(a=c) e=1; if(b=c) f=1; end endtask endmodule,南通大学电子信息学院,84,2020/7/4,例5-1:交通信号灯设计,module traffi

40、c_lights; reg clock,red,amber,green; parameter on=1,off=0,red_tics=350, amber_tics=30,green_tics=200; initial red=off; initial amber=off ; initial green=off;,南通大学电子信息学院,85,2020/7/4,always begin red=on; light(red,red_tics) ; amber=on; light(amber, amber _tics) ; green=on; light(green, green _tics) ;

41、end task light; output color;input 31:0 tics; begin repeat(tics) (posedge clock) ;/等待上升沿 color=off; end endtask always begin #100 clock=0; #100 clock=1;end endmodule,南通大学电子信息学院,86,2020/7/4,5.4 function,调用函数能够返回一个用于表达式的值。 1、定义函数的语法 function函数名; begin end end function,缺省时,返回值的类型为1位reg型,南通大学电子信息学院,87,2

42、020/7/4,2)函数的返回值 函数定义语句隐含对函数名相同的、函数内部寄存器的声明 函数中必须对与函数名相同的寄存器赋值 范围缺省时,返回值为1位reg型 3)函数的调用 函数名(*) 调用时,函数被当作表达式中的操作数,南通大学电子信息学院,88,2020/7/4,函数调用举例: function f_and; input a,b,c,d; f_and=a ,南通大学电子信息学院,89,2020/7/4,4)函数的使用规则 函数中不能包含时间控制语句 函数不能启动任务 函数至少有一个输入参量 函数中必须对与函数名相同的寄存器赋值,南通大学电子信息学院,90,2020/7/4,例5-2:

43、计算,module func; function31:0 f; input3:0 n; reg3:0 i; begin f =1; for(i=2; i= n; i= i+1) f = i * f ; end endfunction,函数,南通大学电子信息学院,91,2020/7/4,reg31:0 value; reg3:0 m; initial begin value =1; for (m=2;m=9;m=m+1) begin $display(“partial value m=%d result=%d”,m,value) value=m*m/( f (m) +1); end $displ

44、ay(“final value =%d”,value) end endmodule,函数调用,南通大学电子信息学院,92,2020/7/4,作业2:,1、以结构描述方式实现下列逻辑: F=AB+ACD 2、以连续赋值语句设计8位总线驱动器。 3、以always语句设计8位总线驱动器。,南通大学电子信息学院,93,2020/7/4,第6章 系统任务和编译预处理,南通大学电子信息学院,94,2020/7/4,6.1 系统任务$display和$write,例如: $display(“Partial result n=%d result=%d”,n,result);,原样显示,格式说明,另有特殊字符

45、,输出列表,引号内为格式控制,南通大学电子信息学院,95,2020/7/4,6.2 编译预处理,1.宏定义 define 标识符(宏名) 字符串(宏内容) 作用:当进行了宏定义后,就可以用标识符代替字符串,使程序易写、易读。,南通大学电子信息学院,96,2020/7/4,2.条件编译 ifdef 宏名 程序段1 else 程序段2 endif,南通大学电子信息学院,97,2020/7/4,第7章 不同抽象级别的Verilog HDL模型,南通大学电子信息学院,98,2020/7/4,7.1 门级结构描述,1、门类型(共26个) and nand or nor xor xnor buf not

46、引用声明举例: and #10 and0 ( f, a, b, c, d );,门类型,延时,实例名,输出,输入,南通大学电子信息学院,99,2020/7/4,例7-1 用基本逻辑门构成D触发器,module flop(data, clock, clear, q,qb); input data, clock, clear; output q,qb; nand #10 nd1(a,data,clock,clear), nd2(b, data,clock), nd4(d,c,b,clear), nd5(e,c,nclock), nd6(f,d,nclock), nd8(qb,q,f,clear);

47、 nand #9 nd3(c,a,d), nd7(q,e,qb); not #10 iv1(ndata,data), iv2(nclock,clock); endmodule,南通大学电子信息学院,100,2020/7/4,2、由已设计完成的模块构成更高层次的模块 例7-2:由触发器构成的4位寄存器 include “flop.v” module hardreg(d,clk,clrb,q); input clk,clrb; input3:0 d; output3:0 q; flop f1(d0,clk,clrb,q0,),f2(d1,clk,clrb,q1,), f3(d2,clk,clrb,

48、q2,),f4(d3,clk,clrb,q3,); endmodule,南通大学电子信息学院,101,2020/7/4,7.2 数据流建模,assign声明语句 延迟语句 定义表达式、操作符和操作数,南通大学电子信息学院,102,2020/7/4,连续赋值 assign out = i1 ,assign声明语句,out隐式线网声明,南通大学电子信息学院,103,2020/7/4,延迟语句,普通赋值延迟 assign #10 out = in1 ,南通大学电子信息学院,104,2020/7/4,7.3 VerilogHDL的行为级建模,例7-3:行为描述的4位寄存器 module hardreg

49、(d,clk,clrb,q); input clk,clrb; input3:0 d; output3:0 q; reg3:0 q; always (posedge clk or posedge clrb) begin if(clrb) q=0;/清0 else q=d; /置数 end endmodule,南通大学电子信息学院,105,2020/7/4,例7-4:行为描述的74LS74。 module dff_7474(d,clk,clrn,prn,q,qn); input d,clk,clrn,prn; output q,qn; reg q; assign qn=!q; always (p

50、osedge clk or negedge clrn or negedge prn) begin if(clrn= =0) q=0;/清0 else if(prn= =0) q=1; /置1 else q=d; /置数 end endmodule,南通大学电子信息学院,106,2020/7/4,仿真:,南通大学电子信息学院,107,2020/7/4,*7.3用户定义的原语(简称UDP),1、定义UDP primitive 元件名(输出端口名,输入端口名1,输入端口名2) output 输出端口名; input 输入端口名,输入端口名2,; reg 输出端口名; Initial begin 输出

51、端口寄存器或内部寄存器赋初值; end table 逻辑值 逻辑值 逻辑值 :逻辑值; 逻辑值 逻辑值 逻辑值 :逻辑值; 逻辑值 逻辑值 逻辑值 :逻辑值; ; endtable endprimitive,南通大学电子信息学院,108,2020/7/4,例7-5:电平触发的D触发器 primitive dff(q,d,clk,clrb) output q; input d,clk,clrb; reg q; initial begin q=0; end table / d clk clrb : qn : qn+1 ? ? 1 : ? : 0 ; 0 1 0 : ? : 0 ; 1 1 0 :

52、? : 1 ; ? 0 0 : ? : - ; endtable endprimitive,南通大学电子信息学院,109,2020/7/4,7.4 设计和验证组合逻辑模块,1、全加器 module add_4(x,y,sum,c); input 3:0 x,y; output3:0 sum; output c; assign c,sum=x+y; endmodule,拼接,南通大学电子信息学院,110,2020/7/4,2、 乘法器 1)结构级的模型 2)行为级的模型 module mult(x,y,product) ; input3:0 x , y ; output7:0 product ;

53、 assign product = x * y ; endmodule,南通大学电子信息学院,111,2020/7/4,3、 比较器 比较x、y的大小,位数由参数决定。 module compare_n(x,y,xgy,xsy,xey) ; parameter width = 8; inputwidth-1:0 x , y ; output xgy,xsy,xey; reg xgy,xsy,xey; always (x or y) begin if(x= = y) xey=1; else xey=0; if(xy) begin xgy=1;xsy=0;end else if(xy) begin

54、 xgy=0;xsy=1;end end endmodule,南通大学电子信息学院,112,2020/7/4,4、 多路器选择器,功能:根据地址信号在多路输入中选择一路输出。,输入,地址,输出,南通大学电子信息学院,113,2020/7/4,module mux_8(addr,in1,in2,in3,in4,in5,in6,in7,in8,mout,ncs) ; parameter width = 8; input 2:0 addr ; input ncs; inputwidth-1:0 in1,in2,in3,in4,in5,in6,in7,in8 ; output width-1:0 mo

55、ut; reg width-1:0 mout; always (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or ncs) begin if(!ncs) /if (ncs= = 0),南通大学电子信息学院,114,2020/7/4,case(addr) 3b000:mout=in1; 3b001:mout=in2; 3b010:mout=in3; 3b011:mout=in4; 3b100:mout=in5; 3b101:mout=in6; 3b110:mout=in7; 3b111:mout=in8; endcas

56、e else mout=0; end endmodule,南通大学电子信息学院,115,2020/7/4,5、3态门,例1: module tir(a, t, out) ; output7:0 out; input a,t; wire 7:0 out; assign out = t ? a : 8hzz; endmodule,南通大学电子信息学院,116,2020/7/4,例2: module tir(a, t, out) ; output11:0 out; input a,t; wire 11:0 out; bufif0 bf0(out , in 0, !t); bufif0 bf1(out

57、 , in 1, !t); bufif0 bf2(out , in 2, !t); bufif0 bf3(out , in 3, !t); bufif0 bf4(out , in 4, !t); bufif0 bf5(out , in 5, !t); bufif0 bf6(out , in 6, !t); bufif0 bf7(out , in 7, !t); endmodule,南通大学电子信息学院,117,2020/7/4,线编码器,2、设计一个8位线编码器,输入为D7 D0 , D7优先级最高,D0最低。 当Di为高电平输入时,F1,OUT为其编码,否则F0。,南通大学电子信息学院,118,2020/7/4,module code(d,f,out); input 7:0d; output f; output 2:0out; reg 2:0out; reg f; always( d ) casex(d) 8b1?:begin f=1;out=3b111;end 8b01?:begin f=1;out=3b110;end 8b001?:be

温馨提示

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

评论

0/150

提交评论