vhdl - vhdl 中用于保持、加载和移位的组件
问题描述
所以我需要在 VHDL 中以结构模式实现这一点。给定的资源必须能够执行 loadX、loadY、shift 和 hold 并将 lsb 更改为 1。(所以模式应该是 3 bits-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;
“ some shift operation ”可以是任何一个由您决定的班次操作,您需要填写该部分。
注意:上面的代码可能有一些错误,但我是根据您对问题描述的理解编写的。
推荐阅读
- mysql - 选择每个优惠的优惠券价格的最大折扣百分比
- c++ - C++ 浮点数差
- php - 我想在我的映射数组中添加一个新的 segmentId(同名),但 elementId 不同但方法相同
- html - 如何根据导航栏中的左右元素对齐li元素
- java - 为什么抑制功能不适用于跳跃窗口?
- java - Spring Integration JMS Consumers 不消费所有消息
- scala - SCALA:如何使用收集功能从数据框中获取最新修改的条目?
- scala - 杜比。设置连接超时
- encryption - Openssl - AES-256-ECB 用密钥解密,坏幻数
- node.js - Mongodb 中的 Bulkwrite 操作是如何工作的?