数码显示VHDL

更新时间:2023-09-09 13:53:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验五 数码显示电路的VHDL设计

一、实验目的

通过数码显示电路的设计,学习VHDL的CASE语句应用及多层次设计方法。

二、实验内容

1. 基本命题

设计一个如图5-1所示计数和7段数码显示译码电路,其中CNT4B为4输出二进制计数器,DECL7S为7段数码显示译码电路。

图5-1 计数器和译码器连接电路的顶层文件原理图

2. 扩展命题

设计一个8位数码显示器的扫描控制电路,控制如图5-2所示8个数码显示器逐一显示,以降低显示电路的功耗。

图5-2 8位数码显示器扫描控制电路

三、实验仪器与器材

计算机1台,GW48-PK2S实验箱1台,QuartusⅡ6.0 1套。

四、实验设计思路

1. 计数与7段数码显示电路 (1)4位二进制计数器CNT4B

参考实验一,将“10进制计数器”的VHDL程序改为“4位二进制计数器”。 (2)7段数码显示

7段数码显示是纯组合电路,通用的小规模专用IC,如74或4000系列的器件只能实现十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。但为了简化过程,首先完成7段BCD码译码器的设计。作为7段BCD码译码器,输出信号LED7S的7位分别接如图5-3数码管的7个段,高位在上,低位在下。例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段点亮,于是数码管显示“5”。7段数码显示电路的参考程序如下:

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DECL7S IS

PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END ;

ARCHITECTURE one OF DECL7S IS BEGIN

PROCESS( A ) BEGIN

CASE A IS

WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \

图5-3 共阴数码管及其电路

WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN OTHERS => NULL ; END CASE ; END PROCESS ; END ; (3)设计提示

分别设计4位计数器CNT4B和7段数码显示译码器DECL7S,确认满足逻辑设计要求后,应用例化语句实现图5-1所示电路CNT_DECL的VHDL设计。引脚锁定及硬件测试方案建议选实验电路模式6,用数码8显示译码输出(PIO46-PIO40),其它输入、输出引脚自己定义,最后硬件验证译码器的工作性能。

2. 8位数码显示器扫描控制电路

在图5-2所示电路中,每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管的公共端分别由8个选通信号k1、k2?k8来选择。被选通的数码管显示数据,其余关闭。如在某时刻k3为高电平,其余选通信号为低电平,这是仅k3对应的数码管显示来自段信号的数据,其他7个数码管呈现关闭状态。如果希望在8个数码管显示预期的数据,就必须使得8个选通信号k1、k2?k8分别被单独选通,并同时在段信号输入口加上希望在该数码管显示的数据。于是随着选通信号的扫描(逐一轮流输出高电平),就能够实现扫描显示的目的。

在下面8位数码显示器扫描控制电路的参考程序中,clk是扫描时钟,SG为7段控制信号,由高位至低位分别接g、f、e、d、c、b、a 7个段,BT是位选择控制信号,接图5-1中的8个选通信号:k1、k2?k8。程序中的CNT8是一个3位计数器,产生扫描控制信号,由进程P2生成。进程P3是7段译码查表输出程序,与基本命题相同。进程P1是对8个数码管选通的扫描程序,例如当CNT8等于“001”时,k2对应数码管被选通,同时,A被赋值3,再由进程P3译码输出“1001111”,显示在数码管上即为“3”,当CNT8扫描时,数码管上显示数据:13579BDF。

8位数码显示器扫描控制电路的参考程序如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY SCAN_LED IS PORT ( CLK : IN STD_LOGIC;

SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --段控制信号输出 BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );--位控制信号输出 END;

ARCHITECTURE one OF SCAN_LED IS

SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL A : INTEGER RANGE 0 TO 15;

BEGIN

P1: PROCESS( CNT8 ) BEGIN

CASE CNT8 IS

WHEN \ BT <= \ WHEN \ BT <= \ WHEN \ BT <= \ WHEN \ BT <= \ WHEN \ BT <= \ WHEN \ BT <= \ WHEN \ BT <= \ WHEN \ BT <= \ WHEN OTHERS => NULL ; END CASE ; END PROCESS P1; P2: PROCESS(CLK) BEGIN

IF CLK'EVENT AND CLK = '1' THEN CNT8 <= CNT8 + 1; END IF;

END PROCESS P2 ; P3: PROCESS( A ) --译码电路 BEGIN

CASE A IS

