中北大学信息商务学院2009届本科毕业设计任务书
3.2.3 VHDL语言的优越性
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 (2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
(6)设计层次较高、用于较复杂的计算时,能尽早发现存在的问题,缩短设计周期。独立实现,修改方便,系统硬件描述能力强。可读性好,有利于交流,适合于文档保存。而且VHDL语言标准、规范、移植性强。
(7)VHDL类型众多而且支持用户自定义类型,支持自顶而下的设计方法和多种电路的设计。VHDL是一种具备形式化、层次化和规范化的硬件描述语言,它能针对设计实体的多方面特性,给出不同层次上的表达方式、结构描述、数据流描述和行为描述。
3.2.4 用VHDL进行电路系统设计流程
设计输入:把我们的设计思想,算法或电路的功能,行为,结构等用文本或者图形的方式输入计算机,以便让它自动实现我们的设计。输入方法一般有:HDL(VHDL,Verilog),状态机和原理图。
编译:目的是生成仿真使用或者进行下一步处理的格式。
验证:又有称模拟或仿真,主要是检验设计是否达到预期的目的。
综合:把设计输入转变成可以实现的电路形式(门,触发器),一般有VHDL 代码翻译,最小化及满足时间约束(此过程人做叫设计,计算机做叫综合)。最小化是指布尔函数的化简等工作。系统设计流程图为下图所示:
第 11 页 共33 页
中北大学信息商务学院2009届本科毕业设计任务书
设计要求定义 设计输入 编译 验证 综合 编译 验证 设计实现 时序仿真 芯片编程
图3.2 VHDL 系统设计流程
设计实现:包括工艺映射、优化、布局布线等步骤。工艺映射是在工艺元件库的同一元件的多种实现中选择一种;优化是最小化和工艺库在发生冲突时根据代价的折衷过程;布局是在资源阵列中安排一个元件或功能块的位置(考虑面积约束);布线是进行元件或功能块的连接(考虑时间约束)。 3.2.5 VHDL程序的基本结构
一个完整的VHDL 程序含有五个部分:实体,结构体,配置,程序包及库。我们用下面的来表示五部分在程序设计中的相对位置。
库:是经编译后的数据的集合,它存放包集合定义,实体定义,结构定义和配置定义;VHDL 的库有五类:IEEE,STD,ASIC 矢量库,WORK 库和用户定义库;库的声明总是在设计单元的最前端。
程序包:用来罗列VHDL 中要用到的信号定义,常数定义,数据类型,元件语句,函数定义,过程定义等。程序包的使用格式为:USE 库名.包集合名.ALL。
实体:描述元件的外观或者是对外的接口信号,相当于元件或芯片的引脚定义。 构造体:描述系统、元件或电路的行为、功能或者结构的封装体,对外是不可见的。构造体内部的语句必须是是并行语句,这是由硬件的并发性特点决定的。结构体的描述是VHDL 的核心部分。
配置:是层与层之间的连接关系,以及实体与结构体之间的连接关系;层与层之间的连接元件调用,模块的调用等,实体与结构体之间的连接是在多个实现的结
第 12 页 共33 页
中北大学信息商务学院2009届本科毕业设计任务书
构体中选择要进行模拟的结构体。VHDL程序的基本结构为下图所示:
图3.3 VHDL 程序的基本结构
4 交通灯的设计要求及程序说明
4.1 设计任务要求 4.1.1 设计功能要求
(1)通常情况下,大道绿灯亮,小道红灯亮。
(2)若小道来车,大道经6秒由绿灯变为黄灯;再 经过4秒,大道由黄灯变为红灯,同时,小道由红灯变为绿灯。
(3)小道变绿灯后,若大道来车不到3辆,则经过 25秒钟后自动由红灯变为黄灯,再经过4秒变为红灯,同时,大道由红灯变为绿灯。
(4)如果小道在绿灯亮时,小道绿灯亮的时间还没有到25秒,只要大道检测到已经超过3辆车在等候,那么小道应立即由绿灯变为黄灯,再经过4秒变为红灯,同时,大道由红灯变为绿灯。 4.1.2 设计原理
此交通灯系统包含四个状态:大道绿灯小道红灯、大道黄灯小道红灯、大道红
灯小道绿灯、大道红灯小道黄灯,最后又回到大道绿灯小道红灯。这几个状态之间的时间间隔分别为6、4、25、4秒。可以用4选一数据选择器来控制计数器的进制,使计数器在相应的状态完成相应的功能。彩灯显示模块要采用动态扫描方式,实现大路小路分时显示。原理框图为下图所示:
第 13 页 共33 页
中北大学信息商务学院2009届本科毕业设计任务书
控制 模块 计时 模块 扫描 电路 数码管 彩灯模块 扫描 电路 彩灯系统 4.2 程序说明 4.2.1 定义参数
图4.1 程序原理框图
首先进行数据库的定义,程序中涉及用到了3个数据库具体程序库的调用如下。 library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
再定义greenbig为大道的绿灯,redbig 为大道的红灯,yellowbig 为大道的黄灯。同理可定义greensmall 为小道绿灯yellowsmall 为小道的黄灯,redsmall 为小道的红灯。程序是 small
big
: in std_logic;
: in std_logic_vector(2 downto 0);
greenbig : out std_logic; redbig : out std_logic; yellowbig
: out std_logic;
greensmall : out std_logic;
yellowsmall : out std_logic;
redsmall : out std_logic
就是在定义大道和小道的红、黄、绿灯的程序段。在开始我设定的状态就是大道和小道的6个灯都处在熄灭点亮的状态。开始状态,即6盏灯全熄灭的程序段是 signal
f_greenbig : std_logic:='0';
第 14 页 共33 页
中北大学信息商务学院2009届本科毕业设计任务书
signal signal signal
f_redbig : std_logic:='0'; f_yellowbig
: std_logic:='0';
f_greensmall : std_logic:='0';
signal f_yellowsmall : std_logic:='0'; signal
f_redsmall : std_logic:='0';
定义clk 为一个循环为1秒的程序段,该程序就是为了在7段数码管程序段读取的时候每读一段就要花费1秒的时间。具体的程序如下。
begin
if fosc'event and fosc='1' then
count<=count+1;
if count=\
clk<=not clk;
count<=\
end if;
end if;
end process p0;
该程序具体的说明是在得到上升沿的时候,执行count<=count+1直到使得count=\语句成立为止,然后clk 取反,count 清零。这个程序执行1次的时间是1秒。
再定义delay为7段数码管,具体的7段数码管的参数和特点在2.5.1已经做了非常从分的介绍,现在就对程序做出解释和阐述。具体程序为:
dataz(0)<=\
dataz(1)<=\ dataz(2)<=\ dataz(3)<=\
dataz(4)<=\
dataz(5)<=\ dataz(6)<=\ dataz(7)<=\
第 15 页 共33 页