Plumb attn instruction through to execute1
authorMichael Neuling <mikey@neuling.org>
Tue, 24 Mar 2020 22:58:18 +0000 (09:58 +1100)
committerMichael Neuling <mikey@neuling.org>
Tue, 31 Mar 2020 05:33:13 +0000 (16:33 +1100)
Currently we decode attn but we just mark it as an illegal.

This adds a separate case statement in execute 1 for attn to terminate
the core. Illegals also do this currently but we are soon implementing
a 0x700 execption for them.

Signed-off-by: Michael Neuling <mikey@neuling.org>
decode1.vhdl
execute1.vhdl

index e9dae1eef82f925e5efeb9c918204f332154c89c..8a6804dcb39e48a31f764e8ab153ef7c7a788279 100644 (file)
@@ -337,7 +337,7 @@ architecture behaviour of decode1 is
 
         --                                       unit     internal      in1         in2          in3   out   CR   CR   inv  inv  cry   cry  ldst  BR   sgn  upd  rsrv 32b  sgn  rc    lk   sgl
         --                                                      op                                           in   out   A   out  in    out  len        ext                                 pipe
-        constant attn_instr    : decode_rom_t := (ALU,    OP_ILLEGAL,   NONE,       NONE,        NONE, NONE, '0', '0', '0', '0', ZERO, '0', NONE, '0', '0', '0', '0', '0', '0', NONE, '0', '1');
+        constant attn_instr    : decode_rom_t := (ALU,    OP_ATTN,      NONE,       NONE,        NONE, NONE, '0', '0', '0', '0', ZERO, '0', NONE, '0', '0', '0', '0', '0', '0', NONE, '0', '1');
        constant nop_instr     : decode_rom_t := (ALU,    OP_NOP,       NONE,       NONE,        NONE, NONE, '0', '0', '0', '0', ZERO, '0', NONE, '0', '0', '0', '0', '0', '0', NONE, '0', '0');
         constant sim_cfg_instr : decode_rom_t := (ALU,    OP_SIM_CONFIG,NONE,       NONE,        NONE, RT,   '0', '0', '0', '0', ZERO, '0', NONE, '0', '0', '0', '0', '0', '0', NONE, '0', '1');
 
index 4703049e18e7440ecbf73c743b009f76adeb67e5..0d92266b9f5946a0e9361764338ca3c9c02f2f73 100644 (file)
@@ -369,6 +369,9 @@ begin
            when OP_ILLEGAL =>
                terminate_out <= '1';
                report "illegal";
+           when OP_ATTN =>
+               terminate_out <= '1';
+               report "ATTN";
            when OP_NOP =>
                -- Do nothing
            when OP_ADD | OP_CMP =>