您的当前位置:首页正文

VHDL

2020-06-16 来源:好走旅游网
总第305期 2015年第3期 计算机与数字工程 Computer&Digital Engineering Vo1.43 No.3 533 VHDL语言应用中几个常见问题探讨 潘海燕金珍珍杨利亚 台州 318000) (台州职业技术学院电气信息学院摘要VHDL是硬件电路设计的首选语言之一,论文结合VHDL的特点,阐述了在应用VHDL进行硬件设计中遇 到的几个常见问题,解释了VHDL语法难点,指出了在应用其进行设计过程中应注意的一些问题。从实际应用效果来看, 论文提出的几个问题对VHDL设计具有一定的指导意义。 关键词VHDL语言;综合;应用 TP31 DOI:10.3969/j.issn1672—9722.2015.03.043 中图分类号Discussion on Some General Problems in the Application of VHDL PAN Haiyan JIN Zhenzhen YANG Liya (Electric&Information Schoo1.Taizhou Vocational&Technical College.Taizhou 318000) Abstract VHDL is one of the top hardware circuit design languages.Based on the VHDL features,the paper discus— ses some general problems in digital circuit designing during implementing VHDL project.Based on our experience,the method given in this paper has positive effect on VHDL designing. Key Words VHDL language,synthesize,implementing Class Number TP31 1 引言 VHDL语言主要用来描述数字系统的结构、行 为、功能和接口,既可描述系统级电路,也可以描述 定义为std—logic数据类型是非常重要的,它可以 使设计者精确地模拟一些未知的线路情况。但就 目前的综合器而言,std_logic型数据能够在数字器 件中实现的只有其中的四种值,即一 (或~X)、 0 、 1 门级电路,具有多层次的电路设计描述功能口q]。 只需采用简单明确的VHDL语言程序,就可以描述 十分复杂的硬件电路,准确地建立硬件电路的模 型E。 ]。掌握VHDL语言的正确使用方法是利用 E【)A技术设计数字电路的基础l6 ]。应用VHDL 和 Z,其中的忽略态一 (有的综合器对 )和高阻态 Z可用于三态的描述。但应注意,std—logic数据类 型中 Z在综合中是一个不确定的值,不同的综合器 可能会给出不同的结果,因而对于VHDL综合前 的行为仿真与综合后功能仿真结果也可能是不同 语言,需要注意不同语言对象和语句规则之间的差 别,才能得到准确的电路综合_8叫。。。本文试针对 VHDI 语言中一些常用语句进行阐述和分析。 的,有时虽然能通过综合,但却不能获得正确的时 序仿真结果,所以建议尽可能不要将 Z用作比较值 或用作操作数。 例1: process(clk) ogicvectvariable va:stdlor(3 downto O); 2 std—logic数据类型和时钟信号 std_logic数据类型定义为: type stdlogic is(,U,,x,,(] ,T,Z,,w’, L, H ,…); begin 它们较完整地概括了数字系统中所有可能的 数据表现形式。在仿真中,将信号或其它数据对象 if clkevent and clk= r then va:一va+ 1 ; 收稿日期:2014年9月3日,修回日期:2014年10月27日 作者简介:潘海燕,男,副教授,研究方向:电子电路设计和应用。 534 潘海燕等:VHDL语言应用中几个常见问题探讨 第43卷 end if; dour<一va; end process; 例1中,va为std—logic—vector型变量,大多数 综合器对其初始缺省取值是“UUUU”,对该值加 r 运算的结果是维持原值不变,因此进程执行va:一 va+ 1 后并不能实现对ca加 1 的运算,改正办法 是,在变量说明部分明确告诉va取值为“0000”,即 使用variable va:std—logic—vector(3 downto O): 一”0000”语句。 利用“clk’event and clk= 1 ’来检测clk上升 沿的表达式,在使用时也要注意,如果信号clk的 数据类型为std—logic,则它的可能取值是在std— logic的九种数据中进行跳变。因此,表达式“clk’ event and clk= 1 ’为真时,并不能推定clk发生了 一次04l的上升沿跳变,为了确保此clk是一个 上升沿,可以考虑采用如下的条件判断表达式clk’ event and clk= l and clk’last—value=~0或rising— edge()函数。 3数据类型转换 VHDI 是一种强类型的语言,不允许不同数 据类型的操作数间进行直接操作或运算,数据类型 相同而位长不同时,也不能直接代人。为了实现正 确的运算和赋值操作,必须对信号或者变量进行类 型转换。VHDL提供了三种数据类型的转换方 法,分别是类型标识符转换、常量转换和函数转换。 类型标识符转换直接利用数据类型的名称来进行 类型的转换,这种方法适用于那些关系比较密切的 数据类型之间的转换。例如,实数到整数的数据类 型转换: signal ITI:integer; signal n:real; m<一integer(n); 常量转换是借助一个具有转换表格性质的常 量来进行某些数据类型的转换。采用常量转换方 法的具体操作步骤是首先定义一个数组常量(它实 际上就是一个转换表),然后通过给转换信号赋常 量数组的元素值来完成数据类型的转换。 函数转换是利用一些特殊的转换函数来进行 数据类型之间的转换。现在一些程序包中已经为 设计人员提供了很多现成的转换函数,可以直接调 用这些函数来进行数据类型之间的转换操作,但须 在调用前进行程序包使用的说明。常用库的程序 包中提供的数据类型转换函数之间的相互转换关 系如图1所示。 图1数据类型转换函数 4信号和变量 4.1信号和变量的区别 信号和变量是两个经常使用的对象。信号是 硬件中连线的抽象描述,其功能是保存变化的数据 值和连接子元件。变量在硬件中没有对应关系,主 要应用于高层次的建模中,只在定义它的过程、函 数和进程中可见。对于变量来说,赋值没有延迟, 变量在赋值语句执行后立即得到新值;而对于信号 来说,在信号赋值的执行和信号值的更新之间有延 迟,只有延迟过后信号才能得到新值。从语句功能 上看,信号与变量比较明显的区别主要表现在:变 量只能在所定义的进程中作为局部的信息载体,只 是一种过渡,变量设置的最后信息传输和界面通信 都靠信号来完成。信号相当于硬件逻辑电路系统 中的连线,变量可以看成是连线上的信号值,是一 个简单的数据临时储存值。有例外的是,不完整的 条件语句中,变量赋值语句综合后也有可能产生时 序电路。 4.2进程中的信号和变量 在进程中,从process的启动执行到遇到“end process”语句为止所花的时间为VHDL模拟器的 最小分辨时间 (几乎为0),包括变量和信号赋值 的所有语句,都必须在这个 中完成。变量在 延 时前即能完成赋值,而对于信号赋值,进程会在信 号赋值语句操作前启动定时为 的定时器,只有在 定时结束后才执行赋值操作。也就是说,信号赋值 只有在顺序执行到“end process”语句时才得到更 新,完成赋值操作。当在进程中存在同一信号有多 个赋值源时,实际完成赋值的信号是最接近“end process”语句的信号。 例2: process(clk) variable va,vb:std logic; begin if elkevent and clk= 1 then va:一din; 2015年第3期 vb:一va; 计算机与数字工程 535 行赋值操作,允许同一输出端口可以有多个驱动 ogic 源。一般地,可以首先将某信号定义为stdldout<一vb; end if; end process; d,n——数据类型,将 Z赋给这个变量来获得三态控制门电 路。 d。ut 例4: process—a:process(dina,sele) 图2例2的综合结果 begin if sole= 1 then dout<一din a: 例2中,va、vb是变量,具有临时保留数据的 特性,它们的赋值更新是立即发生的,因而有了明 显的顺序性。语句执行中,先将din的值传给va, 再通过va传给vb,最后在一个 时刻后,由vb传 给dout。在这些过程中,va和vb只担当了din数 据的暂存单元。dout最终被更新的值是上一时钟 周期的din。因此,综合结果是图2所示的单个D 触发器。 例3: signal sa,sb:stdlogic; _process(clk) begin if clkevent and clk= 1 then sa<一din; sb<一sa; dout<一sb; end if; end process; din clk 图3例3的综合结果 例3中,sa、sb是变量,进程内的三个赋值语句 都必须在遇到“end proccess”后才完成赋值操作, 即语句sa<===din中的sa和语句sb<一sa中的sa 并非是同一时刻的值,sb<一sa与dout<===sb中 的sb也非同时刻的sb,它们都相差一个 时间。 sa被更新的值是第一个时钟上升沿,sb被更新的 值是第二个时钟上升沿,dout被更新的值是第三个 时钟上升沿。因此在同一时刻中,din不可能将值 传到dout,使dout得到更新。程序的综合结果只 能是图3所示的电路。 5输出的多信号源驱动 在一个进程中,可以允许同一信号有多个驱动 源(赋值源),即在同一进程中存在多个同名的信号 被赋值,其结果只有最后的赋值语句被启动并进行 赋值操作。在不同的进程中,引入三态控制电路是 完全可以实现在两个以上的进程内对同一信号进 else dout<一 Z; end if; end process; process—b:process(dinb,sele) begin if sele='O then dout<一din_b; else dout<一 Z: end if: end process; sole idn a din b 图4例4的综合结果 例4中,在else语句后使用了高阻态赋值dout <一Z语句来引入三态门,不可能发生“线与”,从 而实现了对dout的多源驱动,综合后的电路如图4 所示。如果没有else语句或将dout<一Z改成赋 其它值的语句,则综合就不能通过。 应注意的是,三态门在综合与仿真上不会有问 题,但如果最终实现的目标器件是FPGA/CPLD 器件,是否能被适配进去,则必须根据具体器件系 列来确定,因为不同的器件结构,对三态的综合适 配会有不同的结果,现代大多数FPGA/CPLD器 件内部都无法构成三态门,而只能在端口上形成三 态控制端口。因此,诸如CPU内部设计中的各路 总线的控制选通只能用多路选择器的结构来实现。 有的器件甚至在端口上也难以形成可以任意方式 控制的三态输出结构,如ispLSIlO00系列器件。 6条件语句和组合逻辑电路 在构成时序电路方面,通过不完整的条件语句 描述引进寄存器元件,是VHDL描述时序电路最 536 潘海燕等:VHDL语言应用中几个常见问题探讨 computer Information,2006,22(35):149—151. 第43卷 重要的途径。然而必须注意的是,在利用条件语句 进行纯组合电路设计时,为了加快电路的工作速度 [4]李超,王红胜,赵强,等.基于VHDI 语言与PCI接口的 和提高电路的可靠性,要避免在电路中插入不必要 的时序电路。如果没有充分考虑电路中所有可能 出现的问题,即没有列全所有的条件,将导致不完 整的条件语句的描述,从而产生不希望的组合与时 序电路的混合体。对于不完整的条件语句,VHDL 综合器将“理解”为当不满足条件时,不能执行有关 操作而保持原值不变,这意味着必须引进时序元件 来保存,直到满足语句的判断条件后才能更新值。 纯组合电路的设计要求在使用IF、CAsE等条件语 句时,必须写出所有可能发生的条件并给出对应的 处理方式。 7 结语 VHDL硬件描述语言与传统数字设计方法完 全不同,应用VHDL语言使硬件电路的设计难度 大幅度下降,设计周期缩短。本文针对VHDI 应 用中的一些经验及VHDL语言中的难点进行了阐 述,以帮助对VHDI 语法的理解和运用。 参考文献 [1]刘昌华.论VHDL语言的程序结构和描述风格[J].计 算机与数字工程,2010,38(12):141—144,204. IAU Changhu.Research on the Basic Structure and De— scription Style of VHDL[J].Computer&Digital En— gineering,2010,38(12):141—144,204. [2]徐园,赵刚,王昱,等.VHDI 高级综合前词法语法分析 的研究与实现[J].计算机与数字工程,2007,35(3):42— 44,12O. XU Yuan,ZHAO Gang,WANG Yu,et a1.Study and Realization of VHDI Lexical Analyzer and Syntax An— alyzer before High Level Synthesis EJ].Computer& Digital Engineering,2007,35(3):42—44,120. [3]齐京礼,宋毅芳,陈建泗.VHDL语言在FPGA中的应 用__J].微计算机信息,2006,22(35):149—151. QI Jingli,SONG Yifang,CHEN Jiansi.Application of VHDI Language in FPGA Development EJ].Micro 完整性度量算法实现[J].微电子学与计算机,2009,26 (5):212—215. I I Chao,WANG Hongsheng,ZHAO Qiang,et a1. Implemention of Integrality Measurement Arithmetic Based on VHDL Language and PCI Interface ̄J].Mi— croelectronics oCmputer,2009,26(5):212—215. Es]牟洪江,杨虹,王玲.基于VHDI 语言的数字频率计的 设计[J].电子世界,2013,19(19):163 164. MOU Hongjiang,YANG Hong,WAN(;Ling.The design of digital cymometer based on VHDI [J].Elec— tronics World,2013,19(19):163—164. E6]熊国海,黄南山,向学军.VHDI 语言在数字电路教学 中的探讨[J].电气电子教学学报,2002,24(2):50—52, 113. X10NG Guohai,HUANG Nanshan,XIANG Xuejun. The Research on Teaching of VHDI in Digital Circuits EJ].Journal of EEE,2002,24(2):50 52,ll13. [7]李晓敏,田熙燕.基于VHDL语言的数字时钟设计[J]. 电子设计工程,2011,19(13):30 32,35. LI Xiaomin,TIAN Xiyan.Design of digital clock based on VHDL language[J ̄.Electronic Design Engineering, 2Ol1,19(13):30—32,35. E8]孙建东.使用VHDL语言设计FPGA的几个常见问题 的探讨[J].国外电子元器件,2006,7(7):30 33. SUN Jiandong.Several problems of designing FPGA u— sing VHDL language[J].Electronic Design Engineer— ing,2006,7(7):30—33. E9]张雁,曾田.VHDL及高层综合EJ].计算机与数字1 程,2003,31(3):67—69,36. ZHANG Yan,ZENG Tian.VHDL and High—level Synthesis[J].Computer&Digital Engineering,2003, 31(3):67—69,36. Elo]董秀洁,杨艳.基于VHDL语言的数字频率计的设计 与仿真[J].河南工程学院学报(自然科学版),2008,20 (4):59 61. DONG Xiujie,YANG Yan.Design and Simulation of Digital Cymometer based on VHDI EJ].Journal of Henan Institute of Engineering,2008,20(4):59—61. 

因篇幅问题不能全部显示,请点此查看更多更全内容