0 引言
仿真(simulation)是在电子系统设计过程中用来对设计的硬件描述和设计结果进行查错、验证的一种方法。当用 VHDL语言描述一个电子系统后,需要验证其正确性,在分层次自上而下对大规模电路进行设计,对电路功能、行为的描述,到各层次的设计结果,每个阶段都需要进行正确性验证,以确保设计中的错误早期发现、早期排出[1]。所以,仿真是利用VHDL语言进行硬件设计的一个必不可少的步骤,它贯穿于设计的整个过程中[2]。
1 基于VHDL语言的 EDA设计流程[3-5]
系统设计流程采用自上至下的设计方法,大致分为三个层次对系统硬件进行设计:
第一层次是行为描述。所谓行为描述就是对整个系统的数学模型的描述。目的是试图在系统设计的初级阶段通过对系统行为描述的仿真来发现设计中存在的问题。
第二层次是RTL方式描述。即寄存器传输描述(数据流描述)。要想得到硬件的具体实现,必须将行为方式描述的语言(VHDL)程序改写为RTL方式描述得语言。即系统采用RTL方式描述,才能导出系统的逻辑表达式才能进行逻辑综合。完成编写RTL方式描述程序后对其程序进行仿真,通过RTL仿真就可以下边的逻辑综合了。
第三层次是逻辑综合。利用逻辑综合工具,将RTL方式描述的程序转化成用基本逻辑元件表示的文件(门级网络表)。逻辑综合的结果相当于在人工设计硬件电路时,根据系统要求画出的系统的逻辑电原理图。之后对逻辑综合结果在门电路级上再进行仿真,并检查定时关系。若一切正常,系统的硬件设计就结束。
自上而下的硬件电路设计过程,设计过程包含三个层次的次仿真:行为级仿真、RTL级仿真和门级仿真,每一步进行仿真检查,这些仿真奠定了系统的正确性、定时性和可行性,从而检验程序的正确性、合理性和优化性。这样就能尽早发现设计中的问题,从而大大缩短系统硬件的设计周期。通过三个层次仿真的基于VHDL 语言的 EDA设计流程如图1.1所示。

图1.1 基于VHDL语言的 EDA设计流程
2 电子系统设计与仿真
2.1 秒表的设计思想
秒表由复位开关(reset_sw),启/停开关(start_stop_sw),系统电源复位电路(sysres),时钟脉冲发生器(clk),7段 LED显示器和计时控制芯片组成。完整的计时控制结构由键输入子模块(keyin),时钟产生子模块(clkgen),控制子模块(ctrl),定时计数子模块(cntblk)和显示子模块(disp)5个模块构成。具体秒表控制芯片的结构和整体框图如图2.1.1所示。本设计中,时钟由实验箱上的晶振产生,复位开关和启/停开关是外部按键,由电平开关完成。系统复位作为扩展用,在这里也可用电平开关完成。控制芯片的输出送给实验箱上的子板辅助部分的数码显示来完成。这样就可以看到计时秒表随着时钟的变化不断的变化。

图2.1.1秒表控制芯片的结构和整体框图
2.2控制芯片5个模块的仿真结果
通过程序优化,进一步减小系统所需资源,在此基础上完成行为和RTL级的仿真。
(1)键输入子模块(keyin)
复位开关reset_sw和启/停开关start_stop_sw都是高电平有效。在复位开关reset_sw按下以前reset_sw=0,在 keyclk下降沿有效时进程被启动。每按一下即reset_sw=1,keyclk的下降沿有效,在出现第二个keyclk脉冲时进程再次被启动,并且当clk的上升沿到来时,在res端产生一个res复位脉冲。同理,每按一下启/停开关start_stop_sw产生一个stst复位脉冲。两种复位脉冲的宽度均与keyclk的脉冲宽度一样,两种脉冲产生的电路结构一样。键输入子模块(keyin)仿真波形如图2.2.1。

图2.2.1 键输入子模块(keyin)仿真波形 图2.2.2时钟产生子模块(clkgen)仿真波形