电子设计自动化中的硬件描述语言
发布时间:2008/5/27 0:00:00 访问次数:589
冼凯仪 | ||||
(佛山科学技术学院,广东 佛山 528000) | ||||
摘要:通过一个设计例子介绍了vhdl语言的应用,说明了实现电子电路的电子设计自动化(eda)过程。 关键词:vhdl;设计程序;实例 中图分类号:tp312 文献标识码:a 文章编号:1003-353x(2003)04-0076-03 | ||||
1 引言 vhdl是超高速集成电路硬件描述语言。1993 年,ieee对vhdl进行了修订,从更高的抽象层次和系统描述能力上扩展vhdl的内容,公布了新版本的vhdl,即ieee标准的1076-1993版本(简称93版)。现在,vhdl作为ieee的工业标准硬件描述语言,得到众多eda公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。 vhdl具有极强的描述能力,能支持系统行为级、寄存器传输级和门级三个不同层次的设计,这样设计师在top_down设计的全过程中均可方便地使用同一种语言。vhdl设计并不十分关心一个具体逻辑是靠何种方式实现的,设计人员不需通过门级原理图描述电路,而是针对目标进行功能描述,把开发者的精力集中到逻辑所实现的功能上,将设计人员的工作重心提高到了系统功能的实现与调试上,只需花较少的精力用于物理实现。由于摆脱了电路细节的束缚,设计人员可以专心于设计方案和构思,使得设计工作省时省力,加快了设计周期。 硬件描述语言(vhdl)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结合和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入500至1000个门,而利用vhdl语言只需要书写一行 “a=b+c”即可。而且vhdl语言可读性强,易于修改和发现错误。 2 vhdl的主要特点 (1)与其他的硬件描述语言相比,vhdl具有更强的行为描述能力。强大的行为描述能力避开了具体的器件结构,是在逻辑行为上描述和设计大规模电子系统的重要保证。vhdl的宽范围描述能力使它成为高层次设计的核心,从而决定了它成为系统设计领域最佳的硬件描述语言,并可进行系统的早期仿真以保证设计的正确性。 (2)vhdl丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统功能的可行性,随时可对设计进行仿真模拟。 (3)vhdl语句的行为描述能力和程序结构,决定了它具有支持大规模设计的分解和已有设计的再利用功能。 (4)对于用vhdl完成的一个确定的设计,可以利用eda工具进行逻辑综合和优化,并自动地把vhdl描述设计转变成门级网表。 (5)vhdl对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。 (6)用vhdl语言编写的源程序便于文档管理,用源代码描述来进行复杂控制逻辑的设计,既灵活方便,又便于设计结果的交流、保存和重用。 (7)vhdl的设计不依赖于特定的器件,方便了工艺的转换。 (8)vhdl是一个标准语言,为众多的eda 厂商支持,因此移植性好。 3 vhdl的应用实例 本例子介绍的通信方式是pc机通过串行口的 rxd和txd直接与单片机89c2051通信,然后单片机再与目标器件fpga通信,这是一种实用的通信方式。设计的程序含与单片机通信的逻辑设计文件,其中应用了与单片机p1端口通信的双向端口 dinout 的 inout 模式,然后设计了 单片机的通信文件 fsend.asm 和 pc 机的通信文件ftest.c及ftest.exe。本设计的功能是将fpga在实验板上测得的频率 (频率范围1hz~50mhz)通过单片机89c2051送入pc机,并在屏幕上显示;同时将完成pc机、单片机和fpga的双向通信的功能。 文件名:freqtest.vhd library ieee; use ieee.std_logic_1164.all; entity freqtest is port (clk, fsin, p37 : in std_logic; dinout : inout std_logic_vector(7 downto 0); sel: in std_logic_vector(2 downto 0); dataout : out std_logic_vector(11 downto 0) ); end freqtest; architecture struc of freqtest is component testctl clr_cnt : out std_logic; load : out std_logic ); end component; component cnt10 port(clk:in std_logic; clr : in std_logic; ena : in std_logic; cq : out std_logic_vector(3 downto 0); carry_out : out std_logic ); end component; componet reg32b port(load : in std_logic; din : in std_logic_vector(31 downto 0); dout : out std_logic_vector(6 downto 0)); <
|