FPGA设计复习资料_第1页
FPGA设计复习资料_第2页
FPGA设计复习资料_第3页
FPGA设计复习资料_第4页
FPGA设计复习资料_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

FPGA设计复习资料

目录

零、考试题型:...................................................................4

一、名词概念.....................................................................4

二、VerilogHDL语法的基本概念...................................................9

(一)模块...................................................................9

(-)标识符、转义标识符、关键字、注释、格式..............................10

(三)数据类型及其常量和变量...............................................11

(四)运算符及表达式.......................................................16

(五)赋值语句和块语句.......................................................19

(六)条件语句(iLelse语句)..............................................21

(七)case语句.............................................................22

(八)循环语句.............................................................23

(九)结构说明语句.........................................................24

(十)常用的系统任务.......................................................27

(十一)编译指令...........................................................32

(十二)延时(delay).............................................................................................................35

四、veriloghdl建模方法..........................................................35

(一)数据流描述方式..........................................................35

(二)行为描述方式.........................................................36

(三)结构化描述形式.......................................................37

(四)混合设计描述方式.....................................................39

五、Testbench仿真测试...........................................................39

六、有限状态机..................................................................42

例一:用格雷码.............................................................43

例二、用可综合的Verilog模块设计、用独热码表示状态机......................44

(推荐)例三:用可综合的Verilog模块设计、由输出指定的码表示状态的状态机...44

(推荐)例四、用可综合Verilog模块设计复杂的多输出状态机时常用的方法.....45

七、modelsim简介...............................................................47

八、用Modelsim进行功能仿真和时序仿真.........................................48

九、QuartusII与ModelSim联合仿真..............................................57

十、必须读懂的范例.............................................................60

基本门电路的几种描述方法...................................................60

行为描述的4位全加器.......................................................61

数据流描述的4位全加器.....................................................61

结构描述的4位级连全加器...................................................62

4位全加器的仿真程序........................................................62

行为描述的1位全加器.......................................................63

三态双向驱动器.............................................................63

用assign语句描述的三态门...................................................64

用bufifl关键字描述的三态门.................................................64

用always过程块产生两个时钟信号............................................64

用fork-join并行块产生信号波形...............................................64

用begin-end串行块产生信号波形..............................................65

激励波形的描述.............................................................65

延迟定义块举例.............................................................66

8位加法器的仿真程序........................................................66

8位乘法器的仿真程序........................................................67

基本D触发器...............................................................68

带异步清0、异步置1的D触发器............................................68

带同步清0、同步置1的D触发器............................................68

电平敏感的1位数据锁存器...................................................69

带置位和复位端的1位数据锁存器............................................69

8位数据锁存器..............................................................69

8位数据寄存器..............................................................70

8位移位寄存器..............................................................70

4位计数器..................................................................70

4位计数器的仿真程序........................................................71

可变模加法/减法计数器......................................................71

8位计数器的仿真............................................................72

4位Johnson计数器(异步复位)..............................................72

模为60的BCD码加法计数器.................................................73

阻塞赋值方式定义的2选1多路选择器........................................73

连续赋值方式定义的2选1多路选择器........................................74

2选1多路选择器的仿真.....................................................74

用case语句描述的4选1数据选择器..........................................74

用if-else语句描述的4选1MUX............................................................................................75

同步置数、同步清零的计数器.................................................75

3-8译码器..................................................................76

8-3优先编码器..............................................................76

用函数定义的8-3优先编码器.................................................77

任务举例....................................................................77

同一循环的不同实现方式.....................................................78

用repeat实现8位二进制数的乘法.............................................79

用for语句实现2个8位数相乘...............................................79

用for语句描述的七人投票表决器.............................................80

七段数码管译码器...........................................................80

非流水线方式8位全加器.....................................................81

4级流水方式的8位全加器...................................................81

两个加法器和一个选择器的实现方式..........................................82

