VHDL中用于保持,加载和移位的组件

时间:2019-07-06 10:34:44

标签: vhdl

我有几个与此问题有关的问题:enter image description here

所以我需要在VHDL中以结构化模式实现。给定的资源必须能够执行loadX,loadY,shift和hold并将lsb更改为1.(因此模式应为3位5模式)我知道我需要使用组件,但是我坚持应该使用哪种类型的组件。否则,我会将其实现为移位寄存器。任何小的帮助都将很棒。我是VHDL的新手。我会发布代码,但正如我所说,我不太确定从哪里开始。

1 个答案:

答案 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;

一些移位操作”可以是您自己选择的任何移位操作,您需要填写该部分。

注意:上面的代码可能包含一些错误,但是我是根据对问题描述的理解写的。