所以,长话短说,我正在尝试制作一个处理器('of sorts' 放在那里是有原因的,但我们不去详细说明),我遇到了一个几乎毁了整个处理器的问题事物。
即,在这段代码中:
programmProcess: process (clk,rst) is
variable counter : natural;
begin
if (rst = '1') then
counter := 0;
elsif (clk'event and clk = '1' and pm_nEn= '1') then
RAM(counter) <= data; --This is where the issue is
counter := counter + 1;
if (counter = 1024) then
counter := 0;
end if;
end if;
data <= "ZZZZZZZZZZZZZZZZ";
end process programmProcess;
...这是测试平台过程:
stim_proc1: process
begin
rst <= '1';
pm_nEn <= '1';
wait for clk_period;
rst <= '0' ;
data <="0000111110111001";
wait for clk_period;
data <="0000111010111001";
wait for clk_period;
data <= "ZZZZZZZZZZZZZZZZ";
pm_nEn <= '0';
wait for 10*clk_period;
wait;
end process;
...其中 RAM 是 1024 个 16 位向量的数组,数据是 16 位输入输出向量,而 pm_nEn 是单个位,它基本上允许 RAM 填充值。
这个想法是 RAM(counter) 从数据向量中获取值,这是在测试台中手动输入的值,但这不会发生。也就是说,尽管数据具有所需的值,但所有 RAM 的值都只是保持“UUUUUUUUUUUUUUUU”。即使第一次评估并且计数器为 0,RAM(0) 也是未定义的。
我正在使用 ISE 套件,我尝试模拟,然后只是跟踪所有步骤,并显示 RAM(counter) 应该被分配一个值的步骤,数据向量确实具有手动添加的值测试台,但 RAM 仍然没有得到任何值。
所以,问题基本上是 - 为什么会发生这种情况?为什么 RAM 没有分配它的值?
此外,这里是谷歌文档形式的完整 VHDL 和测试平台(由 ISE 方便地生成) -