vhdl中用于保持、加载和移位的组件

vhdl中用于保持、加载和移位的组件,vhdl,Vhdl,关于这个问题,我有几个问题: 所以我需要用VHDL在结构模式下实现这一点。给定的资源必须能够执行loadX、loadY、shift和hold,并将lsb更改为1。所以模式应该是3位-5位模式。我知道我需要使用组件,但我坚持使用哪种类型的组件。否则我会把它实现为移位寄存器。任何小小的帮助都会很好。我对VHDL不熟悉。我会发布代码,但正如我所说,我不太确定从哪里开始。如果我的理解是正确的,那么您可以将loadX和loadY定义为输入引脚和输出端口 entity resourceB is port

关于这个问题,我有几个问题:


所以我需要用VHDL在结构模式下实现这一点。给定的资源必须能够执行loadX、loadY、shift和hold,并将lsb更改为1。所以模式应该是3位-5位模式。我知道我需要使用组件,但我坚持使用哪种类型的组件。否则我会把它实现为移位寄存器。任何小小的帮助都会很好。我对VHDL不熟悉。我会发布代码,但正如我所说,我不太确定从哪里开始。

如果我的理解是正确的,那么您可以将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;
某些轮班操作可以是轮班操作中的任何一种,由您决定,您需要填写该部分


注意:上面的代码可能有一些bug,但我是根据对您的问题描述的理解编写的

大家好,欢迎来到StackOverflow。请花些时间阅读,特别是指定的章节。您可能还想了解和了解如何使用。