奇偶校验位产生器...........................................................83

两个选择器和一个加法器的实现方式..........................................83

十一、综合实验参考程序.........................................................83

状态机设计的例子(略,见上文).............................................83

交通灯控制器...............................................................83

自动转换量程频率计控制器...................................................86

用组合电路实现的ROM............................................................................................................87

256x8RAM模块............................................................88

256x16RAM块.............................................................88

存储器在仿真程序中的应用...................................................89

4位串并转换器..............................................................89

用函数实现简单的处理器.....................................................89

微处理器的测试代码.........................................................90

乘累加器(MAC)代码......................................................91

乘累加器的测试代码.........................................................91

多功能数字钟...............................................................92

电话计费器程序.............................................................96

“梁祝”乐曲演奏电路.......................................................98

零、考试题型:

一、单项选择题(30分,每题2分)

二、EDA名词解释或简答题(10分,每题2分)

三、程序填空题(20分,每空2分)

四、程序改错题(10分)

五、程序设计题(2—3题)(30分)

祝同学们考试顺利!

一\名词概念

1、ASICs:application-specificintegratedcircuits专用集成电路

是指应特定用户要求和特定电子系统的需要而设计、制造的集成电路。ASIC分为全定

制和半定制。

ASIC的特点是面向特定用户的需求,ASIC在批量生产时与通用集成电路相比具有体

积更小、功耗更低、可靠性提高、性能提高、保密性增强、成本降低等优点。全定制设计需

要设计者完成所有电路的设计,因此需要大量人力物力,灵活性好但开发效率低下。如果设

计较为理想,全定制能够比半定制的ASIC芯片运行速度更快。半定制使用库里的标准逻辑

单元(StandardCell),设计时可以从标准逻辑单元库中选择SSI(门电路)、MSI(如加法器、比

较器等)、数据通路(如ALU、存储器、总线等)、存储器甚至系统级模块(如乘法器、微控制

器等)和IP核,这些逻辑单元已经布局完毕,而且设计得较为可靠,设计者可以较方便地完

成系统设计。

2、ALU:arithmeticanlogicunit算术逻辑单元

是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由“AndGate”

(与门)和“OrGate"(或门)构成的算术逻辑单元,主要功能是进行二位元的算术运算,

如加减乘(不包括整数除法)。基本上,在所有现代CPU体系结构中,二进制都以补码的形

式来表不。

3、BCD:binary-codeddecimalBCD码或二-十进制代码,亦称二进码十进数

是一种二进制的数字编码形式,用二进制编码的十进制代码。这种编码形式利用了四个

位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。

4、CLBs:configurablelogicblocks可酉己置逻辑模块。

包含一个可配置开关矩阵,此矩阵有选型电路(多路复用器),触发器和4或6个输入

组成。在Xilinx公司的FPGA器件中,CLB由多个(一般为4个或2个)相同的slice和附

加逻辑构成。每个CLB模块不仅可以用于实现组合逻辑和时序逻辑,还可以配置为分布式

RAM和分布式R0M„

5、CPLDs:complexprogrammablelogicdevices复杂可编程逻辑器件

是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成

电路范围。主要是由可编程逻辑宏单元(MC,MacroCell)围绕中心的可编程互连矩阵单元组

成。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。

6、DSP:digitalsignalprocessing数字信号处理

就是用数值计算的方式对信号进行加工的理论和技术。

7、EDA:electronicdesignautomation电子设计自动化

在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机

辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机

为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机

自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯

片的适配编译、逻辑映射和编程下载等工作。

8、TOPDOWN:自顶向下或自上而下

是一种层次化和结构化的现代集成电路设计方法。先用高抽象级构造系统,然后再设计

下层单元。

自下而上的设计流程:一种先构建底层单元,然后由底层单元构造更大的系统的设计方

9、FPGA:field-programmablegatearray现场可编程门阵列

