>
首页 » 技术文章 » FPGA/CPLD设计软件Active-HDL的特点与应用实例

FPGA/CPLD设计软件Active-HDL的特点与应用实例

作者:张宪起  时间:2006-12-03 21:55  来源:电子设计信息网-www.edires.net
摘要:本文介绍了Active-HDL 软件的设计流程和设计过程中的有关仿真,以RAM实例说明该软件的特点及内存的描述和仿真方法,以交通灯控制器为例介绍状态机的描述方法,以数码管动态扫描显示为例介绍测试文件(test bench) 的编写方法,以计数器为例介绍模拟波形显示功能。

关键词:Active - HDL;FPGA ;CPLD;Verilog-HDL; 仿真;模拟显示;状态机

1  引 言

Aldec公司推出的Active - HDL软件,是一个功能强大的FPGA/CPLD 设计和仿真软件, 它可以嵌入很多公司的第三方综合工具和布局布线工具,当嵌入相应的综合工具和布局布线工具,就可以完成时序仿真和程序下载。

Active - HDL是专用的FPGA/ CPLD 设计软件,具有很强的设计和仿真功能,但关于该软件使用方法的资料很少,一般只能根据软件提供的帮助文件来学习和使用该软件,鉴于此,本文通过举例来说明Active - HDL 软件的使用方法和该软件具有的特点。

2  Active - HDL 软件的设计流程和设计过程中的有关仿真

Active - HDL 软件的设计流程如图1所示。当启动Active - HDL 软件,开始进行设计的第一个界面就是设计流程管理(Design Flow Manager) ,从该界面的第一行可以了解到,该软件共有三种主要的输入方法———硬件描述语言输入( HDE) , 状态机输入( FSM) 和原理图输入(BDE) 。从整个界面可以看出,Active - HDL 软件可以进行三种仿真- - 功能仿真、综合后仿真和时序仿真。

图1  Active - HDL 软件的设计流程(Design Flow Manager 界面)

功能仿真是将采用硬件描述语言设计的程序直接送入仿真器所进行的仿真,该仿真只是根据VHDL 或Verilog 语法进行的,与具体电路没有关系,可以充分发挥仿真控制语句和预定义函数及库文件的作用。综合后仿真是将综合后的网表文件再送到仿真器中所进行的仿真,对描述的逻辑功能进行测试模拟,但不涉及具体器件的硬件特性,如延时特性,描述的电路与生成的EDIF/ XNF 等网表文件一致。

时序仿真,就是将布线器/ 适配器所产生的网表文件送到仿真器中所进行的仿真,该仿真已经将器件的特性考虑进去了,因此可以得到精确的时序仿真结果。

功能仿真与综合后仿真的区别是:功能仿真几乎可以编译所有的VHDL 或Verilog 语句,只是不同的软件支持的语句多少不同而已,而综合后仿真不能编译电路无法实现的行为描述语句,即综合器不能综合这类语句,比如我们在程序中设定第一个门到第二个门的延迟为5ns就不能综合,因为门延迟由器件的工艺参数决定的,在实际中不能由人为定义,但在功能仿真中却可以做到这一点,所以说功能仿真是理想化的仿真。

综合后仿真与时序仿真的区别是,综合后仿真仍然属于对设计中逻辑功能的模拟测试,仿真的结果不包括器件的硬件特性,如延时特性,而时序仿真是对硬件特性的仿真,不仅包括逻辑功能的模拟测试,还包括门的延迟信息,与实际硬件运行的结果非常接近,可以得到精确的时序仿真结果。

在Active-HDL软件中这三种仿真均可以进行,Active-HDL软件本身提供的是功能仿真,当Active-HDL调用指定的逻辑综合工具,把设计进行综合后,就可以进行综合后仿真,当Active-HDL 调用指定的布局布线工具,把设计进行布局布线后,就可以进行时序仿真。

3  以RAM 为例说明Active - HDL软件的特点及内存的描述和仿真方法

RAM的设计我们采用Active - HDL 软件的第一种输入方法- - 硬件描述语言输入(HDE) 来实现,图2 为RAM的Verilog HDL 源程序。此RAM 的Verilog HDL 源程序描述的硬件电路的端口定义为: data为8 位三态数据总线, addr为8 位地址总线输入, read为RAM读信号输入,write为RAM 写信号输入。

图2  RAM 的Verilog HDL 源程序

