第5章 组合电路的自动化设计与分析_第1页
第5章 组合电路的自动化设计与分析_第2页
第5章 组合电路的自动化设计与分析_第3页
第5章 组合电路的自动化设计与分析_第4页
第5章 组合电路的自动化设计与分析_第5页
已阅读5页,还剩154页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5 5章章 组合电路的自动化设计与组合电路的自动化设计与分析分析 2v 主要参考书目主要参考书目 1. EDA技术实用教程(第技术实用教程(第4版)版)Verilog HDL,潘明,潘明,清华清华大学大学 2. FPGA系统设计与实践系统设计与实践 黄智伟等黄智伟等 电子工业出版社电子工业出版社v 关于可编程逻辑器件技术的几个常用网址关于可编程逻辑器件技术的几个常用网址 1. 介绍介绍CPLD/FPGA技术技术 介绍介绍Altera公司的产品和软件等公司的产品和软件等 3. Quartus论坛论坛 4. 中国中国EDA技术网技术网5.1 手工数字技术存在的问题手工数字技术存在的问题 设计方

2、法的选择使用EDA工具设计集成电路手工数字技术存在的问题手工数字技术存在的问题 一.传统的数字系统设计技术基于SSI、MSI、LSI、VLSI集成电路的设计。系统方案器件选择画电路图布线制版系统调试定型生产修改纯硬件逻辑设计(试凑法)手工数字技术存在的问题手工数字技术存在的问题 1.低速。低速。2.设计规模小。设计规模小。3.分析技术无法适应需要。分析技术无法适应需要。4. 设计效率低成本高。设计效率低成本高。5.可靠性低。可靠性低。6.体积大功耗大。体积大功耗大。7.功能有限。功能有限。8.无法实现功能升级。无法实现功能升级。9. 知识产权不易保护。知识产权不易保护。 问问 题题 现代的设计

3、方法:现代的设计方法:硬件设计硬件设计+ 软件设计软件设计 从上至下的设计方法从上至下的设计方法出现出现Hardware Description Language,HDL二二.现代的数字系统设计技术现代的数字系统设计技术基于基于EDA技术及大规模可编程逻辑器件的系统设计。技术及大规模可编程逻辑器件的系统设计。 工程师利用工程师利用EDA工具完成的数字系统设计,最终要工具完成的数字系统设计,最终要下载到下载到PLD内部完成布局布线才能实现真正的功能。内部完成布局布线才能实现真正的功能。 大规模可编程逻辑器件(大规模可编程逻辑器件(PLD Programmable Logic Device) 的出

4、现,引起了数字系统设计领域的革的出现,引起了数字系统设计领域的革命性变革。命性变革。PLD已成为现代数字系统的物理载体,设计已成为现代数字系统的物理载体,设计师在实验室就可以设计出芯片系统,并立即投入实际应师在实验室就可以设计出芯片系统,并立即投入实际应用。用。1. PLD已成为现代数字系统的物理载体已成为现代数字系统的物理载体 PLD是厂家作为一种通用性器件生产的半定制电路。其是厂家作为一种通用性器件生产的半定制电路。其特点是:特点是:(1)用户通过对器件的编程实现所需要的逻辑功能;)用户通过对器件的编程实现所需要的逻辑功能;(2)PLD是一种用户可配置的逻辑器件;是一种用户可配置的逻辑器件

5、;(3)成本低、使用灵活、设计周期短、可靠性高、风险小。)成本低、使用灵活、设计周期短、可靠性高、风险小。简单低密度PLDPLA复杂高密度PLDPALPROMGALEPLDCPLDFPGAPLD现场可编程现场可编程门阵列门阵列2. EDA技术日趋完善技术日趋完善现代现代EDA技术的主要特征是:技术的主要特征是:引入硬件描述语言;支持高层次的抽象设计;具有逻辑综合、行为综合、系统综合能力。EDA 技术:技术: EDAElectronic Design Automation 是电子设计自动化的英文是电子设计自动化的英文缩写。缩写。 它以功能强大的计算机为工具,在它以功能强大的计算机为工具,在EDA

6、工具软件平台上,根据工具软件平台上,根据设计者描述的源文件(原理图、硬件描述语言、波形图等),自设计者描述的源文件(原理图、硬件描述语言、波形图等),自动完成动完成编译编译、仿真仿真、优化优化、综合综合、适配(布局布线)适配(布局布线)以及以及下载下载,实现既定的电子线路系统功能实现既定的电子线路系统功能。 设计者的主要任务:完成系统硬件功能的描述。设计者的主要任务:完成系统硬件功能的描述。10典型的典型的EDA工具通常包括:工具通常包括:设计输入、仿真、综合、适配和下载。设计输入、仿真、综合、适配和下载。 综合工具综合工具的功能是将设计者在的功能是将设计者在EDA平台上完成的某系平台上完成的

