首页 > 解决方案 > 如何为我的 Basys 3 FPGA 板上的四个 7 段显示器编写数据生成器?

问题描述

我的任务是为数据生成器和符号转换器编写代码,以在 Basys 3 板上运行四个 7 段显示器。这只是我在 VHDL 中的第二个任务,所以我还在学习,但我已经能够编写一个 0 到 9999 的计数器,我觉得这很有挑战性。我真的很想被告知最好的方法,并给出一些关于下一步该做什么的链接或提示,而不是有人只是为我编写代码。

DG 必须根据您打开/关闭的开关产生各种 4 位序列,并且 D1 和 D2 必须循环。每个 4 位数据值需要由两个 2 位“符号”表示(例如,“1011”变成符号“10”后跟符号“11”;)对于来自 DG 的每个 4 位值,一个 SC 实体应该输出两个 2 位符号 - 因此将以 2Hz 运行。但是,D4 和 D3 将保持静态。

我已经为我需要的不同开关组合编写了 if 语句,但我正在努力思考如何输出 D1 和 D2 显示,因为我知道他们还必须检查重置和启动/停止功能成为第一次通过 deBounce 函数运行。我已经编写了一个 deBounce 函数,但我不确定如何将它链接到我的重置和启动/停止按钮。以下是我迄今为止为 DG 实体编写的内容(我知道有很多缺失和 16 个语法错误,但我只是简要概述了我将来想要拥有的内容):

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity Data_Generator is
Port ( i_Clk : in STD_LOGIC;
   i_Reset : in STD_LOGIC;
   i_StartStop : in STD_LOGIC;
   i_CE2Hz : in STD_LOGIC;  
   i_SW : in STD_LOGIC_VECTOR );
end Data_Generator;

architecture Behavioral of Data_Generator is
signal i_D4 : integer range 0 to 7;
signal i_D3 : integer range 0 to 15;
signal i_D2 : STD_LOGIC_VECTOR(0 to 1);
signal i_D1 : STD_LOGIC_VECTOR(0 to 1);

begin
displayChoice : process (i_Reset, i_StartStop, i_SW)
begin
    if (i_SW = '1000') then
        i_D4 <= 0 ;
        i_D3 <= 1 ;
        if (i_Reset = '1'
        end if;
         
    elsif (i_SW = '0100') then  
        i_D4 <= 1
        i_D3 <= 7
        
    elsif (i_SW = '1100') then
        i_D4 <= 2
        i_D3 <= 14
        
    elsif (i_SW = '0010') then
        i_D4 <= 3
        i_D3 <= 8
           
    elsif (i_SW = '0001') then
        i_D4 <= 6
        i_D3 <= 
        
    elsif (i_SW = '1001') then
        i_D4 <= 7
        i_D3 <= 
        
    else    
        i_D4 <= 0
        i_D3 <= 0
        
    end if;
end process displayChoice;
            
end Behavioral;

(我所拥有的 D4 和 D3 是稍后应该在显示器上出现的)

我将不胜感激任何帮助或建议。如果您想查看我的其他实体或我的顶级的附加代码,请告诉我。谢谢

标签: vhdlfpgahdlvivadohardware-programming

解决方案


推荐阅读