所以我需要在VHDL中以结构化模式实现。给定的资源必须能够执行loadX,loadY,shift和hold并将lsb更改为1.(因此模式应为3位5模式)我知道我需要使用组件,但是我坚持应该使用哪种类型的组件。否则,我会将其实现为移位寄存器。任何小的帮助都将很棒。我是VHDL的新手。我会发布代码,但正如我所说,我不太确定从哪里开始。
答案 0 :(得分:0)
如果我的理解是正确的,那么您可以将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;
“ 一些移位操作”可以是您自己选择的任何移位操作,您需要填写该部分。
注意:上面的代码可能包含一些错误,但是我是根据对问题描述的理解写的。