Компонент в VHDL для удержания, загрузки и сдвига - PullRequest
0 голосов
/ 06 июля 2019

У меня есть несколько вопросов, связанных с этой проблемой: enter image description here

Поэтому мне нужно реализовать это в VHDL в структурном режиме. Данный ресурс должен быть в состоянии сделатьloadX, loadY, shift и hold и измените lsb на 1. (поэтому режим должен быть в режимах 3 бита-5) Я знаю, что мне нужно использовать компоненты, но я застрял в том, какой тип компонентов я должен использовать.В противном случае я бы реализовал это как регистр сдвига.Любая маленькая помощь была бы отличной. Я новичок в VHDL.Я бы опубликовал код, но, как я уже сказал, я не совсем уверен, с чего начать.

1 Ответ

0 голосов
/ 16 июля 2019

Если я правильно понимаю, вы можете определить loadX и loadY как входные контакты и выходной порт.

entity resourceB is 
port (
modein : in std_logic_vector(2 downto 0);
loadX : in std_logic_vector(3 downto 0);
loadY : in std_logic_vector(3 downto 0);
loadO : out std_logic_vector(3 downto 0));
end resourceB;

, поскольку вам необходимо выполнить операцию сдвига в зависимости от типа режима, тогда я считаю, что вам нужно использовать оператор case.Но тогда, так как вам нужно изменить lsb на 1, вам также может понадобиться временный регистр, чтобы сделать это.

Architecture behave of resourceB is 

signal temp_r, temp_d, temp_q : std_logic_vector(3 downto 0):= (others => '0');

begin

process(clk, reset)
begin 

if(reset = '1') then 
temp_q <= (others => '0');
elsif (clk'event and clk = '1') then 
temp_q <= temp_d;
end if;
end process;

loadO <= temp_q;

process(modein, loadX, loadY)
begin 

case modein is 

when "000" => temp_d <= loadX <some shift operation> loadY;
              temp_d(0) <= '1';
when "001" => temp_d <= loadX <some shift operation> loadY;
              temp_d(0) <= '1';
when "010" => temp_d <= loadX <some shift operation> loadY;
              temp_d(0) <= '1';
when "011" => temp_d <= loadX <some shift operation> loadY;
              temp_d(0) <= '1';
when "100" => temp_d <= loadX <some shift operation> loadY;
              temp_d(0) <= '1';

end case;
end process;
end behave;

" некоторая операция смены " может быть любой из операций смены, которая зависит от вас, и вам нужно заполнить эту часть.

ПРИМЕЧАНИЕ. В приведенном выше коде могут быть некоторые ошибки, но я написал это, исходя из своего понимания из описания вашей проблемы.

...