如何使寄存器的值固定

how to make the value of a register fixed

我正在做一个旨在使用 vhdl 设计 mini-mips32 cpu 的项目,我遇到了一个问题。在我的寄存器文件中,我想让 R0 等于 0X“00000000” 并固定,即永远不会 changed.Here 是我的代码:

type reg_array 是std_logic_vector(31 downto 0)的数组(0 to 15);

-- 信号 reg_file : reg_array;

信号 my_reg : reg_array :=

( 0 => "00000000000000000000000000000000",

1 => "00000000000000000000000000000000",

2 => "00000010000000100000001000000011",

3 => "00000011000000110000001100000011",

4 => "00000100000001000000010000000100",

5 => "11110000111100001111000011110000",

6 => "11110000111100001111000011110000",

7 => "11110000111100001111000011110000",

8 => "11110000111100001111000011110000",

9 => "11110000111100001111000011110000",

10 => "11110000111100001111000011110000",

11 => "11110000111100001111000011110000",

12 => "11110000111100001111000011110000",

13 => "11110000111100001111000011110000",

14 => "11110000111100001111000011110000",

15 => "11110000111100001111000011110000");

所以问题来了,R0 是一个 32 位信号,我不能将它定义为 constant.So 如何固定它?即使 my_reg(0)=0X “00000000”永远?提前致谢!

你可以永远不写入它,或者当读取地址为 0 时有一个 returns 为零的多路复用器。我会去读取,因为它应该让合成器轻松优化寄存器 0 .

RdSrc1 <= (others => '0') when unsigned(rdAddr1) = 0 else
                  my_reg(to_integer(unsigned(rdAddr1));
RdSrc2 <= (others => '0') when unsigned(rdAddr2) = 0 else
                  my_reg(to_integer(unsigned(rdAddr2));

附带说明一下,您知道可以为向量输入十六进制值吗? val <= X"DEADBEEF";。我认为您的寄存器声明可以使用它!

Ryan - 您没有显示用于写入寄存器的逻辑,但通常我会屏蔽对特定索引的写入(如果它是只读位置)。

我通常使用 CSR 中的偏移量 0x0 作为修订寄存器,当我解码地址(如果它与 0x0 匹配并且是写入)时,我完成写入但不更新寄存器。对于读取 return 值。

凯文.