Vhdl 七段十六进制数

Vhdl 七段十六进制数,vhdl,Vhdl,我需要设计一组四个4位寄存器,其内容显示在七段显示器上。所以,基本上只需在7段上显示4个十六进制数字。输出在每个时钟周期内自行切换。我用的是Basys2板。这就是我目前所拥有的 library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Register_Bank is port( x: in std_logic_vector(3 downto 0); disp_en: out std_logic_vector(3 downto 0);

我需要设计一组四个4位寄存器,其内容显示在七段显示器上。所以,基本上只需在7段上显示4个十六进制数字。输出在每个时钟周期内自行切换。我用的是Basys2板。这就是我目前所拥有的

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Register_Bank is
port( x: in std_logic_vector(3 downto 0);
        disp_en: out std_logic_vector(3 downto 0);
        z:  out std_logic_vector(7 downto 0);
        ck,reset: in std_logic);
end Register_Bank;

architecture Behavioral of Register_Bank is

Type my_state is(s0,s1,s2,s3);
Signal n_s: my_state;
Signal ck_div: std_logic;
Signal temp,temp1,temp2,temp3,temp0,temp_main: std_logic_vector(0 to 3);
Signal R0,R1,R2,R3 : std_logic_vector(3 downto 0);

begin

-- 
process(temp_main)
begin
case temp_main is
    when "0000" => z <= "00000011";
    when "0001" => z <= "10011111";
    when "0010" => z <= "00100101";
    when "0011" => z <= "00001101";
    when "0100" => z <= "10011001";
    when "0101" => z <= "01001001";
    when "0110" => z <= "01000001";
    when "0111" => z <= "00011111";
    when "1000" => z <= "00000001";
    when "1001" => z <= "00001001";
    when "1010" => z <= "00010001";
    when "1011" => z <= "11000001";
    when "1100" => z <= "01100011";
    when "1101" => z <= "10000101";
    when "1110" => z <= "01100001";
    when "1111" => z <= "01110001";
    when others => null;

--temp3 <= x<3>;
--temp2 <= x<2>;
--temp1 <= x<1>;
--temp0 <= x<0>;

--wiring the register contents to outputs
temp3 <= R3;
temp2 <= R2;
temp1 <= R1;
temp0 <= R0;

--state machine for TMD
Process(x,ck_div)
begin
if ck_div ='1' and ck_div'event then
case n_s is
    when s0 => 
        temp <= x<0>; 
        disp_en <= "0111";
        n_s <= s1;
    when s1 =>
        temp <= x<1>;
        disp_en <= "1011";
        n_s <= s2;
    when s2 =>
        temp <= x<2>;
        disp_en <= "1101";
        n_s <= s3;
    when s3 =>
        temp <= x<3>;
        disp_en <= "1110";
        n_s <= s0;  
end case;
end if;
end process;

-- clock division
process(ck)
variable count: integer;
begin
if ck ='1' and ck'event then
    if reset ='1' then
        count := 0;
        ck_div <= '0';
    elsif reset ='0' then
        if count = 999999 then
            ck_div <= not ck_div;
            count := 0;
        else
            count := count + 1;
        end if; 
    end if;
end if;
end process;    

end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体注册银行为
端口(x:std_逻辑_向量中(3到0);
显示:输出标准逻辑向量(3到0);
z:输出标准逻辑向量(7到0);
ck,复位:在标准逻辑中);
结束注册银行;
注册银行的体系结构是
类型my_状态为(s0、s1、s2、s3);
信号n_s:我的状态;
信号控制单元:标准逻辑;
信号温度,温度1,温度2,温度3,温度0,温度主:标准逻辑向量(0到3);
信号R0、R1、R2、R3:标准逻辑向量(3到0);
开始
-- 
工艺(临时主)
开始
主箱温度为
当“0000”=>z为空时;

--temp3首先,不要将
ck_div
用作时钟。更改您的代码,使其在1000000中上升一个刻度。然后更改主进程,将该信号用作启用:


这将使您的设计与一个时钟完全同步,这意味着工具的使用更加轻松,而您所能做的任何事情都将使工具的使用更加轻松,这对设计师来说是一个胜利。

首先,不要将
ck\u div
用作时钟。更改您的代码,使其在1000000中上升一个刻度。然后更改主进程,将该信号用作启用:


这将使您的设计与一个时钟完全同步,这意味着工具的使用变得更加轻松,而您所能做的任何事情都将使工具的使用更加轻松,这对设计师来说是一个胜利。

如果您尝试提交至少语法正确的代码,那将是一件好事。如果您运行它ModelSim(或通过编辑器),您将看到两个简单的语法错误:

  • 缺少两个“结束”关键字
  • 矢量切片使用圆括号:
    x(1)
    ,而不是菱形
    x
只有在修复此问题后,才能处理设计的行为


这里有一些代码您可能需要查看:

如果您尝试提交至少语法正确的代码,那就太好了。如果您运行它ModelSim(或通过编辑器),您将看到两个简单的语法错误:

  • 缺少两个“结束”关键字
  • 矢量切片使用圆括号:
    x(1)
    ,而不是菱形
    x
只有在修复此问题后,才能处理设计的行为


这里有一些代码您可能想看看:

这听起来有点像家庭作业,优化7段LCD的逻辑是许多CS学生必须解决的经典实践。。。如果是家庭作业,请加上“家庭作业”标签。那么,它有什么不符合你的期望呢?这听起来有点像家庭作业,优化7段LCD的逻辑是许多CS学生必须解决的一个经典实践…如果是家庭作业,请添加“家庭作业”标签。那么,它有什么不符合你的预期的呢?大概它甚至没有编译(对不起,我知道代码没有编译,过了一段时间我就放弃了。第二天才发现我遗漏了一些重要信息,比如使用按钮更改十六进制数字的输入。谢谢你的回复!对不起,我知道代码没有编译,过了一段时间我就放弃了。第二天才发现我没有编译缺少一些重要信息,如使用按钮更改十六进制数的输入。感谢您的回复!抱歉,我知道代码没有编译,过了一段时间我放弃了。第二天才发现我缺少一些重要信息,如使用按钮更改十六进制数的输入。谢谢您的回复!对不起,我知道代码没有编译,过了一会儿我就放弃了。第二天才发现我遗漏了一些重要信息,比如使用按钮更改十六进制数字的输入。谢谢您的回复!
if rising_edge(clk) and ck_div = '1' then