Vhdl Led矩阵行位不移位

Vhdl Led矩阵行位不移位,vhdl,Vhdl,我是VHDL新手,我正在尝试用led矩阵8x8做一个简单的应用程序。我的目标是打开矩阵的LED,这样我就可以看到一张笑脸。由于某些原因,没有一个LED亮起 为了查看出了什么问题,我试图一次打开每条线路上的所有LED,方法是评论案例陈述并给出cols您是否意识到如果clk1Hz26='1',则从X4000000到X5F5E0FF保持为真? 您很可能只想更改精确的X4000000值的计数,不是吗?而且在三分之一的时间里没有持续…我可以告诉你,你没有模拟这个。clk1Hz信号未初始化且未重置。没有这个

我是VHDL新手,我正在尝试用led矩阵8x8做一个简单的应用程序。我的目标是打开矩阵的LED,这样我就可以看到一张笑脸。由于某些原因,没有一个LED亮起

为了查看出了什么问题,我试图一次打开每条线路上的所有LED,方法是评论案例陈述并给出cols您是否意识到如果clk1Hz26='1',则从X4000000到X5F5E0FF保持为真?
您很可能只想更改精确的X4000000值的计数,不是吗?而且在三分之一的时间里没有持续…

我可以告诉你,你没有模拟这个。clk1Hz信号未初始化且未重置。没有这个,它不会在sim卡中旋转,因为它初始化为X。然而,在硬件上它可以正常工作

因此,当clk计数器达到x400_0000时,设置了位26,行/列移位器开始疯狂地移动1/3秒。然后,当clk计数器复位时,所有活动停止。 这真的是你想要的吗?我可以从模拟中看出,行和列都在正确移动,尽管只有三分之一秒


暂停期间,行在0x80处停止,列在0xFF处停止。

我设法解决了这个问题,您是对的,在x400_0000处,位26设置为1,而不是将其与1进行比较,我必须检查是否上升。不,它很好用。非常感谢。我解决了这个问题,我犯了一个错误,将最后一位与“1”进行了比较,我将该语句替换为上升边,现在一切正常。非常感谢。信息方面,即使rising_edge在模拟中起作用,它也可能不适用于目标失败合成。例如,请参阅,在这种情况下,您可以测试完整值或检查前一个时钟周期中的一位是否为0
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.std_logic_unsigned.all;

entity main is
    Port ( clk : in STD_LOGIC;
           rows : out STD_LOGIC_VECTOR (7 downto 0);
           cols : out STD_LOGIC_VECTOR (7 downto 0));
end main;

architecture Behavioral of main is

signal count: std_logic_vector(7 downto 0):= "00000001";
signal clk1Hz: std_logic_vector(26 downto 0);

begin

process(clk)
begin
    if rising_edge(clk) then
        if clk1Hz = X"5F5E0FF" then
            clk1Hz <= "000" & X"000000";
        else
            clk1Hz <= clk1Hz + 1;
        end if;

        if clk1Hz(26) = '1' then
            if count = "10000000" then
                count <= "00000001";
             else 
                count(7 downto 1) <= count(6 downto 0);
                count(0) <= '0';
            end if;

         rows <= count;

        case count is
            when "00000001" => cols <= "11111111";
            when "00000010" => cols <= "11011011";
            when "00000100" => cols <= "11011011";
            when "00001000" => cols <= "11111111";
            when "00010000" => cols <= "00111100";
            when "00100000" => cols <= "10000001";
            when "01000000" => cols <= "11000011";
            when "10000000" => cols <= "11111111";
            when others => cols <= "11111111";
         end case;
     end if;


    end if;  


end process;
end Behavioral;