Я пишу то, что, как я думал, будет довольно стандартным кодом VHDL, но исполнение продолжает возвращаться ко мне.VHDL Shift with Concatenation
Код предназначен для простой игры на плате Nexsys 3. Первый игрок выбирает переключатель, и светодиоды прокручиваются вниз, показывая пробел, когда они находятся над самим переключателем. Второй игрок нажимает кнопку, когда свиток переходит к выбранному переключателю. Моя часть игры - прокрутить светодиоды. Мой код можно посмотреть ниже:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;
entity Two_Player_3_24_2013 is
port( clk: in std_logic;
rst: in std_logic;
switches: in std_logic_vector(7 downto 0);
led_indic: out std_logic_vector(7 downto 0)
);
end Two_Player_3_24_2013;
architecture Behavioral of Two_Player_3_24_2013 is
signal count: std_logic_vector(31 downto 0):= "00000000000000000000000000000000";
signal only_one: std_logic := '0';
signal shifter: std_logic_vector(7 downto 0) := "00000000";
begin
only_one <= '1' when switches = "10000000" else
'1' when switches = "01000000" else
'1' when switches = "00100000" else
'1' when switches = "00010000" else
'1' when switches = "00001000" else
'1' when switches = "00000100" else
'1' when switches = "00000010" else
'1' when switches = "00000001" else
'0';
counting: process(clk, rst, only_one)
begin
if (rst = '1') then
count <= "00000000000000000000000000000000";
elsif (clk'event and clk='1' and only_one = '1') then
count <= count + '1';
end if;
end process counting;
shifting: process(clk, rst, count, shifter)
begin
if (rst = '1') then
shifter <= "00000000";
elsif (clk'event and clk='1' and count = "00000000000000010000000000000000") then
shifter <= switches;
elsif (clk'event and clk='1' and count(25) = '1') then
shifter <= shifter(0) & shifter(7 downto 1);
end if;
end process shifting;
led_indic <= shifter;
end Behavioral;
Теперь я проверил детали по отдельности, и они работают. Сигнал only_one
действителен только при включении одного переключателя. Счетчик начинается в нужное время, и первый выключатель запускается в нужное время. По какой-то причине я все еще не могу понять, однако он отказывается прокручивать. Я попытался запустить это как на доске, так и в симуляции, но я не могу понять, почему прокрутка не работает. Исходная настройка выполняется только в определенное время, а конкатенация должна выполняться с регулярными интервалами времени. Я знаю, проблема связана с
shifter <= shifter(0) & shifter(7 downto 1);
, но до сих пор ничего не пробовал исправил его.
Любые советы приветствуются.
Спасибо,
Юсиф Нуризаде
балды, Спасибо так много, что установил его немедленно! Юсиф Нуризаде –