它是在PAL、GAL,CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集

成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了

原有可编程器件门电路数有限的缺点。

FPGA采用了逻辑单元阵列LCA(LogicCellArray)的概念,内部包括可配置逻辑模块

CLB(ConfigurableLogicBlock)>输入输出模块IOB(InputOutputBlock)和内部连线

(Interconnect)三个部分。FPGA利用小型查找表(LUT)(16xlRAM)来实现组合逻辑,

每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此

构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用

金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数

据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与

I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。

全球知名的FPGA生产厂商有:

(1)Altera,开发平台是QuartusII;(2)Xilinx开发平台是ISE;(3)ActeL开发平

台是Libero;(4)Lattice;(5)Atmel

FPGA与CPLD的区别

CPLD:乘积项丰富而触发器少一适用组合逻辑;延时固定;掉电后重新上电还能保持编

程信息;

FPGA:触发器资源丰富;适用时序逻辑;延时时间不可预测(容易产生竞争冒险或误码

等);掉电后重新上电不能保持编程信息,需使用配置芯片

10、FSM:finite-statemachine有限状态机

有限状态机是指输出取决于过去输入部分和当前输入部分的时序逻辑电路。一般来说,

除了输入部分和输出部分外,有限状态机还含有一组具有“记忆”功能的寄存器,这些寄存器

的功能是记忆有限状态机的内部状态,它们常被称为状态寄存器。在有限状态机中,状态寄

存器的的下一个状态不仅与输入信号有关,而且还与该寄存器的当前状态有关,因此有限状

态机又可以认为是组合逻辑和寄存器逻辑的一种组合。其中,寄存器逻辑的功能是存储有限

状态机的内部状态;而组合逻辑有可以分为次态逻辑和输出逻辑两部分,次态逻辑的功能是

确定有限状态机的下一个状态,输出逻辑的功能是确定有限状态机的输出。

根据有限状态机是否使用输入信号,设计人员经常将其分为Moore型有限状态机和

Mealy型有限状态机两种类型。

11、FIFO:first-in,first-outmemory先入先出队列

是一种传统的顺序执行方法,先进入的指令先完成并引退,接着才执行第二条指令。是

一种先进先出的数据缓存器

12、HDL:hardwaredescriptionlanguage硬件描述语言

具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言。这种特殊结构

的功能如下:描述电路的连接、描述电路的功能、在不同抽象级上描述电路、描述电路的时

序、表达具有并行性。

13、LUT:lookuptable查找表

本质上就是一个RAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一

个地址进行查表,找出地址对应的内容,然后输出。

14、Mealy-typeFSM:Mealy型有限状态机

其输出信号不仅与当前状态有关,而且还与所有的输入信号有关,即可以把Mealy型

有限状态机的输出看成是当前状态和所有输入信号的函数。

15、Moore-typeFSM:Moore型有限状态机

其输出信号仅与当前状态有关,即可以把Moore型有限状态的输出看成是当前状态的

函数。

16^PAL:programmableanaylogic可编程阵列逻辑

17、PLA:programmablelogicarray可编程逻辑阵列

18、IPcore:知识产权核

是一段具有特定电路功能的硬件描述语言程序,该程序与集成电路工艺无关,可以移植

到不同的半导体工艺中去生产集成电路芯片。通常是用HDL文本形式提交给用户,它经过

RTL级设计优化和功能验证,但其中不含有任何具体的物理信息。IP核的重用是设计人员

赢得迅速上市时间的主要策略。

与工艺无关的程序(IPcore)称为软核。

把在某一种专用集成电路工艺器件上实现的、经验证是正确的、总门数在5000门以上

的具有特定电路功能的集成电路版图掩膜称为硬核。尽管硬核由于缺乏灵活性而可移植性

差,但由于无须提供寄存器转移级(RTL)文件,因而更易于实现IP保护。

固核是指在某一种FPGA器件上实现的、经验证是正确的、总门数在5000门以上的电

