hp-saturn/opcodes/1[9ABDEF]nnnnn_D[01]_EQ_[245]n.v

55 lines
1.4 KiB
Coq
Raw Normal View History

2019-02-09 09:49:22 +01:00
/******************************************************************************
*1bnnnnn DO=(5) nnnnn
*
*
*/
`include "decstates.v"
2019-02-10 23:00:20 +01:00
`DEC_D0_EQ_2N, `DEC_D1_EQ_2N,
2019-02-10 12:47:50 +01:00
`DEC_D0_EQ_4N, `DEC_D1_EQ_4N,
2019-02-09 09:49:22 +01:00
`DEC_D0_EQ_5N, `DEC_D1_EQ_5N: begin
2019-02-09 11:53:45 +01:00
case (decstate)
2019-02-10 23:00:20 +01:00
`DEC_D0_EQ_2N, `DEC_D1_EQ_2N: t_cnt <= 1;
2019-02-10 12:47:50 +01:00
`DEC_D0_EQ_4N, `DEC_D1_EQ_4N: t_cnt <= 3;
2019-02-09 11:53:45 +01:00
`DEC_D0_EQ_5N, `DEC_D1_EQ_5N: t_cnt <= 4;
endcase
2019-02-09 09:49:22 +01:00
t_ctr <= 1;
2019-02-09 11:53:45 +01:00
case (decstate)
2019-02-10 23:00:20 +01:00
`DEC_D0_EQ_2N, `DEC_D0_EQ_4N, `DEC_D0_EQ_5N: begin
2019-02-09 19:18:58 +01:00
D0[3:0] <= nb_in;
2019-02-09 11:53:45 +01:00
decstate <= `DEC_D0_EQ_LOOP;
end
2019-02-10 23:00:20 +01:00
`DEC_D1_EQ_2N, `DEC_D1_EQ_4N, `DEC_D1_EQ_5N: begin
2019-02-09 19:18:58 +01:00
D1[3:0] <= nb_in;
2019-02-09 11:53:45 +01:00
decstate <= `DEC_D1_EQ_LOOP;
2019-02-09 09:49:22 +01:00
end
2019-02-09 11:53:45 +01:00
endcase
2019-02-09 09:49:22 +01:00
end
2019-02-09 11:53:45 +01:00
`DEC_D0_EQ_LOOP, `DEC_D1_EQ_LOOP: begin
2019-02-09 09:49:22 +01:00
2019-02-09 11:53:45 +01:00
if (decstate == `DEC_D0_EQ_LOOP)
2019-02-09 19:18:58 +01:00
D0[t_ctr*4+:4] <= nb_in;
2019-02-09 09:49:22 +01:00
else
2019-02-09 19:18:58 +01:00
D1[t_ctr*4+:4] <= nb_in;
2019-02-09 09:49:22 +01:00
if (t_ctr == t_cnt) begin
decstate <= `DEC_START;
2019-02-09 09:49:22 +01:00
`ifdef SIM
2019-02-09 11:53:45 +01:00
$write("%5h D%b=(%1d)\t%1h", inst_start_PC,
(decstate == `DEC_D0_EQ_LOOP)?1'b0:1'b1,
2019-02-09 19:18:58 +01:00
(t_cnt + 1), nb_in);
2019-02-09 09:49:22 +01:00
for(t_ctr = 0; t_ctr != t_cnt; t_ctr ++)
$write("%1h",
2019-02-09 11:53:45 +01:00
(decstate == `DEC_D0_EQ_LOOP)?
2019-02-09 09:49:22 +01:00
D0[(t_cnt - t_ctr - 4'h1)*4+:4]:
D1[(t_cnt - t_ctr - 4'h1)*4+:4]
);
$write("\n");
`endif
end else
t_ctr <= t_ctr + 1;
end