电子设计自动化中的硬件描述语言

出处:davidlin 发布于:2007-04-29 10:28:04

冼凯仪
(佛山科学技术学院,广东 佛山 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

PORT ( CLK : IN STD_LOGIC; TSTEN : OUT STD_LOGIC;

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));

END COMPONENT;

SIGNAL TSTEN1, CLR_CNT1, Load1, K1,K2,K3 : STK_LOGIC;

SIGNAL DTO1, DOUT : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL CLOCK1,CLOCK2,CLOCK3:STD_LOGIC;

SIGNAL DATA : STD_LOGIC_VECTOR(11 DOWNTO 0);

SIGNAL DAT : STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

U1:TESTCTL PORT MAP( CLK => CLK1, TSTEN => TSTEN1,

CLR_CNT => CLR_CNT1, Load => Load1);

U2 : REG32B PORT MAP( Load => Load1, DIN => DTO1,DOUT => DOUT);

U3 : CNT10 PORT MAP( CLK => FSIN, CLR => CLR_CNT1,ENA => TSTEN1,

CQ => DTO1(3 DOWNTO 0), CARRY_OUT => CARRY_OUT1(0) );

U4 : CNT10 PORT MAP( CLK => CARRY_OUT1(0), CLR => CLR_CNT1,

ENA =>TSTEN1, CQ =>DTO1(7 DOWNTO 4),

CARRY_OUT => CARRY_OUT1(1) );

U5 : CNT10 PORT MAP( CLK => CARRY_OUT1

(1), CLR => CLR_CNT1,

ENA=>TSTEN1,CQ => DTO1(11 DOWNTO 8),

CARRY_OUT => CARRY_OUT1(2) );

U6 : CNT10 PORT MAP( CLK => CARRY_OUT1

(2), CLR => CLR_CNT1,

ENA=>TSTEN1,CQ =>DTO1(15 DOWNTO 12),

CARRY_OUT => CARRY_OUT1(3) );

U7 : CNT10 PORT MAP( CLK => CARRY_OUT1

(3), CLR => CLR_CNT1,

ENA=>TSTEN1,CQ=>DTO1(19 DOWNTO 16),

CARRY_OUT => CARRY_OUT1(4) );

U8 : CNT10 PORT MAP( CLK => CARRY_OUT1

(4), CLR => CLR_CNT1,,

ENA=>TSTEN1,CQ =>DTO1(23 DOWNTO 20),

CARRY_OUT => CARRY_OUT1(5) );

U9 : CNT10 PORT MAP( CLK => CARRY_OUT1

(5), CLR => CLR_CNT1,

ENA=>TSTEN1,CQ=>DTO1(27 DOWNTO 24),

CARRY_OUT => CARRY_OUT1(6) );

U10: CNT10 PORT MAP( CLK => CARRY_OUT1

(6), CLR => CLR_CNT1,

ENA=>TSTEN1,CQ=>DTO1(31 DOWNTO 28));

Sch : PROCESS(SEL)

BEGIN

CASE SEL IS

WHEN ''000'' => DINOUT <= DOUT(7 DOWNTO 0); K1 <='0' ; K2 <='0'; K3 <='0';

WHEN ''001'' => DINOUT <= DOUT(17 DOWNTO 8); K1 <='0'; K2 <='0'; K3 <='0';

WHEN ''010'' => DINOUT <= DOUT(23 DOWNTO 16); K1 <='0'; K2 <='0'; K3 <='0';

WHEN ''011'' => DINOUT <= DOUT(31 DOWNTO 24); K1 <='0'; K2 <='0'; K3 <='0';

WHEN ''100'' => DAT <= DINOUT; K1 <='1' ;

WHEN ''101'' => DAT <= DINOUT; K2 <='1' ;

WHEN ''110'' => DAT <= DINOUT; K3 <='1' ;

WHEN OTHERS=>K1<= '0' ; K2 <='0' ; K3 <='0' ;

END CASE;

END PROCESS;

CLOCK1 <=K1 AND P37 ; CLOCK2 <=K2 AND P37 ; CLOCK3 <=K3 AND P37;

KK1: PROCESS(CLOCK1)

BEGIN

IF CLOCK1' EVENT AND CLOCK1 ='1' THEN

DATA(3 DOWNTO 0)<=DAT(7 DOWNTO 4);

END IF;

END PROCESS;

KK2: PROCESS(CLOCK2)

BEGIN

IF CLOCK2' EVENT AND CLOCK2 = '1' THEN

DATA(7 DOWNTO 4)<=DAT(7 DOWNTO 4);

END IF;

END PROCESS;

KK3: PROCESS(CLOCK3)

BEGIN

IF CLOCK3' EVENT AND CLOCK3 = '1' THEN

DATA(11 DOWNTO 8)<= DAT(7 DOWNTO 4);

END IF;

END PROCESS;

DATAOUT <= DATA ;

END struc;

运用EDA开发系统GW48-CK 进行电路调试:①电路结构选N0.5;②引脚锁定为: P37→25;SEL(0..2)→23,22,21;DINOUT(0..7)→39,47, 48,49,50,51,52,53;③设目录sendfre 中的FREQTEST为工程文件,向目标芯片; ④按模式选择键至“5”;⑤在纯DOS下执行sendfre 目录内mcucom目录中的通信文件ftest.exe,再按动实验板的“系统复位键”数秒后, PC机屏幕上将显示FPGA所测得的频率值;⑥用PC机键盘输入几位数字,按回车键,屏幕上将显示测得的频率,同时实验板的数码管将显示PC机键盘输入的数字。

4 小结

EDA是以计算机的硬件和软件为基本工作平台集数据库、图形学、图论与拓扑逻辑、计算数学、优化理论等多学科成果研制的计算机辅助设计通用软件包。EDA技术是电子技术发展的趋势。利用EDA工具不仅可以代替设计者完成电子系统设计中的大部分工作而且对提高我国电子产品设计制造水平、提高产品质量、增强产品竞争力都有十分重要的意义。

本文摘自《半导体技术》


  
关键词:电子

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!