版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向仿真的veriloghdl语言描述的逻辑综合
硬件描述语言hdl语言用于描述硬件电路的功能、信号连接关系和时间差关系。它比传统的电原理图更有效地表示硬件电路的特性。进入80年代后期,硬件描述语言向着标准化的方向发展,最终VHDL、VerilogHDL语言适应了这种趋势的要求,先后成为IEEE标准.VHDL、VerilogHDL两种语言具有硬件描述语言的共同特点,但又各有长处,VerilogHDL语言的最大优点是易学,只要有C语言的基础就可以了,而掌握VHDL设计技术就比较困难.VerilogHDL在系统抽象方面比VHDL略差一些,而在门级开关电路描述方面比VHDL强的多.标准的高级程序设计语言,例如FORTRAN、PASCAL、C、……等,只适合于描述过程和算法,但不能描述硬件电路,这些语言区别于硬件描述语言的一个明显特点是只要每一条语句符合语法规则,那么经编译程序编译后,就可以运行该程序了.而用硬件描述语言进行程序设计的最终目的是进行硬件设计,在硬件描述语言中,许多基于仿真的语句虽是符合语法规则的,但却不能用硬件来实现,即不能映射到硬件逻辑电路单元,我们要避免出现这种情况.若要最终实现硬件设计,必须写出可综合的程序,即程序中的每一条语句和整个程序结构都可向门级网表转换.1有利于实现逻辑综合在利用HDL的硬件设计方法中,设计着将自顶至下分成3个层次对系统进行硬件设计.第一层次是行为描述.所谓行为描述就是对整个系统的数学模型的描述.在行为描述阶段,并不真正考虑其实际的操作和算法用什么方法来实现,考虑更多的是系统的结构及其工作过程是否能达到系统的设计要求.第二层次是RTL方式描述,这一层次也称为寄存器传输描述或数据流描述.用行为方式描述的系统结构的程序,其抽象程度很高,很难直接映射到具体逻辑元件结构的硬件实现的.要想得到硬件的具体实现,必须将行为方式描述的HDL语言程序改写为RTL方式描述的HDL语言程序,这样才能导出系统的逻辑表达式,才能进行逻辑综合.第三层次是逻辑综合.就现有的逻辑综合工具而言,所谓逻辑综合就是将电路的RTL级语言描述转换成门级网表的过程.逻辑综合这一阶段是利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件即门级网表.我们所关心的是第二层次,如何写出可综合的RTL方式描述的程序.VerilogHDL语言本身类似于C语言,有些语句既满足语法要求,又可映射到具体逻辑元件结构,是可综合的.有些语句只满足语法,而无法映射到具体逻辑元件结构,是不可综合的.本文将根据作者在工作中的一些体会来讨论VerilogHDL的可综合性.2如何书写rtl级描述的程序现有的综合工具自动完成将RTL级的描述转换成门级连接网表,因此,我们所关心的是如何写出可综合风格的RTL级描述的程序.具体的说,主要有以下几个方面.2.1/、%运算的运算符算术运算符+、-、*、/、%,关系运算符<、>、<=、>=、==、===、!=、!==,移位运算符<<、>>,三目运算符?:是可综合的,但要注意在/、%运算中必须除以或模2的幂次方.逻辑运算符&&、‖、!,位运算符号~、&、~&、|、~|、^~、~^、^,拼接运算符{}是可综合的.2.2循环体内被赋值的变量行为语句if-else-if、case、casex、casez、for、repeat、while是可综合的.要注意以下两点:(1)对于循环语句for、repeat、while,当希望设计出能够综合的具体电路时,其循环次数、步长和范围必须固定.例如:for(i=const0,i<const1;i=i+const2)、repeat(const3)、while(const4)等语句中const0、const1、const2、const3、const4要为固定的常量.若在循环体内const0、onst1、const2、const3、const4不固定,综合工具不知道循环需要执行的次数,无法决定需要多少电路来完成.循环体内不能有事件驱动语句@event,循环体内被赋值的变量大多是reg型,此时综合的结果是组合电路.(2)if-else-if、case、casex、casez语句在描述状态机、总线编码、译码行为时非常有效,综合工具是支持的.只是在使用case语句进行设计时,应注意到若case语句所罗列的状态并没有表示出case表达式的所有状态时,此时,应加入default语句.若没有default语句,则会出现偶然生成锁存器的错误,即生成了不想要的锁存器.同样对于if-else,如果只有if没有配套的else也会出现偶然生成锁存器的错误.case语句可以用if-else-if语句来代替.2.3数据的综合VerilogHDL语言有多种数据类型,正是由于这些数据类型,才使得VerilogHDL语言能够创建高层次的系统和算法的模型.然而并不是每种数据类型都是完全可以综合的,在最终的实现中,数据的综合大多是寄存器型reg、integer和网络型wire两大类.1基于reg的编码及数据的编码常见的标量类型是integer,综合时,综合工具把integer综合成32位的寄存器型数据.当超出这一范围时,就必须用数组表示.在RTL级语言描述时,要根据数据的范围确定数据的位宽,不要简单的定义成16位或32位.这样可节约逻辑资源,减少不必要的浪费.如数的范围是0~255,只需定义8位的reg数据即可.对于reg型的负数,RTL级语言描述的程序综合后变为负数的补码表示,因此,在进行比较两数大小、加减乘除等运算时要考虑到这一点.应该按照计算机组成原理中的运算方法来进行比较两数大小、加减乘除等运算.综合工具不支持浮点数,若要进行浮点数的综合,应按照计算机组成原理中的运算方法来进行编程.2基于reg的二维个数复合类型通常用到的是数组.VerilogHDL语言中的数组是一维数组或二维数组.就目前的综合工具来说,所有的一维限定性数组都是可以综合的.一维数组的下标可以是常量、变量、表达式或另一个数组中的元素,它们的范围必须在数组的下标域中,否则就会产生溢出.当一维数组的下标是变量、表达式或另一个数组中的元素时,综合后的时间延迟是很大的.通过对reg数据类型建立二维数组,可以描述ROM、RAM.2.4任务的递归调用对函数进行综合时,函数体内对循语句中循环变量的限制同2.2中所述,并且不能进行递归函数调用,函数体内不能包含有任何的时间控制语句.函数不能启动任务.综合工具将函数当作一个硬件模块来处理.一般综合成组合逻辑电路.对任务的处理比函数复杂,任务体内对循环语句的限制同函数,不能进行任务的递归调用.任务可以启动其他任务和函数.若任务是在进程always@(posedgeclk)或always@(negedgeclk)块内被调用,则任务体内不允许有时间控制语句.若有多个进程调用相同的任务,书写成如下形式:always@(posedgeclk)begin...light(parameter0);...endalways@(posedgeclk)begin...light(parameter1);...endtasklight(parameter)...综合工具进行综合时,进行宏代换处理.2.5非阻塞赋值词语连续赋值语句assign是可综合的,综合工具把它综合成组合逻辑.赋值语句的左边是wire型,右边是reg、integer或wire型.过程赋值语句一般是在always块内,有非阻塞(<=)和阻塞(=)两种赋值语句,两种赋值语句不能同时使用,建议使用非阻塞赋值语句.举例说明如下:always@(posedgeclk)always@(posedgeclk)beginbeginb<=a;b=a;c<=b;c=b;endend若执行前a=3、b=5执行后左边实例的结果是b=3、c=5,右边实例的结果b=3、c=3.在使用非阻塞赋值语句时,左边的变量是reg或integer型,右边的变量是reg、integer或wire型.被赋值的变量只能在一个always块内对其赋值,可在多个always块内被引用.2.6同步时序逻辑电路设计用assign语句对wire型变量进行赋值,综合后的结果是组合逻辑电路.用always@(Level-Sensitiveparameterlist),即电平敏感的always块描述的电路综合后的结果是组合逻辑电路或电平敏感的锁存器,此时,always块内赋值语句左边的变量是reg或integer型,块中要避免组合反馈回路.每次执行always块时,在生成组合逻辑的always块中被赋值的所有信号必须都在always@(Level-Sensitiveparameterlist)的敏感电平列表中列出,否则在综合时将会为没有列出的信号隐含的产生一个透明的锁存器,这时综合后的电路已不是纯组合电路了.用always@(posedgeclock)或always@(negedgeclock)块描述的电路综合为同步时序逻辑电路.设计同步时序逻辑电路的关键是建立描述该电路状态转移的可综合的有限状态机模型,在VerilogHDL语言中最常用的描述同步时序状态机的结构是always和块内的case、if语句.除了紧跟在always后的@(posedgeclock)、@(negedgeclock)外,always块中不允许有其他的@(event-expression)语句,目前大多数综合工具不能综合VerilogHDL描述的异步状态机,所以,用VerilogHDL设计的时序电路应该是同步时序电路,如果一定要设计异步状态机,应该用电原理图输入方法.2.7时钟周期个数延迟语句是典型的面向仿真的,综合工具不支持该语句.若需要延迟,需将特定的时间约束换算成相应的时钟周期个数,用计数器计数时钟周期的个数来实现.2.8启动变量分析初始化语句也是面向仿真的,综合工具不支持该语句.若需初始化参数,应该在有限状态机中加入判别有无Reset信号的状态来实现.2.9催化子系统或模块的协调wait语句和event类型是面向仿真的,是不可综合.若想实现数字子系统或模块的协调工作,建议采用握手应答的方式.综合工具支持disable语句,但只支持如下结构形式的描述:begin:local—block—name……disablelocal—block—name……end3合并执行的控制方式在一个大的程序模块中,有许多assign语句和always模块,它们之间是并发执行的,即同时工作.为了协调数字系统各子系统或模块的并发执行,常采用两种时序控制方式,即同步控制方式和异步控制方式.同步控制方式是指数字系统各子系统或模块之间以时钟节拍为基准,定时进行数字系统各子系统或模块之间启动或停止操作.异步控制方式是指数字系统各子系统或模块之间的启动或停止用请求和回答信号来进行的.数字系统各子系统或模块之间在进行某种操作时,由于所处理的数据类型、步骤不同,其占用的时间也不同.因此,一般不采用同步控制方式而采用异步控制方式.4从可综合性到可综合性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兰州外语职业学院《五官医学》2023-2024学年第一学期期末试卷
- 江西科技职业学院《中国民间美术》2023-2024学年第一学期期末试卷
- 济南大学《现代控制理论及其仿真》2023-2024学年第一学期期末试卷
- 湖南信息职业技术学院《人体形态学》2023-2024学年第一学期期末试卷
- 湖南工程职业技术学院《体育舞蹈摩登》2023-2024学年第一学期期末试卷
- 衡水健康科技职业学院《生物工程实训理论与实践》2023-2024学年第一学期期末试卷
- 重庆智能工程职业学院《手绘空间快速表现》2023-2024学年第一学期期末试卷
- 重庆健康职业学院《信号与系统理论教学》2023-2024学年第一学期期末试卷
- 中原科技学院《热储工程课程设计》2023-2024学年第一学期期末试卷
- 浙江汽车职业技术学院《土建工程基础》2023-2024学年第一学期期末试卷
- 2024-2025学年八年级上学期1月期末物理试题(含答案)
- 2025年国新国际投资有限公司招聘笔试参考题库含答案解析
- 制造车间用洗地机安全操作规程
- 2025河南省建筑安全员-A证考试题库及答案
- 油气田智能优化设计-洞察分析
- 陕西2020-2024年中考英语五年真题汇编学生版-专题09 阅读七选五
- 砖混结构基础加固技术方案
- MOOC 有机化学(上)-北京师范大学 中国大学慕课答案
- 五年级上册脱式计算100题及答案
- 医疗设备报废申请表
- CAD快速看图破解安装步骤
评论
0/150
提交评论