因此我们运行的代码正在创建一个mips处理器。问题是我们将原始PC实例化为包含全0的32位标准逻辑向量。启动此操作的代码如下。
process (reset_N)
begin
if (reset_N'event and reset_N = '1' ) then
pc_in <= "00000000000000000000000000000000";
end if ;
end process;
问题是无论reset_N携带什么值(前40 ns只有1),它总会将0传递给pc_in,从而导致冲突。
我们评论了pc_in代码行并没有收到任何冲突,因此我们相信这是问题所在。我们只是不确定为什么这些检查功能不正常。
非常感谢任何帮助。谢谢。
答案 0 :(得分:0)
正如Morten和David指出的那样,你可能有两个独立的进程来设置pc_in,这会导致冲突。
由于您尝试检测复位边缘,而不仅仅是复位级别,我假设您正在尝试创建顺序进程,以便您拥有pc_in的注册版本。如果是这样,有几种方法可以做到这一点。您可以同步或异步检测重置。以下是几个例子。
-- Registered version of pc_in with synchronous reset
process(clk)
begin
if (rising_edge(clk)) then
if (reset_N = '0') then
pc_in <= (others => '0');
else
pc_in <= (others => '1');
end if;
end if;
end process;
-- Registered version of pc_in with asynchronous reset
process(clk, reset_N)
begin
if (reset_N = '0') then
pc_in <= (others => '0');
elsif (rising_edge(clk)) then
pc_in <= (others => '1');
end if;
end process;