首页 > 解决方案 > vhdl 中用于保持、加载和移位的组件

问题描述

我有几个与此问题相关的问题:在此处输入图像描述

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

标签: 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;

some shift operation ”可以是任何一个由您决定的班次操作,您需要填写该部分。

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


推荐阅读