此RAM 的读写控制时序为: 当read (读信号) 为低电平时,在write (写信号) 的上升沿到来时,数据总线( data) 上的数据按地址线(addr) 给出的地址写入相应的RAM 单元,当read (读信号) 为高电平,且write (写信号) 保持不变(低电平或高电平均可) 时,在地址总线上送入不同的地址,就可以把RAM 中相应地址的数据读到数据总线上,这样就完成了RAM 的读写操作。当硬件描述程序编写完成且编译通过后,就要进行仿真,以验证程序的正确性,测试程序的初始化定义和调用可由软件自动生成(Active -HDL 软件仿真提供的特有功能,在后面有详细介绍) ,我们只需要填写激励向量就可以,图3 为RAM 的测试程序( test bench) 中的激励向量部分,我们将在后面的例子中详细介绍整个测试程序的编写法。

图3  RAM 的测试程序(test bench)

此测试程序的激励向量是用initial (初始化语句) 语句来编写的,第一个repeat 循环向RAM 中写入32 组数据,第二个repeat 循环从RAM 的相应地址读32 组数据到数据总线上。图4 为RAM 的仿真波形,可以看到当read(读信号) 为低电平时,在write (写信号) 的上升沿把数据总线的数据按addr 给出的相应地址写入RAM ;当read (读信号) 为高电平,write (写信号) 保持不变(低电平或高电平均可,这里设定为低电平) ,在地址线送入不同的地址,把RAM 中相应
地址的数据读到数据总线上。

图4  RAM 的仿真波形

Active - HDL 软件还可以很方便的查看模拟内存(RAM) 的读写情况,在仿真时,计算机分配实际的内存来模拟RAM ,分配内存的大小与所定义RAM 的大小相同。图5为查看模拟内存中写入数据的情况,并且地址和数据可以选择以十进制、十六进制、十进制、二进制显示,这给调试程序带来很大方便。本设计的仿真中,只写入了32 组数据,并且写入的数据值和存入的地址值相同,即在00~1F地址中,相应写入了00~1F数据。

图5  查看模拟内存中写入的数据

4  以交通灯控制器为例介绍Active-HDL软件状态机的描述方法

状态机描述是Active -HDL软件特有的描述方式,它是以画状态图的方式来描述硬件,非常直观、简洁、易于修改。下面我们用画状态图的方法描述一个交通灯控制器,设交通岗的A、B 方向各有红(R) 、黄( Y) 、绿( G) 和左拐(L) 四盏灯,四种灯的转换顺序及时间设置如表1 所示,并且能将灯亮的时间以倒计时的形式显示出来,同时我们假设A 方向是主干道,车流量大,因此A 方向的通行时间比B 方向长,并且用1 表示灯亮,用0表示灯灭。



图6 为A 方向的状态转换图(B 方向的状态转换图与此相似) ,此状态机设计的是一个同步状态机,当en = 0 并且在时钟的上升沿,状态机进行初始化,并且在初始化完成后进入agreen 状态。以后的每一个状态都包括以下几部分的描述:进入状态的条件,进入状态时要执行的动作,状态自身转移时执行的动作,离开此状态的条件,离开此状态伴随的动作。以红灯(ared) 状态为例,进入ared 状态的条件是黄灯倒计时完成(anum = 0) ;进入此状态时要执行的动作是红灯亮(ar = 1) ,并且给红灯倒计时赋初值(anum = red) ;状态自身转移要执行的动作是每当时钟的上升沿到来,把红灯的倒计时时间减1 (anum = anum - 1) ;离开此状态的条件是红灯倒计时完成(anum = 0) ;离开此状态伴随的动作是把红灯熄灭(ar = 0) 。

图6  A 方向的状态转换图

当把A方向和B方向的状态图都画完后,用原理图把它们连接起来,就完成了整个交通灯控制器的设计,原理图的连接很简单,这里不再缀述。图7为整个交通灯控制器测试文件的激励向量部分,每隔10ns ,时钟(clk) 翻转一次,即时钟周期为20ns,初始化(initial) 语句描述的意义为,在0时刻,时钟和使能端(en) 均为0 ,在50ns时,使能端为1,仿真开始,在2550 (50+2500)ns时,仿真结束。

图7  交通灯控制器测试文件的激励向量

图8 为交通灯控制器的仿真波形,可以看到在时钟的驱动下,A 方向控制灯转换的顺序依次为ag —ay —al —ay —ar ( 在ag —ay —al —ay 转换阶段,B 方向的红灯br 始终点亮,确保B 方向禁止通行) ;B 方向控制灯转换的顺序依次为bg —by —bl —by —br (在bg —by —bl —by 转换阶段,A 方向的红灯ar 始终点亮,确保A 方向禁止通行) ,anum 为A方向的倒计时时间显示,bnum 为B 方向的倒计时时间显示。

图8  交通灯控制器的仿真波形

