VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。
(4) VHDL 语言的设计描述与器件无关
采用 VHDL 语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。当硬件电路的设计描述完成以后,VHDL 语言允许采用多种不同的器件结构来实现。 (5) VHDL 语言程序易于共享和复用
VHDL 语言采用基于库的设计方法。在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。
本次我所要设计的基于VHDL语言的八位数码管显示将充分体现它的部分优点。
2 总体设计方案
2.1 输入引脚数目的计算
因为题目要求数码管要能显示最大的八位十进制二进制数,所以对应的二进制表示的十进制数首先要大于99999999,即2的所有n次幂之和应该大于99999999,数码管才能显示出最大的八位十进制数,所以计算可得n的值最小为27,所以输入二进制数的引脚应该设为27个,其二进制数输入引脚图如图1所示
6
图1 二进制数输入引脚图
2.2 二进制转为十进制部分程序设计 二进制转为十进制的部分程序如下: architecture one of look is
signal ai,bi,ci,ki,ei,fi,gi,hi:integer range 0 to 9; signal di:integer range 0 to 99999999; begin
di<=conv_integer(d); 2.3 数码管显示部分程序设计
2.3.1 程序中数码管的选择及显示的设置
在本设计中按照我的程序硬件所选用的应该为共阴极数码管,且当某一位数码管不需要显示数据时,统一设定其显示0,例如需要显示1时,八个数码管的显示为00000001。
2.3.2 数码管显示部分部分程序如下: …………
variable a,b,c,k,e,f,g,h:integer range 0 to 9; begin a:=di rem 10;
7
b:=(di-a) rem 100; c:=(di-a-10*b) rem 1000; k:=(di-a-10*b-c*100) rem 10000; e:=(di-a-10*b-c*100) rem 100000; f:=(di-a-10*b-c*100-1000*e) rem 1000000;
g:=(di-a-10*b-c*100-1000*e-10000*f) rem 10000000; h:=(di-a-10*b-c*100-1000*e-10000*f-100000*g)/10000000; ai<=a; bi<=b; ci<=c; ki<=k; ei<=e; fi<=f; gi<=g; hi<=h; end process; process(ai) begin case ai is
when 0=>led7s1(6 downto 0)<=\ when 1=>led7s1(6 downto 0)<=\ when 2=>led7s1(6 downto 0)<=\ when 3=>led7s1(6 downto 0)<=\ when 4=>led7s1(6 downto 0)<=\
8
when 5=>led7s1(6 downto 0)<=\ when 6=>led7s1(6 downto 0)<=\ when 7=>led7s1(6 downto 0)<=\ when 8=>led7s1(6 downto 0)<=\ when 9=>led7s1(6 downto 0)<=\ when others=>led7s1(6 downto 0)<=\end case; end process; …………
2.3.3 数码管显示部分引脚图
数码管显示部分部分引脚图如图2 所示
9
图 2 数码管显示部分部分引脚图
2.2.4 总体设计程序见附表1
3 仿真显示
3.1 显示“000000003”仿真图
显示数字“3”的仿真图如图3所示,因为根据程序所需数码管为共阳极数码管,所以数码管对应的“e”,“f”段应该为高电平,在本次设计中,即数码管的第5,6段为高电平,为了便于观察,仿真的各项周期均取10ns。
图3 显示“3”电路 3.2 显示“96”部分仿真图,如图4所示
10