VHDL只将16位写入32位寄存器位置

时间:2016-05-31 04:36:06

标签: vhdl

我目前正致力于用VHDL制作经过修改的32位MIPS CPU。我有一个32位宽的寄存器组,有16个位置,使用这段代码写入:register_content(to_integer(unsigned(write_address(3 downto 0)))) <= ALU_Result;其中register_content是数组,写地址是寄存器组中ALU的32位结果的位置正在写给。以下是我创建寄存器库的方法。

enter image description here

当他们只是我用于测试的某些值时,不要担心寄存器库中的内容。现在寄存器工作正常,ALU_Result被写入应该的位置。

我遇到的问题是我必须实现下面指定的加载立即指令:

enter image description here

0x0f只是与此问题无关的操作码。主要部分是描述,它表明我必须将16位立即值存储到寄存器rt的低16位。

我尝试使用与之前使用的相同代码行来实现此功能,但尝试指定低16位register_content(15 downto 0)(to_integer(unsigned(read_address_2(3 downto 0)))) <= instruction_17_2;(instruction_17_2是立即值,read_address_2是rt)但是我收到错误在模拟中,状态&#34;表达式有16个元素;预计32&#34;。

显然,我尝试实施它的方式并不奏效。有谁知道如何只将低16位写入32位?感谢。

1 个答案:

答案 0 :(得分:0)

感谢user1155120,答案就是我没有将(15 downto 0)部分代码放在正确的位置。

这应该是这样的:

register_content(to_integer(unsigned(read_address_2(3 downto 0))(15 downto 0) <= instruction_17_2;