路结构编码文件,是软核和硬核的折衷。

19、SoC:system-on-a-chip芯片级系统,也称片上系统,是一个有专用目标的集成电路,

其中包含完整系统并有嵌入软件的全部内容。

20^RTL:registertransferlevel寄存器传输级

用于设计的可综合的一种抽象级。在RTL级,IC是由一组寄存器以及寄存器之间的逻

辑操作构成。

RTL级和门级简单的区别在于,RTL是用硬件描述语言(Verilog或VHDL)描述电路

所要达到的功能,门级则是用具体的逻辑单元(依赖厂家的库)来实现电路所要达到的功能,

门级最终可以在半导体厂加工成实际的硬件,即RTL和门级是设计实现上的不同阶段,RTL

经过逻辑综合后,就得到门级。

21、syntaxerror:语法或句法错误。提示你必须检查所写代码的语法问题。

22、UDP:user-definedprimitive用户定义的原语

是指用户自己设计的基本逻辑元件的功能,即可以利用UDP来定义自己特色的用于仿

真的基本逻辑元件模块并建立相应的原语库,并进行仿真。其结构模块与一般模块类似,以

primitive关键词开始,用endprimitive关键词结束。

23、时序逻辑:由多个触发器和多个组合逻辑块组成的网络。常用的有:计数器、复杂

的数据流动控制逻辑、运算控制逻辑、指令分析和操作控制逻辑。同步时序逻辑是设计复杂

的数字逻辑系统的核心。时序逻辑借助于状态寄存器记住它目前所处的状态。在不同的状态

下,即使所有的输入都相同,其输出也不一定相同。

24、组合逻辑:是指在任何时刻,输出状态只决定于同一时刻各输入状态的组合,而与

电路以前状态无关,与其他时间的状态无关。

25、LAB:LogicArrayBlocks逻辑阵列块

26、PIA:ProgrammableInterconnectArray可编程连线阵列

负责信号传递,连接所有的宏单元。

27>IEEE:InstituteofElectricalandElectronicsEngineers美国电气和电子工程师协会

28、primitive:原语

是指veriloghdl中预先定义的逻辑单元。这些内置的原语可以转化为更大型的设计实

例,形成一个结构更为复杂的部件。这些原语包括:and、nand>or、nor>xor>xnor>not>

buf等。

29、抽象级(LevelsofAbstraction):

描述风格的详细程度,如行为级和门级。Verilog既是一种行为描述的语言也是一种结

构描述语言。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别包括:

行为级(系统说明)行为综合

-设计文档/算法描述□

综合前仿真

RTL/功能级

-\erilog逻辑综合

门级/结构级

-\eriiog综合后仿真

版图/物理级

-几何图形版图

30、利I用Quartusii进行FPGA的开发流程:

(1)设计输入:图形输入、状态图输入、波形图输入、原理图输入、HDL文本输入

(2)综合

(3)适配

(4)仿真:时序仿真、功能仿真

(5)编程下载

(6)硬件测试

31、数字系统建模。

被建模的数字系统对象既可以是简单的门,也可以是完整的数字电子系统。硬件描述语

言的主要功能是编写设计文件,建立电子系统行为级的仿真模型,然后利用高性能的计算机

对用VerilogHDL或VHDL建模的复杂数字逻辑进行仿真,然后再对它进行自动综合以生成

符合要求且在电路结构上可以实现的数字逻辑网表(Netlist),然后根据网表和适合某种工艺

的器件自动生成具体电路,最后生成该工艺条件下具体电路的延时模型。仿真验证无误后用

于制造ASIC芯片或写入FPGA和CPLD中。

32、目前最主要的硬件描述语言是VHDL和VerilogHDL。Verilog起源于C语言,因

此非常类似于C语言,容易掌握。VerilogHDL语言最初是于1983年由GatewayDesign