7、某系统的设计文件由较高层次的描述转换到较低层次描述的过统的设计文件由较高层次的描述转换到较低层次描述的过程。综合工具是软件描述和硬件实现的一座桥梁。程。综合工具是软件描述和硬件实现的一座桥梁。 适配工具适配工具的功能是将综合器产生的网表文件安排在指的功能是将综合器产生的网表文件安排在指定的器件中,产生最终的下载文件。定的器件中,产生最终的下载文件。 11设计文件设计文件 processprocess(clkclk) beginbegin if (clk if (clkevent and clk=event and clk=1 1) then) then if (reset) then if (

8、reset) then begin begin out = 0; cont = 0; out = 0; cont = 0; end end elsif (load) then cont = in; elsif (load) then cont cont cont cont cont cont cont cont cont cont cont cont cont NewpBlock Diagram/Schematic File 选选择择工工具具 全全屏屏显显示示 单单条条连连线线 文文本本工工具具 插插入入符符号号 数数组组连连线线 橡橡皮皮筋筋功功能能 放放大大缩缩小小 部部分分连连线线 原原

9、理理图图编编辑辑区区 最最大大化化按按钮钮 对对角角线线工工具具 弧弧形形工工具具 工工具具条条 原理图编辑器窗口原理图设计方法原理图设计方法 元件输入对话框元件输入对话框 从元件库中调入元件符号从元件库中调入元件符号 电路原理图编辑输入电路原理图编辑输入 电路原理图编辑输入电路原理图编辑输入 (1)新建一个文件夹。)新建一个文件夹。 (2)打开原理图编辑窗。)打开原理图编辑窗。 (3)文件存盘。)文件存盘。 5.3.3 5.3.3 创建工程创建工程 (1)打开建立新工程管理窗。)打开建立新工程管理窗。 新建工程工新建工程工作目录的路作目录的路径径 新建的工程新建的工程名称名称工程的顶层工程的

10、顶层设计实体名设计实体名称称创建工程创建工程 (2)将设计文件加入工程中。)将设计文件加入工程中。 创建工程创建工程 (3)选择目标芯片。)选择目标芯片。 (4)工具设置。)工具设置。 选择对象器件选择对象器件EP1C12Q240C8 创建工程创建工程 (5)结束设置。)结束设置。 创建工程创建工程 (6)编辑构建电路图。)编辑构建电路图。 5.3.4 5.3.4 功能简要分析功能简要分析 5.3.5 5.3.5 编译前设置编译前设置 (1)选择)选择FPGA目标芯片。目标芯片。 选择对象器件选择对象器件EP1C12Q240C8 编译前设置编译前设置(2)选择配置器件的工作方式。)选择配置器件

11、的工作方式。 (3)选择配置器)选择配置器件和编程方式。件和编程方式。 编译前设置编译前设置编译前设置编译前设置(4)双功能输入输出端口设置。)双功能输入输出端口设置。 (5)选择目标器件闲置引脚的状态。)选择目标器件闲置引脚的状态。 5.3.6 5.3.6 全程编译全程编译 processing-start compilationprocessing-start 菜单编译器窗口编译结果的报告5.3.7 时序仿真测试电路功能时序仿真测试电路功能 选择编辑矢量波形文件,选择编辑矢量波形文件,打开波形编辑器(1)打开波形编辑器打开波形编辑器建立波形文件File-New-Vector Wavefor

12、m File使用波形编辑器绘制测试向量波形 工具条工具条 结点名字区结点名字区 波形区波形区 波形编辑器窗口时序仿真测试电路功能时序仿真测试电路功能 (1)打开波形编辑器。)打开波形编辑器。 (2)设置仿真时间区域。)设置仿真时间区域。 (3)波形文件存盘。)波形文件存盘。 Edit-End Edit-End TimeTime指定模拟终止时间(4 4)将工程)将工程toptop的端口信号名选入波形编辑器中的端口信号名选入波形编辑器中(1)选择)选择Pins: all(2)点击)点击 List(5 5)编辑输入波形(输入激励信号)编辑输入波形(输入激励信号) (1)按住鼠标左键并拖动鼠)按住鼠标

13、左键并拖动鼠标,选择一个时间段标,选择一个时间段(2)在工具条中选择一个)在工具条中选择一个值,给信号赋值值,给信号赋值(6 6)仿真器参数设置)仿真器参数设置(7)启动仿真器。)启动仿真器。 p模拟器窗口pProcessing- Simulator toolp或Processing-Start Simulator (4) 点击点击 Start, 启动模拟器启动模拟器 点击点击 Open,观察,观察 测试向量波形测试向量波形 (5) 点击点击 Report, 观察模拟结果波形观察模拟结果波形 (1)选择)选择 Functional (2) 产生功能模拟所需网表文件) 产生功能模拟所需网表文件

14、(3) 指定测试向量文件) 指定测试向量文件 (8 8)观察分析仿真结果。)观察分析仿真结果。 时延时延5.4 5.4 引脚锁定和编程下载引脚锁定和编程下载 5.4.1 引脚锁定引脚锁定 (1) 打开工程。打开工程。 引脚锁定引脚锁定(2)双击)双击“TO”栏的栏的new,即出现一按钮,点击此按钮,并选择出,即出现一按钮,点击此按钮,并选择出现的菜单中的现的菜单中的Node Finder项。项。 (3)最后保存这些引脚锁定的信息后,必须再编译(启动)最后保存这些引脚锁定的信息后,必须再编译(启动Start Compilation)一次,才能将引脚锁定信息编译进编程下载文件中。)一次,才能将引脚