WHEN 0 => SG <= \ WHEN 1 => SG <= \ WHEN 2 => SG <= \ WHEN 3 => SG <= \ WHEN 4 => SG <= \ WHEN 5 => SG <= \ WHEN 6 => SG <= \ WHEN 7 => SG <= \ WHEN 8 => SG <= \ WHEN 9 => SG <= \ WHEN 10 => SG <= \ WHEN 11 => SG <= \ WHEN 12 => SG <= \ WHEN 13 => SG <= \ WHEN 14 => SG <= \ WHEN 15 => SG <= \ WHEN OTHERS => NULL ; END CASE ; END PROCESS P3; END;

五、实验要求

根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和实验过程;设计程序、程序分析报告、仿真波形图及其分析报告。

1.基础命题

5.1 VHD代码 (1)4位二进制计数器

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY cnt2 IS

PORT (clk, rst, en : IN std_logic; cq : OUT std_logic_vector(3 DOWNTO 0); cout : OUT std_logic);

END cnt2;

ARCHITECTURE behave OF cnt2 IS BEGIN

PROCESS (clk,rst,en)

VARIABLE cqi : std_logic_vector(3 DOWNTO 0); BEGIN

IF rst = '1' THEN cqi :=(OTHERS =>'0') ; -- 计算机异步复位

ELSIF clk'event AND clk='1' THEN -- 检测时钟上升沿

IF en='1' THEN -- 检测是否允许计数(同步使能) IF cqi < 15 THEN cqi := cqi +1; -- 允许计数,检测是否小于15 ELSE cqi := (OTHERS =>'0') ; -- 大于15,计数值清零

END IF; END IF; END IF;

IF cqi = 15 THEN cout <= '1'; -- 计数大于15,输出进位信号

ELSE cout <='0';

END IF;

cq <= cqi; -- 将计数值送往输出端口

END PROCESS;

END behave; (2)7段数码显示

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DECL7S IS

PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;--输出端

END ;

ARCHITECTURE one OF DECL7S IS BEGIN

PROCESS( A )

BEGIN

CASE A IS

WHEN \WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \WHEN \ LED7S <= \WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \ WHEN \ LED7S <= \WHEN \ LED7S <= \WHEN \ LED7S <= \ WHEN \ LED7S <= \WHEN \ LED7S <= \WHEN OTHERS => NULL ; END CASE; END PROCESS;

END;

(3)计数与7段数码显示电路 library ieee;

use ieee.std_logic_1164.all; entity cnt_led is

port(clk1,rst1,en1:in std_logic;

led6:out std_logic_vector(6 downto 0); cout1:out std_logic);

end entity cnt_led;

architecture behave of cnt_led is

component cnt2

PORT (clk, rst, en : IN std_logic;

cq : OUT std_logic_vector(3 DOWNTO 0); cout : OUT std_logic);

end component; component DECL7S

PORT (A: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

end component;

signal tmp:std_logic_vector(3 downto 0); begin

m1:cnt2

port map(clk=>clk1,rst=>rst1,en=>en1,cout=>cout1,cq=>tmp);--端口映射 m2:DECL7S

port map(A=>tmp,LED7S=>led6);--端口映射

end behave; 5.2仿真波形图

图 5.1仿真波形图

5.3引脚配置

图 5.2引脚配置

2扩展命题

5.4 程序设计:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity SCAN_LED is port(clk:in std_logic; end;

architecture one of SCAN_LED is signal cnt8:std_logic_vector(2 downto 0); signal a:integer range 0 to 15; begin

p1:process(cnt8)--段选 begin

case cnt8 is

when \显示1 when \显示3 when \when \when \when \when \when \when others => NULL;

sg:out std_logic_vector(6 downto 0);--段选信号 bt:out std_logic_vector(7 downto 0));--位选信号

end case;

end process p1; p2:process(clk) begin

if clk'EVENT and clk='1' then cnt8<=cnt8+1;--位选 end if;

end process p2; p3:process(a)--译码电路 begin

case a is

when 0 => sg<=\

WHEN 2 => SG <= \ WHEN 3 => SG <= \WHEN 4 => SG <= \ WHEN 5 => SG <= \WHEN 6 => SG <= \ WHEN 7 => SG <= \WHEN 8 => SG <= \ WHEN 9 => SG <= \WHEN 10 => SG <= \ WHEN 11 => SG <= \WHEN 12 => SG <= \ WHEN 13 => SG <= \WHEN 14 => SG <= \ WHEN 15 => SG <= \WHEN OTHERS => NULL;

end case;

end process p3; end;

5.5仿真波形:

六、实验思考题

(1)思考如何实现计数器与译码器连接以及不同字母显示电路的设计?

设计计数器模块和译码器模块,通过模块调用,端口映射,将计数结果输送

到译码器的输入端口进行译码。

本文来源:https://www.bwwdw.com/article/qdnh.html

Top