
《FPGA设计基础及VerilogHDL语言介绍》由会员分享,可在线阅读,更多相关《FPGA设计基础及VerilogHDL语言介绍(187页珍藏版)》请在文档大全上搜索。
1、FPGAFPGA设计基础及设计基础及VerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验FPGA实验板实验板FPGAFPGA设计基础及设计基础及VerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验课程安排课程安排第第1章:章:A/D与与D/A第第2章:章:FPGA设计基础(设计基础(Quartus II软件介绍)软件介绍)第第3章:章:Verilog HDL语言介绍语言介绍第第4章:基于章:基于FPGA的数码管显示的数码管显示第第5章:基于章:基于FPGA的液晶显示的液晶显示第第6章:基于章:基于FPGA的大的大LED点阵点阵第第7章:基于章:基于FPGA的
2、的VGA显示显示FPGAFPGA设计基础及设计基础及VerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验本次本次实验内容实验内容1.分频器的代码实现和仿真;分频器的代码实现和仿真;加分题:十分之一分频器代码实现和仿真;加分题:十分之一分频器代码实现和仿真;2.与,或,非逻辑的代码实现和仿真;与,或,非逻辑的代码实现和仿真;加分题:数字逻辑器件的代码实现和仿真,例如三加分题:数字逻辑器件的代码实现和仿真,例如三八译码器;八译码器;FPGAFPGA设计基础及设计基础及VerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验下次下次实验内容实验内容1. 任意偶次分频器
3、的实现和仿真;任意偶次分频器的实现和仿真;加分题:递增,递减计数器的实现和仿真;加分题:递增,递减计数器的实现和仿真;2.学会学会LED源代码程序编译,下载,管脚分配;源代码程序编译,下载,管脚分配;加分题:实现各种不同效果的流水灯;加分题:实现各种不同效果的流水灯;FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验FPGAFPGA设计基础设计基础FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验提提 要要q1.可编程逻辑器件概述q2.可编程逻辑器件的结构及原理q3. FPGA特点q4. FPGA设计语言q5. FPGA设计流程q6. FPGA厂商及开发环境q7
4、. Quartus II开发软件使用FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验1 1 可编程逻辑器件概述可编程逻辑器件概述 可编程逻辑器件可编程逻辑器件(Programmable Logic Device简称简称 PLD)是是20世纪世纪70年代发展起来的一种新型逻辑器件,是目前数字系统年代发展起来的一种新型逻辑器件,是目前数字系统设计的主要硬件基础。设计的主要硬件基础。 现场可编程逻辑阵列 FPLA(Field Programmable Logic Array) 可编程阵列逻辑 PAL(Programmable Array Logic) 通用阵列逻辑 GAL(Gene
5、ric Array Logic) 可擦除的可编程逻辑器件EPLD(Erasable Programmable Logic Device) 复杂可编程逻辑器件CPLD(Complex Programmable Logic Device) 现场可编程门阵列 FPGA(Field Programmable Gate Array)FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验1 1 可编程逻辑器件概述可编程逻辑器件概述 分类分类(1)(1)熔丝或反熔丝编程器件熔丝或反熔丝编程器件Actel的的FPGA器件器件 体积小,集成度高,速度高,易加密,抗干扰,耐高温 只能一次编程,在设计初
6、期阶段不灵活SRAM大多数公司的大多数公司的FPGA器件器件 可反复编程,实现系统功能的动态重构 每次上电需重新下载,实际应用时需外挂EEPROM用于保存程序EEPROM大多数大多数CPLD器件器件 可反复编程 不用每次上电重新下载,但相对速度慢,功耗较大FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验1 1 可编程逻辑器件概述可编程逻辑器件概述 分类分类(2)(2)低密度低密度 PROM,EPROM,EEPROM,PAL,PLA,GAL 只能完成较小规模的逻辑电路高密度,已经有超过高密度,已经有超过400万门的器件万门的器件 EPLD ,CPLD,FPGA 可用于设计大规模
7、的数字系统集成度高,甚至可以做到SOC(System On a Chip)FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验CPLD与FPGA的区别CPLDFPGA内部结构内部结构ProducttermLookup Table程序存储程序存储内部内部EEPROMSRAM,外挂,外挂EEPROM资源类型资源类型组合电路资源丰富组合电路资源丰富触发器资源丰富触发器资源丰富集成度集成度低低高高使用场合使用场合完成控制逻辑完成控制逻辑能完成比较复杂的算法能完成比较复杂的算法速度速度慢慢快快其他资源其他资源EAB,锁相环,锁相环保密性保密性可加密可加密一般不能保密一般不能保密FPGAFP
8、GA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理乘积项与门FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理PROM结构
9、结构 与阵列固定,或阵列可编程; 实现以“积之和”形式表示的各种组合逻辑编程编程连接点连接点固定固定连接点连接点FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理PLA结构结构与阵列或阵列均可编程;PLA的内部结构在简单PLD中有最高的灵活性FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理PAL结构结构与阵列可编程,或阵列固定;与阵列可编程使输入项增多,或阵列固定使器件简化。或阵列固定明显影响了器件编程的灵活性FPGAFPGA设计基础设计基础 显示驱动技术实
10、验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理GAL结构结构用可编程的输出逻辑宏单元(OLMC)代替固定的或阵列,可以实现时序电路;OLMCFPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理GAL结构结构(OLMC)输出使能选择输出选择或门控制选择组成:异或门:控制输出信号的极性D触发器:适合设计时序电路4个多路选择器FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验2 2 可编程逻辑器件结构原理可编程逻辑器件结构原理CPLDFPGA的结构的结构基于乘积项:基于乘积项: Altera的M
11、AX7000,MAX3000系列, Xilinx的XC9500系列 Lattice,Cypress的大部分产品基于查找表:基于查找表:Altera的FLEX, ACEX, APEX 系列, Xilinx的Spartan,Virtex系列。 FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验可编程逻辑阵列模块LAB,包含多个宏单元可编程I/O单元可编程连线PIA基于乘积项的基于乘积项的CPLDCPLD内部结构内部结构FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验LABLAB中的宏单元结构中的宏单元结构乘积项逻辑阵列乘积项选择矩阵可编程触发器FPGAFPGA设计
12、基础设计基础 显示驱动技术实验显示驱动技术实验基于查找表的基于查找表的FPGAFPGA内部结构内部结构C C可编程逻辑模块可编程逻辑模块(CLB),含多个逻辑含多个逻辑单元单元可编程输入输出模可编程输入输出模块(块(IOB)可编程内部连线可编程内部连线(PIC)FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验基于查找表(LUT)的FPGA的结构xilinx Spartan-II的内部结构FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验CLBCLB中逻辑单元内部结构中逻辑单元内部结构FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验查找表查找表
13、LUTLUT原理原理FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验3 FPGA特点特点逻辑器件:用来实现某种特定逻辑功能的电子器件,最简单的逻辑器件:用来实现某种特定逻辑功能的电子器件,最简单的逻辑器件是与、或、非门(逻辑器件是与、或、非门(74LS0074LS00,74LS0474LS04等),在此基础上等),在此基础上可实现复杂的时序和组合逻辑功能。可实现复杂的时序和组合逻辑功能。可编程逻辑器件:器件的功能不是固定不变的,而是可根据用可编程逻辑器件:器件的功能不是固定不变的,而是可根据用户的需要而进行改变,即由编程的方法来确定器件的逻辑功能。户的需要而进行改变,即由编程
14、的方法来确定器件的逻辑功能。配置数据可以存放在片外的配置数据可以存放在片外的EPROMEPROM或其它存储体上,可现场修或其它存储体上,可现场修改器件的逻辑功能。改器件的逻辑功能。电路集成度高电路集成度高用硬件描述语言(用硬件描述语言(Hardware Description LanguageHardware Description Language)代替传)代替传统的数字电路设计方法来设计数字系统。统的数字电路设计方法来设计数字系统。FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验3 FPGA3 FPGA特点特点EP1C12Q240FPGAFPGA设计基础设计基础 显示驱动
15、技术实验显示驱动技术实验4 FPGA设计语言设计语言l HDL语言是一种硬件描述语言,最终目的是生成实际数字逻辑电路,完成一个从抽象化的代码到形象化的电路的转变。 电路设计大规模和高复杂度发展的趋势,传统的用原理图设计电路的方法无法胜任,如何使如此复杂的芯片变得易于人脑的理解呢?用一种高级语言来表达其功能性而隐藏具体实现的细节是很必要的,工程人员将不得不使用HDL语言进行设计,而把具体实现留给逻辑综合工具去完成。l Verilog HDLl VHDL硬件描述语言硬件描述语言HDL(Hardware Description Language)FPGAFPGA设计基础设计基础 显示驱动技术实验显示
16、驱动技术实验4 FPGA4 FPGA设计语言设计语言HDLHDL语言特点语言特点l HDL语言既包含一些高层程序设计语言的结构形式同时也兼顾描述硬件线路连接的具体结构;l 通过使用结构级或行为级描述可以在不同的抽象层次描述设计。 语言采用自顶向下的数字电路设计方法,主要包括三个领域五个抽象层次如表所示FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验4 FPGA4 FPGA设计语言设计语言HDLHDL语言特点语言特点l HDL语言是并发的,即具有在同一时刻执行多任务的能力。一般编程语言是非并行的但在实际硬件中许多操作都是在同一时刻发生的,所以HDL语言具有并发的特征;l HDL
17、语言有时序的概念,一般编程语言是没有时序概念的,但在硬件电路中从输入到输出总是有延迟存在的,为描述这些特征,HDL语言需要建立时序的概念。因此,使用HDL除了可以描述硬件电路的功能外还可以描述其时序要求;FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验4 FPGA4 FPGA设计语言设计语言l由于Verilog HDL早在1983年就已推出至今已有十三年的历史,因而拥有广泛的设计群体,成熟的资源比VHDL丰富。l 目前版本的Verilog HDL和VHDL在行为级抽象建模的覆盖范围方面也有所不同,一般认为VHDL在系统抽象方面比Verilog HDL强一些,Verilog H
18、DL较为适合算法级、寄存器传输级、逻辑级、门级等的设计,而VHDL更为适合大型的系统级设计。Verilog HDL与与VHDL比较比较用两种语言设计同一个计数器FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验4 FPGA设计语言设计语言VHDLlibrary ieee;use ieee.std_logic_1164.alluse ieee.std_logic_unsigned.allentity counter isport ( clk,clr: in std_logic;qout: in std_logic_vector(3 downto 0);architecture a
19、 of counter is signal qout_temp:std_logic_vector(3 downto 0);beginqout=qout_temp;process(clk)beginif clr=1 then qout_temp=“0000”;else qout_temp= qout_temp+“0001”;end ifend process;end a; FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验4 FPGA设计语言设计语言Verilog HDLmodule counter (clk,clr,qout);input clk, clr;output 3:0
20、qout;reg3:0qout;always (posedgeclk)if (clr)qout=0;elseqout=qout+1;endmoduleFPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验4 FPGA4 FPGA设计语言设计语言顶层模块子模块A子模块B子模块C模块化的逻辑电路I/OFPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验/状态图状态图5 FPGA设计的一般流程实现实现FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验5.1 设计准备方案论证,器件选择方案论证,
21、器件选择根据系统的功能和复杂度,对工作速度和器根据系统的功能和复杂度,对工作速度和器件本身的资源、成本及连线的可布性等方面进行权件本身的资源、成本及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。衡,选择合适的设计方案和合适的器件类型。FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验5.2 设计输入原理图输入原理图输入HDL(硬件描述语言)输入(硬件描述语言)输入状态图输入状态图输入波形输入波形输入FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验5.2.1 5.2.1 原理图输入方式原理图输入方式原理图输入方式是一种最直接的设计描述方式,原理
22、图输入方式是一种最直接的设计描述方式,要设计什么,就从软件系统提供的元件库中调出要设计什么,就从软件系统提供的元件库中调出来,画出原理图。来,画出原理图。 优点是容易实现仿真,便于信号的观察和电路的调整; 缺点是效率低,特别是产品有所改动,需要选用另外一个公司的PLD器件时,就需要重新输入原理图FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验5.2.2 HDL输入方式输入方式硬件描述语言是用文本方式描述设计(普通硬件描述语言和行为描述语硬件描述语言是用文本方式描述设计(普通硬件描述语言和行为描述语言)。言)。普通硬件描述语言有普通硬件描述语言有ABEL、CUR和和LFM等,它
23、们支持逻辑方程、真值等,它们支持逻辑方程、真值表、状态机等逻辑表达方式,主要用于简单表、状态机等逻辑表达方式,主要用于简单PLD的设计输入。的设计输入。行为描述语言是目前常用的高层硬件描述语言,主要有行为描述语言是目前常用的高层硬件描述语言,主要有VHDL和和 Verilog HDL两个两个IEEE标准。标准。 语言与工艺的无关性,可以使设计人员在系统设计、逻辑验证阶段便确立方案的可行性; 语言的公开可利用性,便于实现大规模系统的设计; 具有很强的逻辑描述和仿真功能,而且输入效率高,在不同的设计输入库之间的转换非常方便,用不着对底层的电路和PLD结构的熟悉。 FPGAFPGA设计基础设计基础
24、显示驱动技术实验显示驱动技术实验5.2.3 5.2.3 波形输入方式波形输入方式波形输入方式主要是用来建立和编辑波形设波形输入方式主要是用来建立和编辑波形设计文件,用于输入仿真向量和功能测试向量。计文件,用于输入仿真向量和功能测试向量。波形设计输入适用于时序逻辑和有重复性的波形设计输入适用于时序逻辑和有重复性的逻辑函数。逻辑函数。FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验5.3 功能仿真验证逻辑功能的正确性,不加入任何硬延时信息。验证逻辑功能的正确性,不加入任何硬延时信息。仿真前,要先利用波形编辑器和硬件描述语言等建立仿真前,要先利用波形编辑器和硬件描述语言等建立波形文
25、件和测试向量波形文件和测试向量仿真结果将会生成报告文件和输出信号波形,从中便仿真结果将会生成报告文件和输出信号波形,从中便可以观察到各个节点的信号变化。如果发现错误,则可以观察到各个节点的信号变化。如果发现错误,则返回设计输入中修改逻辑设计。返回设计输入中修改逻辑设计。FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验功能仿真:验证逻辑功能的正确性,不加入任何硬件延时等信息。测试波形被测电路检查输出输入信号输出波形FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验5.4 设计实现 设计处理是器件设计中的核心环节。在设计处设计处理是器件设计中的核心环节。在设计处理
26、过程中,编译软件将对设计输入文件进行规则理过程中,编译软件将对设计输入文件进行规则检查、逻辑优化综合、适配和分割检查、逻辑优化综合、适配和分割(映射映射)、布局、布局布线等,最后产生编程用的编程文件。布线等,最后产生编程用的编程文件。 FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验5.4.1 5.4.1 逻辑优化和综合逻辑优化和综合化简所有的逻辑方程或用户自建的宏,使设化简所有的逻辑方程或用户自建的宏,使设计所占用的资源最少。综合的目的是将多个计所占用的资源最少。综合的目的是将多个模块化设计文件合并为一个网表文件,并使模块化设计文件合并为一个网表文件,并使层次设计平面化。层
27、次设计平面化。 FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验综合:将抽象的HDL代码转换成具体的逻辑电路原理图。With sel selectDin =A when 1, B when others;process (clk ,rst) begin if rst=0 then D_out = 0; else D_out Simulator ToolFPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验选择仿真类型选择仿真类型(Functional),(Functional),并创建功并创建功能仿真网表能仿真网表( (点击绿色荐头所指按钮点击绿色荐头所指按钮)
28、)此处应为刚此处应为刚才保存的波才保存的波形文件形文件功能仿真功能仿真FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验网表创建完后点击网表创建完后点击StartStart运行运行, ,运运行完成后关闭此窗口行完成后关闭此窗口. .功能仿真功能仿真FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验点击此处点击此处, ,开始仿真开始仿真功能仿真功能仿真FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验运行结束后会弹出功能仿真的波形报告,观察仿真波形并验证FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验在菜单中选择Tools-Sim
29、ulator Tool弹出下面的窗口,改变仿真类型(选Timing),点击Start运行.运行结束后,关闭该窗口.时序仿真时序仿真FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验时序仿真时序仿真点击此处点击此处, ,开始时序仿真开始时序仿真FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验得到时序仿真波形.比较时序仿真的波形和功能仿真波形有什么不同比较时序仿真的波形和功能仿真波形有什么不同FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验应用举例:流水灯及下载应用举例:流水灯及下载开发板使用共阴极接法:开发板使用共阴极接法:FPGAFPGA设计
30、基础设计基础 显示驱动技术实验显示驱动技术实验程序简介:端口定义程序简介:端口定义module led_run(mclk,led);input mclk;output 7:0 led;reg 7:0 led;reg 22:0 count;reg 2:0 state;wire clk;FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验分频器分频器always (posedge mclk)count=count+1;assign clk=count22;/取计数器最高位做低频时取计数器最高位做低频时钟钟说明:说明:mclk是是FPGA的输入时钟,采用的输入时钟,采用50M有源晶有源
31、晶振。振。请问:这是多少分频?请问:这是多少分频?FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验程序主体:花色流水灯程序主体:花色流水灯always (posedge clk)begincase(state)3b000:begin led=8b10000001;state=state+1;end3b001:begin led=8b01000010;state=state+1;end3b010:begin led=8b00100100;state=state+1;end3b011: begin led=8b00011000;state=state+1;end3b100:beg
32、in led=8b00011000;state=state+1;end3b101:begin led=8b00100100;state=state+1;end3b110: begin led=8b01000010;state=state+1;end3b111: begin led=8b10000001;state=state+1;endendcaseendendmoduleFPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验然后管脚分配,编译,仿真,下载然后管脚分配,编译,仿真,下载仿真不是必须的。仿真不是必须的。下载程序可看到物理效果。下载程序可看到物理效果。下载分两种:仿真器
33、的接口不同!下载分两种:仿真器的接口不同!JTAG下载下载:程序放在程序放在ram中运行中运行AS下载:程序烧写到下载:程序烧写到flash里面运行里面运行FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验管脚分配管脚分配FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验根据原理图管脚分配根据原理图管脚分配主时钟:主时钟:50M晶振提供晶振提供复位及复位及8个灯的电路个灯的电路FPGAFPGA设计基础设计基础 显示驱动技术实验显示驱动技术实验应用举例:流水灯及下载应用举例:流水灯及下载开发板使用共阴极接法:开发板使用共阴极接法:VerilogHDLVerilog
34、HDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验VerilogHDLVerilogHDL语言介绍语言介绍VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验 Verilog HDL是使用广泛的硬件描述语言,是使用广泛的硬件描述语言,该语言的特点是语言能力强,代码简单。有该语言的特点是语言能力强,代码简单。有大量支持仿真的语句与可综合语句,对于初大量支持仿真的语句与可综合语句,对于初学者设计简单的数字系统,重点是利用该语学者设计简单的数字系统,重点是利用该语言中的可综合语句正确设计数字系统。该语言中的可综合语句正确设计数字系统。该语言很多规定与言很多
35、规定与C语言相似。语言相似。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验Verilog HDL语言的基本结构Verilog HDL语言基础Verilog HDL中的结构描述Verilog HDL数据流描述Verilog HDL行为描述Verilog HDL语言中的分支语句基于Verilog HDL语言的组合逻辑电路设计基于Verilog HDL语言的时序电路设计VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验1.1 Verilog HDL语言的模块结构语言的模块结构 Verilog HDL语言以模块(语言以
36、模块(module)的形式来描述)的形式来描述数字电路,其中每一个模块都有接口部分用来描述与数字电路,其中每一个模块都有接口部分用来描述与其它模块之间的连接,一个文件就是一个模块。其它模块之间的连接,一个文件就是一个模块。 模块的定义从关键词模块的定义从关键词module开始,到关键字开始,到关键字endmodule结束,每条结束,每条Verilog HDL语句以分号语句以分号;作为结束(块语句、编译向导语句,作为结束(块语句、编译向导语句,endmodule等少等少数语句除外)。数语句除外)。1 Verilog HDL语言的基本结构语言的基本结构VerilogHDLVerilogHDL语言介
37、绍语言介绍 显示驱动技术实验显示驱动技术实验例1 与非门的Verilog描述module NAND(in1,in2,out) input in1,in2; /端口类型定义端口类型定义 output out; /端口类型定义端口类型定义 /wire in1,in2,out; /由于是由于是1 1位连线类型,位连线类型,所以可以采用所以可以采用缺省定义,此语句可省略缺省定义,此语句可省略 assign out=(in1&in2);endmoduleVerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验 例例2 具有数据输入端具有数据输入端d的的D触发器触发器。m
38、odule dff (q,d , clk); /*模块开始,q是寄存器输出,d是寄存器的数据端输入,clk是寄存器时钟*/ output q; /定义输出量q input d, clk; /定义输入量d,clk reg q; /对q进行进一步数据类型说明,表明q是寄存器型 always (posedge clk) /当上升沿到来的时候执行如下语句 begin q = d; /q等于d,这是D触发器的特性方程 end endmodule /模块结束VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验1.2 Verilog HDL语言中的描述方法语言中的描述方
39、法 Verilog HDL语言具有三种描述方法:1. 1. 结构型描述结构型描述 该描述是用Verilog HDL中预定义的基本逻辑单元(逻辑门)描述数字电路。abseloutnet1net2net3.VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验例3 2选1选择器结构图如上图所示,其Verilog HDL的描述如下:module mux (out,a,b,sel); output out;input a,b,sel; not (net1,sel); / 非门 and (net2,a,net1); /与门 and (net3,b,sel); /与门
40、or (out,net2,net3); /或门endmoduleVerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验2. 数据流型描述数据流型描述 数据流型描述是一种描述组合功能的方法,用数据流型描述是一种描述组合功能的方法,用Verilog HDL中的连续赋值语句中的连续赋值语句assign来实现,连续赋来实现,连续赋值语句持续监视等式右边的所有变量,每当这些变量值语句持续监视等式右边的所有变量,每当这些变量中有任何一个发生变化时,整个表达式被重新赋值,中有任何一个发生变化时,整个表达式被重新赋值,并赋予等式左边,这种描述方法只能用来描述组合电并赋予等式
41、左边,这种描述方法只能用来描述组合电路功能。路功能。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验例例4 二选一多路选择电路的数据流型描述。二选一多路选择电路的数据流型描述。 module mux1 (out,a,b,sel); /模块开始模块开始 output out; input a,b,sel; assign out=(sel=0)? a : b; /类似于类似于C C语言中的问号语句语言中的问号语句 endmoduleVerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验3. 行为型描述行为型描述 行为型描
42、述是一种使用高级语言的方法描述数字电路,关键行为型描述是一种使用高级语言的方法描述数字电路,关键词是(词是(always)。)。 例例5 二选一多路选择电路的行为型描述程序。二选一多路选择电路的行为型描述程序。module mux2 (out,sel,b,c);output out;input sel, b,c;reg out;always(sel or b or c) /always语句,括号中的是敏感信号语句,括号中的是敏感信号if(sel=1) /类似于类似于C语言中的语言中的if语句语句out=b;elseout=c;endmoduleVerilogHDLVerilogHDL语言介绍语
43、言介绍 显示驱动技术实验显示驱动技术实验 2.1 Verilog HDL中的基本约定中的基本约定 1. 注释行注释行 Verilog HDL中注释行的定义与C语言一样。 2. 逻辑状态逻辑状态 0 表示逻辑0、逻辑非、低电平、假。 1 表示逻辑1、逻辑真、高电平、真。 x或X 表示不确定的逻辑状态。 z或Z 表示高阻态。 这些逻辑状态都可以用在描述语句中。2 Verilog HDL语言基础语言基础VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验3. 整数及其表示整数及其表示整数可以按照简单十进制数格式或基数格式书写。整数可以按照简单十进制数格式或基数格
44、式书写。(1)简单十进制数)简单十进制数 简单十进制数的整数表示与普通十进制数表示相同,例如,简单十进制数的整数表示与普通十进制数表示相同,例如,35、-46。(2)基数表示法)基数表示法 表示格式:表示格式:+/- 其中:其中: +/-是符号位是符号位 位宽就是数的等效二进制数的位数(位宽就是数的等效二进制数的位数(bit),位宽用十进制数表示。),位宽用十进制数表示。 二进制的基数符号位二进制的基数符号位b或或B。 八进制的基数符号是八进制的基数符号是o或或O。 十进制的基数符号是十进制的基数符号是d或或D,可缺省不写基数符号。,可缺省不写基数符号。 十六进制的基数符号是十六进制的基数符号
45、是h或或H。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验(1)数值中,左边是数值最高位(MSB Most Significant Bit),右边是最低有效位(LSB Least Significant Bit)。(2)在二进制中,x、z只代表相应位的逻辑状态。x表示不定,z表示高阻(3)当位宽缺省时,位宽为32位。例如: 3b000 位宽为3的二进制数 res = 8b11111110 res是8位二进制数 1b1 位宽为1的二进制数 9o671 位宽为9的八进制数 8h3f 位宽8的十六进制数VerilogHDLVerilogHDL语言介绍语言介
46、绍 显示驱动技术实验显示驱动技术实验4. 标识符取名 (1)必须是字母或下划线开头,长度小于)必须是字母或下划线开头,长度小于1024。 (2)后续部分可以是字母、数字或下划线。)后续部分可以是字母、数字或下划线。 (3)Verilog HDL中的标识符区分大小写。中的标识符区分大小写。 例如,例如,_bus,topp,BUS。5. 系统命令 以以$开头的标识符代表开头的标识符代表Verilog HDL中的命令(系统任务与系统函中的命令(系统任务与系统函数),普通的标识符不能以数),普通的标识符不能以$开头。开头。6. 保留字 Verilog HDL语言内部已经使用的保留字语言内部已经使用的保
47、留字 VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验2.2 数据类型数据类型 Verilog HDL中总共有19种数据类型,其中4 种最基本的数据类型是:整形(integer)、参数(parameter)型、寄存器(reg)型和连线(wire)型。 连线类型(又称为线网类型)与寄存器类型是Verilog中的主要数据类型,这两种类型在驱动方式(赋值)、保持方式和相应的硬件实现方式三方面不同。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验连线类型连线类型说明可综合的连线类型不能综合的连线类型连线功能wire,t
48、ri 标准连线(缺省)wor,trior多重驱动时,具有线或功能wand,triand多重驱动时,具有线与功能 trireg具有电荷保持功能的连线 tri1上拉电阻,无驱动时为1 tri0下拉电阻,无驱动时为0supply1 电源线,逻辑1supply0 地线,逻辑0VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验(1)不能综合的意思就是不能用来设计数字电路,只能用于软件仿真或是编写激励信号。(2)连线类型的逻辑状态为0、1、x(任意)、z(高阻)(3)在Verilog HDL中,连线类型主要用在模块的结构描述中,对应硬件的物理信号连接,当用数字表示其
49、逻辑值时,不存在符号位。(4)在对连线类型进行描述时,必须用连线类型定义语句进行类型说明,当说明被省略时,表示位宽为1bit的wire型连线。wire是基本的、不附带其它功能的连线,也是最常用的连线类型。(5)tri与wire在Verilog HDL中功能完全一样,差别是名称写法不一样。 VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验连线类型定义格式: 范围 时间延迟 , 连线名; 其中范围为矢量范围,以MSB:LSB格式描述,时间延迟只用于仿真中定义连线类型时用。例如: wire 0: 31 w1, w2; / w1/ w1和和w2w2是是3232
50、位连线类型,高位位连线类型,高位MSBMSB为为bit0bit0 wire 7:0 tmp; /tmp为为8位连线,高位位连线,高位MSB为为bit7,低位,低位LSB是是位位0VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验2. 2. 寄存器类型寄存器类型 寄 存 器 类寄 存 器 类型型说明说明reg用于行为模型中对寄存器类型的说明,由过程赋值语句赋值,是最常用的寄存器类型integer32位带符号整数,通常用作不会由硬件实现的数据处理。real64位浮点、双精度、带符号实型变量,通常用作不会由硬件实现的数据处理。time64位无符号时间变量,用于
51、仿真时间的保存与处理VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验一些说明:(1)所有寄存器类的信号,都可以保存数据,在接受下一)所有寄存器类的信号,都可以保存数据,在接受下一次赋值前,数据保持不变。次赋值前,数据保持不变。(2)寄存器类型必须给出类型说明(无缺省状态)。)寄存器类型必须给出类型说明(无缺省状态)。(3)寄存器类型的信号,必须通过过程赋值语句进行赋值,)寄存器类型的信号,必须通过过程赋值语句进行赋值,只能出现在只能出现在initial或或always后面的过程语句中。后面的过程语句中。(4)除了)除了reg类型以外,其它三种类型以外,
52、其它三种integer、real、time只有只有抽象意义,不能综合。抽象意义,不能综合。在对模块的行为描述中,在对模块的行为描述中,reg的引入,通常说明模块中有触的引入,通常说明模块中有触发器或锁存器。发器或锁存器。 VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验寄存器变量的定义格式:寄存器变量的定义格式: 范围范围 ,寄存器名,寄存器名;其中范围为矢量范围,以MSB:LSB格式描述。例如:例如: reg a; /a为寄存器类型为寄存器类型 reg 3: 0 v; / v为为4位寄存器向量类型位寄存器向量类型 reg 7: 0 m, n; /m和
53、和n为为8位寄存器类型位寄存器类型VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验3. 标量与矢量 在Verilog HDL中,线宽为一位的连线和只有一位的寄存器变量称为标量;线宽大于一位的连线和位宽大于一位的寄存器变量为矢量,对矢量进行说明时,矢量的范围由括在中括号中的一对数字表示,中间用冒号相隔:MSB:LSB 用于矢量范围说明的数字可以是任意整数,但是左边为最高有效位(MSB),右边为最低位(LSB)。例如,reg7:0 reg_a ; / 8位寄存器变量 reg_a wire7:0 bus_a,bus_b ;/线宽为8位的一组线 wire a,
54、b; /线宽为1位的连线,该说明可以缺省 reg a,b,c; /位宽为1位的寄存器VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验4. 标量类矢量与矢量类标量 按位或部分位赋值的矢量称为标量类矢量,这相当于多个一位标量的集合,标量类矢量进行类型说明时,需要关键字scalared。 不能按位或部分位赋值的矢量称为矢量类矢量,在进行类型说明时,需要关键字vectored。例如,reg scalared 7:0 reg_a; /reg_a被定义成标量类矢量,该说明可以缺省关键字scalared wire vectored 15:0 bus16;/bus16
55、被定义成矢量类矢量 标量类矢量的说明可以缺省,就是说没有关键字scalared或vectored 的矢量均将被解释成标量类矢量,这是使用最多的一类矢量。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验5. 端口与内部信号 (1)信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。 (2)对于端口信号,输入端口只能是连线类型。输出端口可以是连线(wire)类型,也可以是寄存器(register)类型。若输出端口在过程块中赋值则为register类型;若在过程块外赋值,则为wire类型。 (3)内部信号类型与输出端口相同
56、,可以是连线(wire)或寄存器(register)类型。若在过程块(always叙述)中赋值,则为register类型;若在过程块外赋值,则为wire类型。 VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验6. 其他定义语句(1) 参数定义语句参数定义语句经常用于对时延、线宽、寄存器位数等物理量的定义,其方法是用一个文字参数来代替一个数字量,从而增加描述的可读性和可修改性。参数定义的格式: parameter 其中参数定义部分给出具体的各个参数与数字之间的关系,各个关系之间用逗号隔开。 VerilogHDLVerilogHDL语言介绍语言介绍 显示驱
57、动技术实验显示驱动技术实验例如:例如:module module_name( ); parameter msb=7,lsb=0,delay=1; /定定义参数义参数 regmsb:lsb reg_a; /使用参数使用参数 and #delay (x,y,z); . endmoduleVerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验2.3 运算符运算符 Verilog HDL的运算符除没有加1和减1运算符外,其他运算符与C语言很相似。1. 算术运算符(1)加法,实现加法运算,例如a+b。 (2)减法,实现减法运算,例如a-b。当写成-b时,它是单目运算符
58、,表示b 的补码。(3)乘法,实行乘法运算,例如,a*b。(4)除法,实现除法运算,例如,a/b,通常综合工具不支持。(5)取模,实现取模运算,例如,a%b。通常综合工具不支持。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验2. 位运算符位运算符 按位运算的运算符是位运算符,原来的操作数有几位,结果就有几按位运算的运算符是位运算符,原来的操作数有几位,结果就有几位,若两个操作数位数不同,则短的操作数左端会自动补位,若两个操作数位数不同,则短的操作数左端会自动补0处理。处理。(1)按位取反运算符:)按位取反运算符:(2)按位与运算符:)按位与运算符:&
59、(3)按位或运算符:)按位或运算符:|(4)按位异或运算符:)按位异或运算符:(5)按位同或运算符:)按位同或运算符:或或例如,例如,a=b0110, b=b0100 则则a|b=0110, a&b=0100。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验3. 缩位(归约)运算符 缩位运算符是单目运算符,也是按位进行逻辑运算,但是结果是一位逻辑值。例如,对a3,a2,a1,a0进行缩位运算时,先对a3和a2进行缩位运算符指定的运算,产生一位结果,再将这个结果与a1进行缩位运算,然后 在将产生的结果与a0缩位运算,产生最后的结果。(1)与缩位运算符:&
60、(2)或缩位运算符:|(3)异或缩位运算符:(4)与、或、异或缩位运算符和非操作运算符组成的复合运算符:&,|, 例如,a=b0110, b=b0100 则 |b=1, &b=0,|a=0。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验4. 逻辑运算符逻辑运算符(1)逻辑与运算符:)逻辑与运算符:&(2)逻辑或运算符:)逻辑或运算符:|(3)逻辑非运算符:)逻辑非运算符: ! 其中逻辑与和逻辑或为双目运算符,逻辑非为单目运算符。其中逻辑与和逻辑或为双目运算符,逻辑非为单目运算符。 如果操作数是一位的,则如果操作数是一位的,则1代表真值,代表真值,0代
61、表逻辑假。代表逻辑假。 如果操作数是多位的,则将操作数看做整体,如果操作数中每一如果操作数是多位的,则将操作数看做整体,如果操作数中每一位都是位都是0,则具有逻辑,则具有逻辑0值,若其中有一位为值,若其中有一位为1,就把这个操作数看作逻辑,就把这个操作数看作逻辑1值。值。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验5. 关系运算符关系运算符包含:(1)小于:(3)小于等于:= 关系运算符都是双目运算符,用于比较两个操作数的大小,比较结果是1位逻辑值,值1代表关系成立,值0代表比较关系不成立。VerilogHDLVerilogHDL语言介绍语言介绍
62、显示驱动技术实验显示驱动技术实验6. 相等与全等运算符相等与全等运算符(1)相等运算符:)相等运算符:=(2)不等运算符:!)不等运算符:!=(3)全等运算符:)全等运算符:=(4)不全等运算符:!)不全等运算符:!= 这四个运算符都是双目运算符,结果是一位的逻辑值。这四个运算符都是双目运算符,结果是一位的逻辑值。 VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验7. 逻辑移位运算符(1)逻辑左移: 设a是操作对象,n是移位位数,则an表示将a 左移n位。进行移位操作时,用0填补移出的空位。8. 8. 连接运算符连接运算符 该运算符可以将两组信号用大括
63、号括起来,拼接成一个新的信号。例如,a,b,c,3b101,若a,b,c都是一位信号,则该连接运算的结果是6位宽信号。对于一些重复信号,连接运算符有简化表示方法na,例如:4w表示w,w,w,wVerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验例6 使用连接运算符的全加器module addr(sum,co,ci,ina,inb);output 3:0 sum; /4位宽的和input 3:0 ina,inb; /4位宽的加数与被加数output co /1位宽的进位输出input ci; /1位宽的进位输入 assign co,sum=ina+inb+
64、ci; /连接运算endmodule/ * 将 c o 和 s u m 拼 接 成 一 个 新 信 号 为 c o ,sum3,sum2,sum1,sum0. */VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验9. 9. 条件运算符条件运算符 条件运算符是三目运算符,它的格式是: 条件表达式?条件为真时的表达式:条件为假时的表达式例如,assign tri_bus=(drv_enable)?data:16bz;例7 描述三态门 module likebufif( in, en, out); input in; input en; output out
65、; assign out = (en = 1) ? in : bz; /如果en=1,则输出out=in,否则输出out=z。endmoduleVerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验 1. 结构描述方法 Verilog HDL 结构描述只是将图形方式的连接关系转换成文字表达,若是已经有了模块的逻辑图,则可以按照如下步骤将图形转换成Verilog HDL模块。(1)给电路图中的每个输入输出端口命名端口名。(2)给电路图中的内部连线命名连线信号名。(3)给每个逻辑单元命名调用名。(4)命名模块名。(5)书写模块名和输入输出端口,进行端口的类型的说
66、明。(6)依据电路图,描述信号之间的连接关系。3 Verilog HDL中的结构描述中的结构描述VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验2. 模块调用 模块调用是Verilog HDL 结构描述的基本构成方式,一个模块可以调用其它模块,则被调用的模块是底层模块,而调用底层模块的模块是顶层模块。模块调用分为两类:一类是调用基本门,另一类是用户自己写的模块调用。模块调用的格式: 模块名 调用名 (端口名列表)调用时注意端口名列表中端口名的排列顺序、输入输出类型,它们都必须与被调用的模块定义保持一致。(1)位置对应调用法将被调用模块定义时的端口名,对应地用与之相连的信号名代替。(2)端口名对应调用法调用格式: 定义时的端口名(调用时与之相连的信号名)。VerilogHDLVerilogHDL语言介绍语言介绍 显示驱动技术实验显示驱动技术实验模块调用例: 模块中端口名对应方式的例子被调用的低层模块:module cop(out1,out2,in1,in2,in3);output out1,out2;input in1,in2,in3;endmo