Automation公司为其模拟器产品开发的硬件建模语言。Verilog语言于1995年成为IEEE标

准,称为IEEEStd1364-1995o

VHDL起源于ADA语言,格式严谨,语法严格,不易学习。VHDL出现较晚,但标准

化早。IEEE1706-1985标准。

33、HDL有两种用途:系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的

语法和编程方法都可以使用。但如果我们的程序是用于硬件实现(例如:用于FPGA设计),

那么我们就必须保证程序"可综合"(程序的功能可以用硬件电路实现)。不可综合的HDL语

句在软件综合时将被忽略或者报错。我们应当牢记一点:"所有的HDL描述都可以用于仿真,

但不是所有的HDL描述都能用硬件实现。

34、硬件描述语言开发流程

用VHDL/VerilogHD语言开发PLD/FPGA的完整流程为:

(1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通

常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件

(2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也

叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)

(3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表

达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的EDA工业标准文件。

(4)布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑

安放到PLD/FPGA内。

(5)时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。

(也叫后仿真)

(6)编程下载:确认仿真无误后,将文件下载到FPGA中。

35、VHDL:VeryHighSpeedIntegeratedCircuitHardwareDescriptionLanguage:甚高速

集成电路的硬件描述语言。

36、VerilogHDL较为适合系统级(System)、算法级(Alogrithem)、寄存器传输级(RTL)、

逻辑级(Logic)、门级(Gate)、电路开关级(Switch)设计,而对于特大型(几百万门级以上)的

系统级(System)设计,则VHDL更为适合,由于这两种HDL语言还在不断地发展过程中,

它们都会逐步地完善自己。

37、层次管理

复杂数字逻辑电路和系统的层次化、结构化设计隐含着硬件设计方案的逐次分解。在

设计过程中的任意层次,硬件至少有一种描述形式。硬件的描述特别是行为描述通常称为行

为建模。在集成电路设计的每一层次,硬件可以分为一些模块,该层次的硬件结构由这些模

块的互连描述,该层次的硬件的行为由这些模块的行为描述。这些模块称为该层次的基本单

元。而该层次的基本单元又由下一层次的基本单元互连而成。如此下去,完整的硬件设计就

可以由图2-6-1所示的设计树描述。在这个设计树上,节点对应着该层次上基本单元的行为

描述,树枝对应着基本单元的结构分解。在不同的层次都可以进行仿真以对设计思想进行验

证。EDA工具提供了有效的手段来管理错综复杂的层次,即可以很方便地查看某一层次某

模块的源代码或电路图以改正仿真时发现的错误。

38、具体模块的设计编译和仿真的过程

图2-6-3HDL设计流程图

从上图可以看出,模块设计流程主要由两大主要功能部分组成:

设计开发:即从编写设计文件->综合到布局布线->投片生成这样一系列步骤。

设计验证:也就是进行各种仿真的一系列步骤,如果在仿真过程中发现问题就返回设

计输入进行修改。

二、VerilogHDL语法的基本概念

(-)模块

模块是Verilog的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信

的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述;设

计的数据流行为使用连续赋值语句进行描述;时序行为使用过程结构描述。一个模块可以在

另一个模块中使用。

一个模块的基本语法如下:

modulemodulename(portlist);//module是模块的起始关键字

//module_name是模块名称,portlist是端口列表;

(Declarations:)〃声明主要包括以下类型:

reg,wire,parameter,〃模块描述中使用的寄存器、连线型线网和参数

input,output,inout,〃模块的输入、输出、双向端口(相当于引脚)

function,task,...//函数,任务

(Statements:)〃功能描述包括以下类型的内容:

initialstatement〃初始化块

alwaysstatement〃总是执行块

moduleinstantiation〃模块的实例化

gateinstantiation〃门实例

UDPinstantiation〃用户自定义原语实例

continuousassignment〃连续任务

endmodule//endmodule是模块的结束关键字

声明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说

明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性,最好将所有的声明部

分放在语句前。

以下为建模一个半加器电路的模块的简单实例。

moduleHalfAdder(A,B,Sum,Carry);〃模块的名字是Ha侬dder,模块有4个端口,以分号结束

inputA,B;/*输入端DA和B.由于没有定义端口的位数,所有端口大小都为1位;同时,由于没

有各端口的数据类型说明,这四个端口都是线网数据类型*/

outputSum,Carry;〃输出端口Sum和Carry

assign#2Sum=AAB;〃描述半加器数据流行为的连续赋值语句

assign#5Carry=A&B;〃描述半加器数据流行为的连续赋值语句

endmodule//

/*这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量A和B上的

事件。*/

在模块中,可用下述方式描述一个设计:

1)数据流方式;

2)行为方式;

