我目前正致力于用VHDL制作经过修改的32位MIPS CPU。我有一个32位宽的寄存器组,有16个位置,使用这段代码写入:register_content(to_integer(unsigned(write_address(3 downto 0)))) <= ALU_Result;
其中register_content是数组,写地址是寄存器组中ALU的32位结果的位置正在写给。以下是我创建寄存器库的方法。
当他们只是我用于测试的某些值时,不要担心寄存器库中的内容。现在寄存器工作正常,ALU_Result被写入应该的位置。
我遇到的问题是我必须实现下面指定的加载立即指令:
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位?感谢。
答案 0 :(得分:0)
感谢user1155120,答案就是我没有将(15 downto 0)
部分代码放在正确的位置。
这应该是这样的:
register_content(to_integer(unsigned(read_address_2(3 downto 0))(15 downto 0) <= instruction_17_2;