如何使寄存器的值固定

时间:2015-03-26 11:33:40

标签: signals vhdl fixed

我正在做的项目旨在使用vhdl设计一个mini-mips32 cpu,我遇到了一个问题。在我的寄存器文件中,我想让R0等于0X“00000000”并修复,即永远无法更改。这是我的代码:

类型reg_array是std_logic_vector的数组(0到15)(31 downto 0);

- signal 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位信号,我不能把它定义为常量。那么如何使它固定?即,永远使my_reg(0)= 0X“00000000”?提前谢谢!

2 个答案:

答案 0 :(得分:1)

你可以永远不写入它,或者当读地址为0时有一个返回零的多路复用器。我会去读取,因为它应该让合成器容易地优化寄存器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";。我认为您的注册声明可以使用它!

答案 1 :(得分:0)

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

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

凯文。