3)结构方式;

4)上述描述方式的混合。

(-)标识符、转义标识符、关键字、注释、格式

VerilogHDL中的标识符(identifier)可以是任意一组字母、数字、$符号和_(下划线)符号

的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。以

下是标识符的几个例子:

Count

COUNT〃与Count不同。

R1D2

R56_68

FIVES

转义标识符(escapedidentifier)可以在一条标识符中包含任何可打印字符。转义标识符以

'(反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。下面例

举了几个转义标识符:

\7400

、{******}

\~Q

\OutGate与OutGate相同。

最后这个例子解释了在一条转义标识符中,反斜线和结束空格并不是转义标识符的一部

分。也就是说,标识符\OutGate和标识符OutGate恒等。

VerilogHDL定义了一系列保留字,叫做关键词,它仅用于某些上下文中。附录A列

出了语言中的所有保留字。注意只有小写的关键词才是保留字。例如,标识符always(这是

个关键词)与标识符ALWAYS(非关键词)是不同的。

另外,转义标识符与关键词并不完全相同。标识符\initial与标识符initial(这是个关键

词)不同。注意这一约定与那些转义标识符不同。

注释。在VerilogHDL中有两种形式的注释。

/*第一种形式:可以扩展至

多行*/

〃第二种形式:在本行结束。

格式。VerilogHDL区分大小写。也就是说大小写不同的标识符是不同的。此外,Verilog

HDL是自由格式的,即结构可以跨越多行编写,也可以在一行内编写。白空(新行、制表

符和空格)没有特殊意义。下面通过实例解释说明。

initialbeginTop=3"bOO1;#2Top=3"bOll;end

和下面的指令一样:

initial

begin

Top=3"bOOl;

#2Top=3"bOll;

end

(三)

(三)数据类型及其常量和变量

1、值类型:

VerilogHDL有下列四种基本的值:

1)0:逻辑。或“假”

2)1:逻辑1或“真”

3)x:未知

4)z:高阻

注意这四种值的解释都内置于语言中。如一个为z的值总是意味着高阻抗,一个为0

的值通常是指逻辑0o

在门的输入或一个表达式中的为“z”的值通常解释成“X"。此外,x值和z值都是不

分大小写的,也就是说,值Oxlz与值0X1Z相同。VerilogHDL中的常量是由以上这四类基

本值组成的。

2、VerilogHDL中有三类常量:

1)整型

2)实数型

3)字符串型

下划线符号(_)可以随意用在整数或实数中,它们就数量本身没有意义。它们能用来

提高易读性;唯一的限制是下划线符号不能用作为首字符。

(1)整型数

>整数常量:

•1)二进制整数(b或B)

•2)十进制整数(d或D)

•3)十六进制整数(h或H)

•4)八进制整数(o或O)

>x和z(?)值:不定值和高阻值

如:4'blOxO、4-bl01z>12'dz、12'd?、8Mx

A负数:位宽前加-号,内部是补码

如:-l=-32'l=32'hFFFFFFFF

>下划线:仅增加可读性