15、锁定信息编译进编程下载文件中。 5.4.2 5.4.2 配置文件下载配置文件下载 (1)打开编程窗。)打开编程窗。 5.4 5.4 引脚锁定和编程下载引脚锁定和编程下载 5.4.2 配置文件下载配置文件下载 (2)设置编程器。)设置编程器。(3)测试)测试JTAG口。口。 (4)硬件测试。)硬件测试。 5.4 5.4 引脚锁定和编程下载引脚锁定和编程下载 5.4.3 JTAG间接模式编程配置器件间接模式编程配置器件 1. 将将SOF文件转化为文件转化为JTAG间接配置文件。间接配置文件。 5.4 5.4 引脚锁定和编程下载引脚锁定和编程下载 5.4.3 JTAG间接模式编程配置器件间接模式编程

16、配置器件 2. 下载下载JTAG间接配置文件。间接配置文件。 补充:补充: 第一节第一节 Verilog HDL基础知识基础知识一一.Verilog 模块的结构模块的结构 Verilog HDL以模块集合的形式来描述数字系统。以模块集合的形式来描述数字系统。 “模块模块”(module)是)是Verilog 程序的基本设计单元,程序的基本设计单元,用于描述某个设计的功能、结构、与其他模块通信的外部用于描述某个设计的功能、结构、与其他模块通信的外部端口。端口。 先通过三个简单的先通过三个简单的Verilog程序,直观地认识程序,直观地认识Verilog模块的结构。模块的结构。例例1:根据电路结构

17、建模根据电路结构建模1 bsela11ba selout1moduleMUX2-1 ( out , a,b,sel ););output out;Input a,b,sel;wire a, b, sel, out;wire a1, b1, sel-; not u1(sel-,sel););and u2(a1,a,sel-););and u3(b1,b,sel););or u4(out,a1,b1););endmodule/模块名、端口列表模块名、端口列表/声明声明out为输出端口为输出端口/声明声明a,b,sel为输入端口为输入端口/定义端口信号的数据类型定义端口信号的数据类型/定义内部节点信

18、号(连线)定义内部节点信号(连线)/调用内置调用内置“非非”门元件门元件/调用内置调用内置“与与”门元件门元件/调用内置调用内置“与与”门元件门元件/调用内置调用内置“或或”门元件门元件例例2:根据逻辑表达式建模:根据逻辑表达式建模bselaselout moduleMUX2-1 (out,a,b,sel););output out ;Input a,b,sel ;wire a, b, sel, out ;endmoduleassign out = ( (sel) & a) | (sel & b) ;定义同上定义同上采用逻辑表达式进行逻辑功能的描述采用逻辑表达式进行逻辑功能的描述1 bsela

19、11ba selout1例例3:根据电路行为建模:根据电路行为建模moduleMUX2-1 (out,a,b,sel););output out;Input a,b,sel;wire a, b, sel;reg out;endmodulealways (sel or a or b )if ( ! sel ) out = a;else out = b;定义定义always中的赋值变量中的赋值变量 只要信号只要信号sel、a、b中有一个发生变化,就执中有一个发生变化,就执行下面的语句。在这里已行下面的语句。在这里已看不出电路的结构,而是看不出电路的结构,而是一种电路行为的描述。一种电路行为的描述。

20、1 bsela11ba selout1Verilog 模块基模块基本结构本结构module 模块名模块名 (端口列表)(端口列表);端口定义端口定义input 输入端口输入端口output 输出端口输出端口数据类型说明数据类型说明wireregparameter逻辑功能定义逻辑功能定义assignalways语言内置门元件调用语言内置门元件调用endmodule1. 模块声明模块声明 Verilog 模块结构完全包含在模块结构完全包含在module和和endmodule关键字之间。关键字之间。模块声明的格式:模块声明的格式:module 模块名模块名 (端口(端口1,端口,端口2、.););e

21、ndmodulemodule(模块)module能够表示:能够表示:物理块,如物理块,如IC或或ASIC单元单元逻辑块,如一个逻辑块,如一个CPU设计的设计的ALU部分部分整个系统整个系统每一个模块的描述从关键词每一个模块的描述从关键词module开始,有一个开始,有一个名称名称(如(如SN74LS74,DFF,ALU等等),由关键词等等),由关键词endmodule结束。结束。module是层是层次化设计的基次化设计的基本构件本构件逻辑描述放在逻辑描述放在module内部内部2. 端口(端口(Port)定义)定义 端口是模块与外界或其他模块进行连接和通信的信号线,端口是模块与外界或其他模块进

22、行连接和通信的信号线,对模块的输入、输出端口要进行明确的定义,格式如下:对模块的输入、输出端口要进行明确的定义,格式如下:input 向量位宽向量位宽 端口名端口名1,端口名,端口名2, 端口名端口名n;output 向量位宽向量位宽 端口名端口名1,端口名,端口名2, 端口名端口名n;定义输入定义输入定义输出定义输出模块端口(module ports)端口在模块名字端口在模块名字后的括号中列出后的括号中列出端口可以说明为端口可以说明为input, output及及inout端口等价于硬件端口等价于硬件的引脚的引脚(pin)注意模块的名称DFF,端口列表及说明模块通过端口与外部通信3. 数据类

