

图3 计数模块模块实体说明
Fig 3 Entity discription of the counter
4.1.4 实现算法
通过计数模块功能描述可以得出计数模块基本流程,流程图如图4所示。
图4 计数模块进程
Fig 4 process of the counter
4.1.5 元件符号图
原理图输入方式是FPGA/CPLD设计的基本方式之一,几乎所有的设计环境都集成有原理图输入方法。这种设计方法直观、易用、支撑它的是一个功能强大、分门别类的器件库。然而由于器件库元件通用性差,导致其移植性差,如更换设计实现的芯片信号或厂商不同时,整个原理图需要做很大修改甚至是全部重新设计。所以原理图设计方式主要是一种辅助设计方式,更多的应用于混合设计中的个别模块设计。大多数人喜欢用图来表示一个设计,因为原理图能更清楚的显示不同设计模块的关系。
由于原理图提供图形表示,因此它的使用更流行。很多年来,原理图被认为是一张最优的设计方法,但随着电子技术的发展,电路越来越复杂,器件密度越来越大,这又使得利用原理图设计感到了能力有限,而且也是一件非常耗时的工作。
根据进程的算法流程图,我们容易编写对应的计数模块的VHDL代码,把该模块的已经编写好的VHDL代码在Quartus II平台上运行,进行编译与调试。编译成功之后,建立计数模块的符号元件,就可以得到计数模块的元件符号图如图5所示。
图5 计数模块元件符号图
Fig 5 Component symbol diagram of the counter block
4.1.6 仿真
模块编译成功,只能说明设计符合一定的语法规范,但其是否满足设计者的功能要求并不能保证,这需要设计者通过仿真对设计进行验证。仿真的目的就是在软件环境下,验证电路的行为和设想中的电路功能是否一致。
仿真就是对设计项目进行全面彻底的测试,以确保设计项目的功能和时序特性,以及最后的硬件器件的功能与原设计相吻合。仿真可分为功能仿真和时序仿真。功能仿真只测试设计项目的逻辑行为,而时序仿真则既测试逻辑行为,也测试实际器件在最差条件下设计项目真是运行情况。
仿真操作前必须利用QuartusII波形编辑器建立一个矢量波形文件(.VWF)作为仿真激励。VWF文件将仿真驶入矢量和仿真输出描述称为波形的图形来实现仿真,但也可以将仿真激励矢量用文本表达,即文本方式的矢量文件(.vec)。
QuartusII允许对真个设计项目进行仿真测试,也可以对该设计中的任何子模块进行仿真测试。对工程的编译通过后,必须对其功能和时序进行仿真,以了解设计结果是否满足原设计要求。
计数模块的仿真:当RESET起始状态设为高电平时,NUM将为0。CLK为1HZ并且在上升沿时改变NUM的数值,当NUM到49时再重新赋值为0。当HOLD为高电平时,NUM的数值不改变,变为低电平时,NUM恢复。仿真结果与预设功能相符,仿真图如图6所示。
图6 计树模块的仿真图
Fig 6 Simulatiom diagram of the counter
4.2 控制模块的设计
4.2.1 控制模块功能描述
根据输入端口NUM的值,来确定STATE的状态,进而确定交通信号灯的信号和倒计时间。当NUM小于20时STATE一直保持状态S0,交通灯信号为GA<=1,YA<=0,RA<=0,GB<=1,YB<=0,RB<=0;倒计时间NUMA赋值为20减去NUM,NUMB赋值为25减去NUM。当NUM等于20时STATE转化为状态S1。当NUM小于25时STATE一直保持状态S1,交通灯信号为GA<=0,YA<=1,RA<=0,GB<=0,YB<=0,RB<=1;倒计时间NUMA赋值为25减去NUM,NUMB赋值为25减去NUM。当NUM等于25时STATE转化为状态S2。当NUM小于45时STATE一直保持状态S2,交通灯信号为GA<=0,YA<=0,RA<=1,GB<=1,YB<=0,RB<=0;倒计时间NUMA赋值为50减去NUM,NUMB赋值为45减去NUM。当NUM等于45时STATE转化为状态S3。当NUM小于49时STATE一直保持状态S3,交通灯信号为GA<=0,YA<=0,RA<=1,GB<=0,YB<=1,RB<=0;倒计时间NUMA赋值为50减去NUM,NUMB赋值为50减去NUM。当NUM等于49时STATE转化为状态S0。
4.2.2 输入/输出信号说明
根据控制模块功能描述和总体框图,得到控制模块的输入/输出信号,对输入输出信号的详细说明如下:
输入端口说明:
RESET:交通灯控制器复位控制键,当RESET=1时,控制模块中的枚举信号STATE
将被赋值为S0状态。当RESET=0时,控制模块中的枚举信号STATE正常转换。RESET采用1位2进制来表示,用VHDL定义为RESET:INT SDT_LOGIC。
CLK:系统基准时钟信号,频率为1HZ。CLK与枚举信号STATE的状态改变有关,将在下降沿时改变枚举信号STATE的状态。CLK采用1位2进制来表示,用VHDL定义为CLK:INT SDT_LOGIC。转贴于 酷文网-论文下载中心 http://www.coolwen.net