如:16'bl0x0000000001111

“AB"=16'b01000001_01000010

整型数可以按如下两种方式书写:

简单的十进制数格式

这种形式的整数定义为带有一个可选的“+”(一元)或“一”(一元)操作符的数字

序列。下面是这种简易十进制形式整数的例子。

32十进制数32

—15十进制数一15

这种形式的整数值代表一个有符号的数。负数可使用两种补码形式表示。因此32在5

位的二进制形式中为10000,在6位二进制形式中为110001;—15在5位二进制形式中为

10001,在6位二进制形式中为110001。

基数格式:[size]'basevalue

size定义以位计的常量的位长;base为o或O(表示八进制),b或B(表示二进制),

d或D(表示十进制),h或H(表示十六进制)之一;value是基于base的值的数字序列。

值x和z以及十六进制中的a到f不区分大小写。

下面是一些具体实例:

5,O375位八进制数

4'D24位十进制数

4'Blx_014位二进制数

7'Hx7位x(扩展的x),即xxxxxxx

4'hZ4位z(扩展的z),即zzzz

4'd-4非法:数值不能为负

8112A在位长和字符之间,以及基数和数值之间允许出现空格

3'b001非法:’和基数b之间不允许出现空格

(2+3)'biO非法:位长不能够为表达式

注意,x(或z)在十六进制值中代表4位x(或z),在八进制中代表3位x(或z),

在二进制中代表1位x(或z)。

基数格式计数形式的数通常为无符号数。这种形式的整型数的长度定义是可选的。如果

没有定义一个整数型的长度,数的长度为相应值中定义的位数。下面是两个例子:

,o721〃9位八进制数

'hAF〃8位十六进制数

如果定义的长度比为常量指定的长度长,通常在左边填0补位。但是如果数最左边一位

为x或z,就相应地用x或z在左边补位。例如:

10'blO左边添0占位,0000000010

10'bxOxl左边添x占位,xxxxxxx0xl

如果长度定义得更小,那么最左边的位相应地被截断。例如:

31bl001_0011与3boi1相等

5'H0FFF与5'HIF相等

?字符在数中可以代替值z,在值z被解释为不分大小写的情况下提高可读性

2、实数

实数可以用下列两种形式定义:

(1)十进制计数法;例如

2.0

5.678

11572.12

0.1

2.//非法:小数点两侧必须有1位数字

(2)科学计数法;这种形式的实数举例如下:

23_5.1e2其值为23510.0;忽略下划线

3.6E2360.0(e与E相同)

5E-40.0005

Verilog语言定义了实数如何隐式地转换为整数。实数通过四舍五入被转换为最相近的

整数。

42.446,42.45转换为整数42

92.5,92.699转换为整数93

-15.62转换为整数一16

-26.22转换为整数一26

3、字符串

字符串是双引号内的字符序列。字符串不能分成多行书写。例如:

"INTERNALERROR"

"REACHED->HERE"

用8位ASCII值表示的字符可看作是无符号整数。因此字符串是8位ASCII值的序列。

为存储字符串“INTERNALERROR”,变量需要8*14位。

reg[1:8*14]Message;

Message="INTERNALERROR"

反斜线(\)用于对确定的特殊字符转义。

\n换行符

\t制表符

W字符'本身

\"字符"

\206八进制数206对应的字符

数据类型

4、网络数据类型:表示结构实体之间的物理连接

wire型:用来表示单个门驱动或连续赋值语句驱动的网络型数据,默认值为z,常用assign

语句或实例元件的输出赋值。

tri型:用来表示多驱动器驱动的网络型数据

reg型:寄存器类型是数据储存单元的抽象。

memory型:通过对reg型变量建立数组来对存储器建模,可以描述RAM型存储器,

ROM存储器和reg文件。数组中的每一个单元通过一个数组索引进行寻址。如:reg[3:0]mm

[7:0];