23、型和信号类型的声明数据类型和信号类型的声明 每个端口除声明为输入、输出,还要声明其数据类型是每个端口除声明为输入、输出,还要声明其数据类型是连线型(连线型(wire)还是寄存器型()还是寄存器型(reg),若没有声明,综合器默若没有声明,综合器默认为是认为是wire型。型。 模块中用到的节点信号(连线)也必须进行数据类型模块中用到的节点信号(连线)也必须进行数据类型的定义。的定义。用用wire将信号定义为连线型;将信号定义为连线型;用用reg将信号定义为寄存器型;将信号定义为寄存器型;用用parameter定义符号常量。定义符号常量。特别提示:输入不能声明为特别提示:输入不能声明为reg型!型

24、!4. 逻辑功能定义逻辑功能定义 模块中最核心的部分是逻辑功能定义。下面介绍几模块中最核心的部分是逻辑功能定义。下面介绍几种基本方法。种基本方法。(1 )用用“assign”持续赋值语句进行逻辑功能的定义持续赋值语句进行逻辑功能的定义例如:例如:assign F=(A&B)|(C&D) ; “assign”语句一般用于组合逻辑的赋值,称为持续语句一般用于组合逻辑的赋值,称为持续赋值方式。是一种基于逻辑表达式的逻辑功能描述方式。赋值方式。是一种基于逻辑表达式的逻辑功能描述方式。在前面的例在前面的例2中,就是采用这种方式建立电路模型。中,就是采用这种方式建立电路模型。(2) 调用内置元件(元件例化

25、)描述电路结构调用内置元件(元件例化)描述电路结构调用调用Verilog HDL中提供的动态元件中提供的动态元件“画画”电路图。电路图。例如:例如: and myand3 ( out, a, b, c ) ;调用门元件,构造一个名为调用门元件,构造一个名为myand3的三输入与门。的三输入与门。and c1 ( F, in1, in2 ) ;调用门元件,构造一个名为调用门元件,构造一个名为c1的二输入与门。的二输入与门。 前面例前面例1中,通过调用门元件,进行信号的相互连接,中,通过调用门元件,进行信号的相互连接,构造电路的模型。构造电路的模型。模块实例化模块实例化(module instan

26、ces)module DFF (d, clk, clr, q, qb); .endmodulemodule REG4( d, clk, clr, q, qb); output 3: 0 q, qb; input 3: 0 d; input clk, clr; DFF d0 (d 0, clk, clr, q 0, qb 0); DFF d1 (d 1, clk, clr, q 1, qb 1); DFF d2 (d 2, clk, clr, q 2, qb 2); DFF d3 (d 3, clk, clr, q 3, qb 3);endmodule调用内置元件(元件例化)描述电路结构调用内置

27、元件(元件例化)描述电路结构module MUX2_1 (out, a, b, sel); / Port declarations output out; input a, b, sel; wire out, a, b, sel; wire sel_, a1, b1; / The netlist not (sel_, sel); and (a1, a, sel_); and (b1, b, sel); or (out, a1, b1);endmodule注释行注释行已定义的已定义的 Verilog基基本单元的本单元的实例实例a, b, sel是输入端口,是输入端口,out是输出是输出端口。所有

28、信号通过这些端口从模端口。所有信号通过这些端口从模块输入块输入/输出。输出。另一个模块可以通过模块名及端口另一个模块可以通过模块名及端口说明使用多路器。实例化多路器时说明使用多路器。实例化多路器时不需要知道其实现细节。这正是自不需要知道其实现细节。这正是自上而下设计方法的一个重要特点。上而下设计方法的一个重要特点。模块的实现可以是行为级也可以是模块的实现可以是行为级也可以是门级,但并不影响高层次模块对它门级,但并不影响高层次模块对它的使用。的使用。多路器由关键多路器由关键词词module和和endmodule开始及结束。开始及结束。(3) 用用 “always”过程块描述电路的逻辑功能过程块描

29、述电路的逻辑功能module MUX2_1 (out, a, b, sel); / Port declarations output out; input a, b, sel; wire out, a, b, sel; wire sel_, a1, b1; reg out; always (sel or a or b ) if ( ! sel ) out = a; else out = b;endmodule注释行注释行定义定义always中的赋值变量中的赋值变量a, b, sel是输入端口,是输入端口,out是输出是输出端口。所有信号通过这些端口从模端口。所有信号通过这些端口从模块输入块输入

30、/输出。输出。另一个模块可以通过模块名及端口另一个模块可以通过模块名及端口说明使用多路器。实例化多路器时说明使用多路器。实例化多路器时不需要知道其实现细节。这正是自不需要知道其实现细节。这正是自上而下设计方法的一个重要特点。上而下设计方法的一个重要特点。模块的实现可以是行为级也可以是模块的实现可以是行为级也可以是门级,但并不影响高层次模块对它门级,但并不影响高层次模块对它的使用。的使用。多路器由关键多路器由关键词词module和和endmodule开始及结束。开始及结束。小 结Verilog HDL程序是由模块构成的 模块是可以进行层次嵌套的上层模块可以通过模块调用构成更大的逻辑系统Veril

31、og 模块分为逻辑综合模块和逻辑模拟模块每个模块由模块声明、端口定义、数据类型说明、逻辑功 能定义四部分构成Verilog HDL程序的书写格式自由,一行可写多个语句,一 个语句也可分写多行。除endmodule外,每个语句和数据定义的最后必须有分号可用/*/和/进行多行、单行注释(绿色),增强程序的可读性二二. Verilog HDL中的数字(数值)常量中的数字(数值)常量Verilog HDL 有下列四种基本的逻辑状态有下列四种基本的逻辑状态:0: 低电平、低电平、 逻辑逻辑0或或“假假” 1: 高电平、逻辑高电平、逻辑1或或“真真”x或或X: 不确定或未知的逻辑状态不确定或未知的逻辑状态

32、 z或或Z: 高阻状态高阻状态Verilog HDL中的常量是有这四类基本值组成的。中的常量是有这四类基本值组成的。 位宽:对应二进位宽:对应二进制数的宽度,省制数的宽度,省缺为缺为32位。位。当指定当指定进制格进制格式时,式时,不能省不能省略略数值采用的进制格式数值采用的进制格式b或或B:二进制:二进制d或或D或缺省:十进制或缺省:十进制h或或H:十六进制:十六进制o或或O:八进制:八进制基于进制的数基于进制的数字序列字序列 Verilog HDL可综合模块中常用的整数型常量的书写格式:可综合模块中常用的整数型常量的书写格式:正、负号正、负号例:例: 659 /简单的十进制表示简单的十进制表

33、示h 837FF /*省缺位宽的十六进制数,位宽大于实际位数,数值高位是省缺位宽的十六进制数,位宽大于实际位数,数值高位是 0或或1,高位补,高位补0;数值高位是;数值高位是 x 或或 z ,高位补,高位补 x 或或 z 。*/o 7460 /省缺位宽的八进制数省缺位宽的八进制数4AF /非法的整数表示,十六进制需要非法的整数表示,十六进制需要 hb001 /非法的整数表示,不能省略非法的整数表示,不能省略 4b0010 /四位的二进制数四位的二进制数5D3 /五位的十进制数五位的十进制数8 b0100_1010 /使用下划线增加可读性使用下划线增加可读性 三三. Verilog HDL中的标

34、识符中的标识符由字母、数字以及符号由字母、数字以及符号“$”、“_”(下划线)组成。(下划线)组成。标识符必须以字母或下划线开头标识符必须以字母或下划线开头标识符是区分大小写的标识符是区分大小写的合法标识符举例:合法标识符举例:countCOUNT_A1_d2不正确的标识符:不正确的标识符:30countOut*$123标识符常用于标识符常用于“模块名模块名”或或“变量名变量名”四四. Verilog HDL中的关键字中的关键字 关键字也称为保留字,是关键字也称为保留字,是Verilog HDL 语言内部的专用语言内部的专用词,用于组织语言结构,全部采用小写形式(蓝色)。词,用于组织语言结构,

35、全部采用小写形式(蓝色)。 例如:例如:module、endmodule、begin、end、always、and、or、if、else、wire、reg、input、output、 请同学们在后续课程学习时,关注、总结请同学们在后续课程学习时,关注、总结 Verilog HDL 中的关键字,从现在开始熟悉掌握。中的关键字,从现在开始熟悉掌握。请注意:请注意:ALWAYS是标识符(黑色),与关键字是标识符(黑色),与关键字always是不同的。是不同的。五五.Verilog HDL中的数据(变量)类型中的数据(变量)类型 在硬件描述语言中,数据类型用来表示数字电路中在硬件描述语言中,数据类型用

36、来表示数字电路中的物理连线、数据存储和传送单元。的物理连线、数据存储和传送单元。 Verilog HDL中共有中共有19种数据类型,分为连线型种数据类型,分为连线型(Net Type)和寄存器型()和寄存器型(Register Type)。在可综合)。在可综合模块中,最常用的是这两类中的模块中,最常用的是这两类中的wire型、型、reg型、型、integer型和型和parameter型。型。1. 连线型(连线型(Net Type)变量)变量 连线型变量一般用来描述硬件电路中的各种物理连线。连线型变量一般用来描述硬件电路中的各种物理连线。其特点是输出始终跟随输入的变化而变化。对连线型变量有其特点

