使用 FLAGS 寄存器在尽可能简单 (SAP) 计算机中实现外部中断

问题描述

我目前正在学习基础计算机体系结构,我正在努力实现一个处理外部中断的 FLAGS 寄存器。假设寄存器的输出连接到控制器以处理在中断时执行的指令。根据输出信号,当将信号驱动到控制器时,输出显示冲突信号。我认为这是因为外部中断驱动信号到 flag_data(3) 中断标志​​和 flag_out

为了提供更多上下文,一旦中断发生在执行周期(50ns),控制器应该将进位标志设置为 1,即 flag_data(0)。信号是电平触发的,控制器和数据路径操作分别发生在时钟的下降沿和上升沿。在计算机周期的这部分,外部中断只操作标志信号(中断和进位标志)的 MSB 和 LSB。此外,Lf 引脚用于更新 flag_reg 信号,而新的标志输出在上升沿提供,因为它仅在数据路径执行期间(时钟的上升沿)驱动新信号。

library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    
    entity flags is
        Port ( 
           clk : in STD_LOGIC;
           i : in STD_LOGIC; --interrupt pin
           Lf : in STD_LOGIC; -- update flags register
           flag_in : in STD_LOGIC_VECTOR (3 downto 0); -- input from ALU
           flag_out : out STD_LOGIC_VECTOR (3 downto 0)); -- output to controller
end flags;

architecture Behavioral of flags is
    signal flag_reg : STD_LOGIC_VECTOR (3 downto 0) := (others => '0');
begin

    flag_reg <= flag_in when Lf = '1';

    process(clk,i) is
    begin
        flag_reg(3) <= i;
        if rising_edge(clk) then flag_out <= flag_reg; end if;
    end process;

end Behavioral;

Output signals for datapath simulation where flag register output is conflicted during external interrupt

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)