有5种不同的寄存器类型。reg、integer、time、real>realtime

(1)reg寄存器类型

寄存器数据类型reg是最常见的数据类型。reg类型使用保留字reg加以说明,通过赋

值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当,默认值为X。在always

块内被赋值的每一个变量必须是reg型。

形式如下:

reg[msb:Isb]regl,reg2,...regN;

msb和Isb定义了范围,并且均为常数值表达式。范围定义是可选的;如果没有定义范

围,缺省值为1位寄存器。例如:

reg[3:0]Sat;//Sat为4位寄存器。

regCnt;//I位寄存器。

reg[1:32]Kisp,Pisp,Lisp;

寄存器可以取任意长度。寄存器中的值通常被解释为无符号数,例如:

reg[1:4]Comb;

Comb=-2;//Comb的值为14(1110),1110是2的补码。

Comb=5;〃Comb的值为15(0101)»

存储器是一个寄存器数组。存储器使用如下方式说明:

reg[msb:Isb]memory1[upper1:lowerl],

memory2[upper2:lower2],...;

例如:

reg[0:3]MyMem[0:63]//MyMem为64个4位寄存器的数组。

regBog[1:5]//Bog为5个1位寄存器的数组。

MyMem和Bog都是存储器。数组的维数不能大于2。注意存储器属于寄存器数组

类型。线网数据类型没有相应的存储器类型。

单个寄存器说明既能够用于说明寄存器类型,也可以用于说明存储器类型。

parameterADDRSIZE=16,WORDSIZE=8;

reg[1:WORDSIZE]RamPar[ADDRSIZE-1:0],DataReg;

RamPar是存储器,是16个8位寄存器数组,而DataReg是8位寄存器。

在赋值语句中需要注意如下区别:存储器赋值不能在一条赋值语句中完成,但是寄

存器可以。因此在存储器被赋值时,需要定义一个索引。下例说明它们之间的不同。

reg[1:5]Dig;//Dig为5位寄存器。

Dig-51bli011;

上述赋值都是正确的,但下述赋值不正确:

regBOg[l:5];//Bog为5个1位寄存器的存储器。

Bog=5'bll011;

有一种存储器赋值的方法是分别对存储器中的每个字赋值。例如:

reg[0:3]Xrom[1:4]

Xromfl]=4TlA;

Xrom[2]=4*h8;

Xrom[3]=4*hF;

Xrom[4]=4*h2;

为存储器赋值的另一种方法是使用系统任务:

1)$readmemb(加载二进制值)

2)$readmemb(加载十六进制值)

(2)Integer寄存器类型

整数寄存器包含整数值。整数寄存器可以作为普通寄存器使用,典型应用为高层次行为

建模。使用整数型说明形式如下:

integerinteger1,integer2,...intergerN[msb:lsb];

msb和Isb是定义整数数组界限的常量表达式,数组界限的定义是可选的。注意容许无

位界限的情况。一个整数最少容纳32位。但是具体实现可提供更多的位。下面是整数说明

的实例。

integerA,B,C;//三个整数型寄存器。

integerHist[3:6];〃一组四个寄存器。

一个整数型寄存器可存储有符号数,并且算术操作符提供2的补码运算结果。

整数不能作为位向量访问。例如,对于上面的整数B的说明,B[6]和B[20:10]是非法的。

一种截取位值的方法是将整数赋值给一般的reg类型变量,然后从中选取相应的位,如下所

示:

reg[31:0]Breg;

integerBint;

//Bint[6]和Bint[20:10]是不允许的。

Breg=Bint;

/*现在,Breg[6]和Breg[20:10]是允许的,并且从整数Bint获取相应的位值。*/

上例说明了如何通过简单的赋值将整数转换为位向量。类型转换自动完成,不必使用特

定的函数。从位向量到整数的转换也可以通过赋值完成。例如:

温馨提示

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

评论

0/150

提交评论