37、是输出始终跟随输入的变化而变化。对连线型变量有两种驱动方式,一种是在结构描述中将其连接到一个逻辑门两种驱动方式,一种是在结构描述中将其连接到一个逻辑门或模块的输出端;另一种是用或模块的输出端;另一种是用assign语句进行赋值。语句进行赋值。类型类型功能说明功能说明wire, tri常用连线类型常用连线类型wor,trior具有线或特性的连线具有线或特性的连线wand,triand具有线与特性的连线具有线与特性的连线tri1,tri0上拉电阻,下拉电阻上拉电阻,下拉电阻supply1,supply0电源(逻辑电源(逻辑1),地(逻辑),地(逻辑0)Verilog HDL提供了多种连线型变量提供

38、了多种连线型变量重点介绍在可综合模块中最常用的是重点介绍在可综合模块中最常用的是wire型变量型变量 wire型变量常用来表示通过型变量常用来表示通过 assign 语句赋值的组合语句赋值的组合逻辑信号。逻辑信号。 Verilog 模块中的模块中的输入、输出端口输入、输出端口的信号类型说明省的信号类型说明省缺时,自动定义为缺时,自动定义为 wire 型。型。wire型变型变量可用于量可用于任何表达式的输入任何表达式的输入assign语句的输出语句的输出实例元件的输出实例元件的输出对综合器而言,其取值对综合器而言,其取值 0,1,x,z其他模块的输出其他模块的输出wire型变量的定义格式型变量的

39、定义格式 wire 向量位宽向量位宽数据名数据名1,数据名,数据名2, 数据名数据名n ;关键字关键字n-1 : 0 或或 n : 1时,定义多位时,定义多位wire型向量;型向量;省略时,定义一位的省略时,定义一位的wire型变量。型变量。例如,例如,wire型变量或向量的定义:型变量或向量的定义: wire a , b ; /定义两个定义两个 1 位位 wire 型变量型变量 a , b wire 7:0 databus; /定义一个定义一个8位宽的向量(数据总线)位宽的向量(数据总线) wire 20:1 addrbus ; /定义定义20位宽的地址总线位宽的地址总线 例如,例如,wir

40、e型向量的全域使用型向量的全域使用 wire 7:0 in , out ; /定义两个定义两个8位位wire型向量型向量in , outassign out = in ; /按位对应赋值按位对应赋值例如,对例如,对wire型向量可选域使用型向量可选域使用 wire 7:0 out ; wire 3:0 in ; assign out 5:2 = in ; / in 的的 0-3 位赋值给位赋值给 out 的的 2-5 位位等效于:等效于:assign out 5 = in 3 ; assign out 4 = in 2 ; assign out 3 = in 1 ; assign out 2

41、= in 0 ;2. 寄存器型(寄存器型(Register Type)变量)变量 寄存器型变量对应的是具有状态保持作用的电路元寄存器型变量对应的是具有状态保持作用的电路元件。例如:触发器,寄存器。件。例如:触发器,寄存器。 寄存器型变量的特点是必须进行明确的赋值,并且寄存器型变量的特点是必须进行明确的赋值,并且在被重新赋值前一直保持原值。在被重新赋值前一直保持原值。register型变量与型变量与net型变量的根本区别在于:型变量的根本区别在于:register型变量能够保持最后一次的赋值;型变量能够保持最后一次的赋值;net型变量需型变量需要有持续的驱动。要有持续的驱动。 在设计中必须将寄存

42、器型变量放在过程块语句(在设计中必须将寄存器型变量放在过程块语句(initial , always)中,通过过程赋值语句赋值。即:)中,通过过程赋值语句赋值。即: initial , always过程块内被赋值的每一个信号,都必须定义为过程块内被赋值的每一个信号,都必须定义为register型变量。型变量。 Verilog HDL中也提供了多种寄存器型变量,在可综中也提供了多种寄存器型变量,在可综合模块中常用的是合模块中常用的是integer型和型和reg型。型。 integer寄存器型变量是一种纯数学的抽象描述,它寄存器型变量是一种纯数学的抽象描述,它虽然能定义带符号的虽然能定义带符号的32

43、位整型寄存器变量,但不对应任位整型寄存器变量,但不对应任何具体的硬件电路。何具体的硬件电路。 reg 数据名数据名1,数据名,数据名2, 数据名数据名n ;reg型变量的定义格式:型变量的定义格式:关键字关键字n-1 : 0 或或 n : 1时,定义多位时,定义多位reg型向量;型向量;省略时,定义一位的省略时,定义一位的reg型变量。型变量。例如,例如,reg型变量、向量的定义型变量、向量的定义 reg a , b ; /定义两个寄存器型变量定义两个寄存器型变量a , b 。位宽为。位宽为 1 。 reg 7:0 data ; /定义位宽为定义位宽为8的寄存器型变量的寄存器型变量data 。

44、 reg 8:1 data ; /等效。等效。例如:例如:reg 7:0 a,b ;reg3:0 c ;reg d ;d=a 7 & b 7 ; /位选择位选择c=a 7:4 + b 3:0 ; /域选择域选择 在表达式中,可任意使用在表达式中,可任意使用reg型变量中的一位或相邻几型变量中的一位或相邻几位,分别称为位选择和域选择。位,分别称为位选择和域选择。例:例:parameter sel=8 , code=8ha3 ;/定义定义 sel 为常数为常数8 (十进制),(十进制),code 为常数为常数 a3 (十六进制)(十六进制)parameter data=8 , addr=data

45、* 2 ;/data为为8,addr为为16, 用常数表达式赋值。用常数表达式赋值。3. parameter型数据型数据 在在 Verilog HDL中,用中,用 parameter 定义符号常量,即定定义符号常量,即定义一个标识符代表一个常量。定义格式如下:义一个标识符代表一个常量。定义格式如下: parameter 参数名参数名1=表达式表达式1,参数名,参数名2=表达式表达式2, ;六六.Verilog HDL中的运算符中的运算符按功能分成九大类:按功能分成九大类:关系运算符关系运算符算术运算符算术运算符逻辑运算符逻辑运算符等式运算符等式运算符缩减运算符缩减运算符条件运算符条件运算符拼接

46、运算符拼接运算符移位运算符移位运算符位运算符位运算符按运算符所带的操作数区分:按运算符所带的操作数区分:单目运算符(单目运算符(unary operator),带一个操作数。),带一个操作数。双目运算符(双目运算符(binary operator),带两个操作数。),带两个操作数。三目运算符(三目运算符(ternary operator),带三个操作数。),带三个操作数。算算 术术 运运 算算 符符+ 加加- 减减* 乘乘/ 除除 % 模运算符(对两个整型数据进行求余运算)模运算符(对两个整型数据进行求余运算)均为双目运算符。均为双目运算符。在进行整数除法运算时,结果略去小数。在进行整数除法运

47、算时,结果略去小数。取模运算时,结果符号与第一操作数相同。取模运算时,结果符号与第一操作数相同。当两操作数中有一个为当两操作数中有一个为 x ,则结果就为,则结果就为 x 。10%3,结果为,结果为1;12%4,结果为,结果为0;-10%3,结果为,结果为-1;11%-3,结果为,结果为2逻逻 辑辑 运运 算算 符符& 逻辑与,双目运算逻辑与,双目运算 逻辑或,双目运算逻辑或,双目运算! 逻辑非,单目运算逻辑非,单目运算当进行逻辑运算时:当进行逻辑运算时: 若操作数是一位的,则逻辑运算真值表如下:若操作数是一位的,则逻辑运算真值表如下:a ba&ba|b!a !b0 000110 101101

48、0010 111110 0 当操作数由多位组成,则将操作数作为一个整体处理,即当操作数由多位组成,则将操作数作为一个整体处理,即如操作数所有位都是如操作数所有位都是“0”,则整体作为逻辑,则整体作为逻辑“0”;只要其中;只要其中有一位是有一位是“1”,则整体作为逻辑,则整体作为逻辑“1”。 若操作数中有若操作数中有 x , 则结果也可能是则结果也可能是 x 。例如:设例如:设 a = 2 b = 0 c = 4hx a & b 逻辑与,逻辑与,1 & 0 , 结果为结果为 0 a b 逻辑或,逻辑或,1 0 ,结果为,结果为 1 ! a 逻辑非逻辑非 ,!,!1 ,结果为,结果为 0a & c

49、 逻辑与,逻辑与,1 & x , 结果为结果为 x a c 逻辑或逻辑或 ,1 x ,结果为,结果为 1 ! c 逻辑非逻辑非 ,!,!X ,结果为,结果为 x位位 运运 算算 符符 按位非(按位取反),单目运算。按位非(按位取反),单目运算。& 按位与按位与 按位或按位或 按位异或按位异或 , 按位异或非(按位同或)按位异或非(按位同或)将操作数按位对应,进行逻辑运算。将操作数按位对应,进行逻辑运算。两个不同长度的数据进行位运算时,按右对齐,位数少两个不同长度的数据进行位运算时,按右对齐,位数少 的在高位补的在高位补“0”。注意注意 x 对运算结果的影响对运算结果的影响位运算符应用举例:位运

50、算符应用举例: 若若 A = 5B11001, B = 5b101x1 , 则则 A = 5b00110 A & B = 5b10001 AB = 5b111x1 A B = 5b011x0关关 系系 运运 算算 符符 小于小于 小于或等于小于或等于 大于大于 大于或等于大于或等于 比较两个操作数的大小关系,如果比较关系成立,则比较两个操作数的大小关系,如果比较关系成立,则返回逻辑返回逻辑“1”;否则,返回逻辑;否则,返回逻辑“0” 。如果两个操作数。如果两个操作数中有一个为中有一个为 x,则返回值是,则返回值是 x。例:例:A = 2 , B = 5 , D = 4hx则:则:A B 返回逻

51、辑返回逻辑“0” B 逻辑右移逻辑右移 n 或或 A 2 的结果是的结果是 6b001100 A 2 的结果是的结果是 6b001000条条 件件 运运 算算 符符 ? : 三目运算符三目运算符应用方式应用方式 signal = condition ? true-expression : false-expression;信号信号 = 条件条件 ?表达式表达式1 : 表达式表达式2 ;当条件成立时,信号取表达当条件成立时,信号取表达式式1的值,反之取表达式的值,反之取表达式2 的值。的值。条件运算符举例条件运算符举例 module add_subtract ( a , b , op , res

52、ult ) ; parameter ADD = 1b0 ; /定义字符常量定义字符常量 input 3 : 0 a , b ; /定义定义a,b为为4位输入向量位输入向量 input op ; /定义定义op为为1位输入变量位输入变量 output 3 : 0 result ; /定义定义result为为4位输出向量位输出向量 assign result = (op = ADD ) ? a + b : a - b ; endmodule 当当op为为0,做,做a+b当当op为为1,做,做a-b拼拼 接接 运运 算算 符符 将两个或多个信号的某些位拼接起来。将两个或多个信号的某些位拼接起来。用法

53、如下:用法如下: 信号信号1的某几位,信号的某几位,信号2的某几位,的某几位, 信号信号n的某几位的某几位 示例:示例:a = 1b1 b = 2b00 c = 6b101001则:则: a , b 产生一个产生一个3位数位数 3b100 c 5:3 ,a 产生一个产生一个4位数位数 4b1011 嵌套使用,进行常量或变量的复制以及简化书写。嵌套使用,进行常量或变量的复制以及简化书写。例如:例如: 3 a , b 等同于等同于 a , b , a , b , a , b 也等同于也等同于 a , b , a , b , a , b 七七.运算符的优先级运算符的优先级运算符运算符优先级优先级!

54、高高低低* * / % / %+ = != = !=& & | |&|?: 不同的综合开发工具不同的综合开发工具在执行这些优先级时会有在执行这些优先级时会有微小的差异,建议养成用微小的差异,建议养成用括号控制优先级的习惯。括号控制优先级的习惯。第二节第二节 Verilog HDL的行为描述模块的行为描述模块一一.行为描述行为描述 逻辑电路的结构描述侧重于表示一个电路由哪些基本元逻辑电路的结构描述侧重于表示一个电路由哪些基本元件组成,以及这些基本元件的相互连接关系。件组成,以及这些基本元件的相互连接关系。 逻辑电路的数据流描述侧重于逻辑表达式以及逻辑电路的数据流描述侧重于逻辑表达式以及Veril

55、og HDL中运算符的灵活运用。中运算符的灵活运用。 行为描述关注逻辑电路输入、输出的因果关系(行为特行为描述关注逻辑电路输入、输出的因果关系(行为特性),即在何种输入条件下,产生何种输出(操作),并不性),即在何种输入条件下,产生何种输出(操作),并不关心电路的内部结构。关心电路的内部结构。EDA的综合工具能自动将行为描述转的综合工具能自动将行为描述转换成电路结构,形成网表文件。换成电路结构,形成网表文件。 显然,当电路的规模较大或时序关系较复杂时,通常采显然,当电路的规模较大或时序关系较复杂时,通常采用行为描述方式进行设计。用行为描述方式进行设计。二二. Verilog HDL行为描述模块

56、的设计模型行为描述模块的设计模型Verilog 行为描述行为描述模块基本模块基本结构结构module 模块名模块名 (端口列表)(端口列表);端口定义端口定义input 输入端口输入端口 output 输出端口输出端口数据类型说明数据类型说明 reg parameter逻辑功能定义逻辑功能定义always (敏感事件列表敏感事件列表)begin阻塞、非阻塞、阻塞、非阻塞、if-else、case、for等行为语句等行为语句endendmodule三三.行为描述中的行为描述中的 always进程进程应用模板应用模板always ( ) begin /过程赋值语句过程赋值语句 /if-else,

57、case, casex, casez选择语句选择语句 /for循环语句循环语句 end 一般情况下,一般情况下,always进程带有触发条件,这些触发条进程带有触发条件,这些触发条件列在敏感信号表达式中,只有当触发条件满足时,件列在敏感信号表达式中,只有当触发条件满足时,begin-end块语句才被执行。块语句才被执行。 在一个在一个Verilog HDL模块中可以有多个模块中可以有多个always进程,进程,它们是并发执行的。它们是并发执行的。 敏感信号表达式敏感信号表达式 又称敏感事件列表。当该表达式中任意一个信号(变量)又称敏感事件列表。当该表达式中任意一个信号(变量)的值改变时,就会引

58、发块内语句的执行。因此,应将所有影响的值改变时,就会引发块内语句的执行。因此,应将所有影响块内取值的信号(变量)列入。多个敏感信号用块内取值的信号(变量)列入。多个敏感信号用“or”或或“,”连接。连接。例如:例如: ( a ) /当信号当信号a的值发生改变时的值发生改变时 (a , b) /当信号当信号a或信号或信号b的值发生改变时的值发生改变时 这里这里a和和b称为电平敏感型信号,称为电平敏感型信号,代表的触发事件是,信代表的触发事件是,信号除了保持稳定状态以外的任意一种变化过程。号除了保持稳定状态以外的任意一种变化过程。 这种这种电平敏感型信号列表电平敏感型信号列表常用在组合逻辑的描述中

59、,以常用在组合逻辑的描述中,以体现输入随时影响输出的组合逻辑特性。体现输入随时影响输出的组合逻辑特性。 再例如:再例如: ( posedge clock ) /当当clock的上升沿到来时的上升沿到来时 ( negedge clock ) /当当clock的下降沿到来时的下降沿到来时 ( posedge clock or negedge reset ) /当当clock的上升沿到来或当的上升沿到来或当reset的下降沿到来时的下降沿到来时 这里的这里的clock和和reset信号称为边沿敏感型信号,信号称为边沿敏感型信号,posedge描述对信号的上升沿敏感;描述对信号的上升沿敏感;negedge描述对信号的下降沿敏感。描述对信号的下降沿敏感。显然,这种显然,这种边沿敏感型信号列表边沿敏感型信号列表适合描述同步时序电路,以体适合描述同步时序电路,以体现同步时序电路的特点现同步时序电路的特点在统一时钟作用下改变电路的状态。在统一时钟作用下改变电路的状态。 posedge 代表的触发事件是,代表的触发事件是, 信号发生了正跳变。信号发生了正跳变。 0 x , 0z , 01 , x1 , z1negedge 代表的触发事件是,代表的触发事件是, 信号发生了负跳变。信号发生了负跳变。 1x , 1z , 10 , x0 , z0 在每一个在每一个always过程语句中,最好只使用一

温馨提示

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

评论

0/150

提交评论