5  以数码管动态扫描显示为例介绍程序测试文件的编写方法

此数码管动态扫描显示程序完成的功能是:把四组(每组4 位) 输入- led1 、led2 、led3 、led4 用一组(8 位) 段码- ledcode 和一组(4 位) 位码-dip 动态扫描显示输出。图9 为数码管动态扫描显示程序,在程序的端口说明部分,定义了四组(每组4 位) 输入- led1、led2 、led3 、led4 ,分别为要在四个数码管上显示的数据输入;定义了一组(8 位) 段码输出- ledcode ,用来控制四个数码管的8 个数据位;定义了一组(4 位) 位码输出- dip ,分别用来控制四个数码管的公共端(数码管8 个数据位的共阴或共阳端) 。在时钟的驱动下,段码和位码相互配合,就可以把要显示的led1 、led2 、led3 、led4 四个数据分别显示在四个数码管上。

图9  数码管动态扫描显示程序

用Active - HDL 软件进行仿真时,有三种方法可以给出激励向量(仿真的输入波形) ,第一种是像MAX + plus Ⅱ一样画出输入波形, 但与MAX + plus Ⅱ相比,Active - HDL 软件要灵活的多,比如它可以用公式法给出复杂波形,可以用热键法随时改变输入状态等。第二种是编写测试文件,这是大多数设计软件采用的方法,下面要详细介绍的也是测试文件的编写规则。第三种是Active - HDL 软件特有的,也是最诱人的,它可以自动生成测试文件的头和尾,你需要做的只是填写激励向量,然后生成批处理( . EXE) 文件,自动给出测试波形,完成仿真,这将给仿真工作节省很多时间,因为Active - HDL 软件有生动的Flash 帮助文件,且用法简单,这里不再赘述。

图10 为数码管动态扫描显示的测试程序,timescale 用来定义时间单位(这里定义为ns) ;所有的输入都定义为寄存器型( reg) ,所有的输出都定义为线型(wire) ;测试程序对源程序的调用要确保调用语句的端口排列顺序与源程序端口定义的排列顺序一致; always 语句为重复执行语句,它可以给出周期性的时钟信号;initial 语句为初始化语句,只执行一次; # 10表示10个时间单位, # 650 $finish 表示在670 (10 + 10 + 650) 个时间单位时仿真结束。

图10  数码管动态扫描显示测试程序

图11 为数码管动态扫描显示仿真波形,可以看到在时钟的驱动下,位码向右移位,同时在相应的位码有效时,此位的段码有效(本程序为了便于阅读者观察,没有加段码的译码电路,在实际应用中,在程序中加一个译码电路模块即可) ,这样就完成了动态扫描过程。

图11  数码管动态扫描显示仿真波形

6  以计数器为例介绍Active-HDL软件的模拟波形显示功能
模拟波形显示功能也是Active-HDL 软件别具特色的功能,它可以很方便的把具有模拟特性的数字量用模拟的方式显示出来,这给某些带有D/A转换器的设计带来很大方便,比如在进行DDS设计时,就需要把数据进行D/A转换,在用计算机进行仿真时,查看从ROM读出的数字量很难辨别设计的正确与否,只有把它们转化成模拟量来显示才能验证设计的正确性。例如当用MAX+plusⅡ软件设计DDS时,就要借助第三方的Matlab等软件来进行仿真, 很不方便, 而Active - HDL软件自带的模拟显示功能,使它具备了这一特性,给仿真工作带来很大方便。

这里我们以同步复位的8 位计数器为例,介绍Active-HDL软件的模拟波形的显示功能(计数器的模拟显示为锯齿波) ,图12 为同步复位的8 位计数器Verilog HDL 源程序,每当时钟的上升沿到来时,计数器输出加1 ,所以在时钟的驱动下,计数器在0~255 之间循环往复。图13 为同步复位的8 位计数器模拟波形显示(锯齿波)。


图12  同步复位的8 位计数器Verilog HDL 源程序

图13  同步复位的8 位计数器模拟波形显示(锯齿波)

相关推荐

没有退路的FPGA与晶圆代工业者

FPGA  晶圆代工  2014-01-03

采用FPGA的可编程电阻的设计结构分析

FPGA  电阻  2013-09-24

从FPGA的制程竞赛看英特尔与Fabless的后续变化

FPGA  Fabless  2013-07-16

物联网融合自动化推动高效生产模式变革

物联网  FPGA  SoC  2013-07-09

14纳米FPGA展现突破性优势

14纳米  FPGA  2013-06-20

高清视频监控FPGA应用迎来小高峰

视频监控  FPGA  2013-06-20
在线研讨会
焦点