vhdl按键控制数码管显示

HDL语言及源代码

6人已加入

描述

在传统的硬件电路设计中,主要的设计文件是电路原理图,而采用HDL设计系统硬件电路时主要使用HDL编写源程序。

VHDL的主要优点有:

(1)VHDL支持自顶至下的和基于库的设计方法,而且支持同步电路、异步电路、现场可编程门阵列器件FPGA(field programmable gate array)以及其他随机电路的设计。

(2)VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计再利用的功能,它支持系统的数学模型直到门级电路的描述,并且高层次的行为描述与低层次的门级电路描述、结构描述可以混合使用。(3)VHDL的硬件描述与具体的工艺技术和硬件结构无关,当门级或门级以上的描述通过仿真检验后,再利用相应的工具将设计映射成不同的工艺,因此电路的设计与工艺的改变是相互独立的。彼此的改变不会产生不良影响,并且VHDL硬件描述语言的实现目标器件的选择范围广泛,可使用各系列的CPLD、FPGA及各种门阵列器件。

(4)VHDL具有类属描述语句和子程序调用等功能,对于己完成的设计源程序,可以通过修改类属参数表和函数的办法来改变设计的规模和结构。VHDL具有丰富的仿真语句和库函数,使得门电路级的功能仿真、检查成为可能,使设计者对整个工程设计的结构和功能的可行性做出决策。

(5)VHDL作为一种IEEE的工业标准,使VHDL的设计成果便于重复利用和交流。这就更进一步推动了VHDL语言的推广及完善。另外,由于其语法严格,给阅读和使用带来极大的便利。

硬件设计

vhdl

软件设计

本设计的VHDL程序主要有共有3个部分:分频、数码管扫描进程、显示控制进程。方案原理图如下。

vhdl

完整程序:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY key IS

PORT(clk : IN STD_LOGIC;

key : in std_logic_vector(7 downto 0);

l : out STD_LOGIC_VECTOR(2 downto 0);

data_o : out STD_LOGIC_VECTOR(7 downto 0);

bell : out STD_LOGIC:=‘0’

);

END key;

ARCHITECTURE an OF key IS

signal clk_1k : std_logic;

signal p : integer range 0 to 7;

begin

process(clk)

variable cnt1 : integer range 0 to 200;

variable cnt2 : integer range 0 to 125;

begin

if clk‘event and clk=’1‘ then

if cnt1=200 then

cnt1:=0;

if cnt2=125 then

cnt2:=0;

clk_1k《=not clk_1k;

else

cnt2:=cnt2+1;

end if;

else

cnt1:=cnt1+1;

end if;

end if;

end process;

process(p,clk_1k)

begin

if clk_1k=’1‘ and clk_1k’event then

if p=7 then

p《=0;

else

p《=p+1;

end if;

end if;

case p is

when 0 =》 l《=“000”;

when 1 =》 l《=“001”;

when 2 =》 l《=“010”;

when 3 =》 l《=“011”;

when 4 =》 l《=“100”;

when 5 =》 l《=“101”;

when 6 =》 l《=“110”;

when 7 =》 l《=“111”;

when others=》

end case;

end process;

process(clk_1k)

FUNCTION b_to_s7(bcd8421:INTEGER RANGE 0 TO 9) RETURN STD_LOGIC_VECTOR IS

VARIABLE smg7: STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

CASE bcd8421 IS

WHEN 0 =》 smg7:=“11111100”;

WHEN 1 =》 smg7:=“01100000”;

WHEN 2 =》 smg7:=“11011010”;

WHEN 3 =》 smg7:=“11110010”;

WHEN 4 =》 smg7:=“01100110”;

WHEN 5 =》 smg7:=“10110110”;

WHEN 6 =》 smg7:=“10111110”;

WHEN 7 =》 smg7:=“11100000”;

WHEN 8 =》 smg7:=“11111110”;

WHEN 9 =》 smg7:=“11110110”;

END CASE;

RETURN smg7;

END b_to_s7;

begin

if clk_1k=‘1’ then

case key is

when “11111111”=》bell《=‘0’;

when “11111110”=》 data_o《=b_to_s7(1);bell《=‘1’;

when “11111101”=》data_o《=b_to_s7(2);bell《=‘1’;

when “11111011”=》data_o《=b_to_s7(3);bell《=‘1’;

when “11110111”=》data_o《=b_to_s7(4);bell《=‘1’;

when “11101111”=》data_o《=b_to_s7(5);bell《=‘1’;

when “11011111”=》data_o《=b_to_s7(6);bell《=‘1’;

when “10111111”=》data_o《=b_to_s7(7);bell《=‘1’;

when “01111111”=》data_o《=b_to_s7(8);bell《=‘1’;

when others=》data_o《=“10001111”;bell《=‘1’;

end case;

end if;

end process;

end an;

所编写程序经过下载到电路板后,当分别拨动开关sw0—sw7时,在LED数码管上分别显示数字1—8,并且蜂鸣器发出声响,有关部分运行结果的如下图所示。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分