mirror of
https://github.com/aap/pdp6.git
synced 2026-01-11 23:53:31 +00:00
verilog: passing diag part 3
This commit is contained in:
parent
b96e2d468d
commit
a8b07f4340
@ -431,6 +431,7 @@ X typestr("<SETPC>\r\n");
|
||||
|
||||
cpu_stopinst();
|
||||
X run = 0;
|
||||
// TODO: maybe INSTSTOP?
|
||||
keydown(MM6_MEMSTOP);
|
||||
keyup(MM6_ADRSTOP);
|
||||
set_ta(a);
|
||||
@ -495,6 +496,7 @@ X typestr("<CONT>\r\n");
|
||||
|
||||
// on stop the machine should halt after one instruction
|
||||
// so restart
|
||||
// BUG: if next instruction is HALT we'll continue past it
|
||||
if(stop){
|
||||
waithalt();
|
||||
togglecont();
|
||||
|
||||
@ -977,45 +977,52 @@ module apr(
|
||||
wire mbrt_fm_mbltJ = mblt_mbrt_swap;
|
||||
wire mb_fm_pc1 = mb_fm_pc1_init;
|
||||
|
||||
// ET0
|
||||
wire mb_fm_mqJ_et0 = jp_pop | jp_popj | jp_jra;
|
||||
wire mb_ar_swap_et0 = hwt_10 | jp_jsp | ir_exch | ir_blt | ir_fsb;
|
||||
wire mb_fm_arJ_et0 = fwt_01 | fwt_10 | iot_status;
|
||||
wire mbltrtJ_et0 = acbm_swap | iot_cono | jp_jsa;
|
||||
// ET1
|
||||
wire mb_fm_ar0_et1 = ir_acbm;
|
||||
wire mbltrtJ_et1 = hwt_swap | fwt_swap | ir_blt;
|
||||
// ET4
|
||||
wire mb_ar_swap_et4 = fwt_swap | iot_blk | ir_acbm;
|
||||
// ET6
|
||||
wire mb_fm_pc1_et6 = jp_jsa;
|
||||
// ET9
|
||||
wire mb_ar_swap_et9 = ir_acbm | jp_AND_NOT_jsr;
|
||||
// ET10
|
||||
wire mb_fm_arJ_inh_et10 = ir_jp | ir_exch | ch_dep;
|
||||
wire mb_ar_swap_et10 = jp_AND_ir6_0;
|
||||
wire mb_fm_arJ_et10 = (f_c_e_pse | s_c_e) & ~mb_fm_arJ_inh_et10;
|
||||
|
||||
wire mb_clr = et5 & mb_pc_sto |
|
||||
mc_mb_clr_D;
|
||||
wire mblt_mbrt_swap = et0a & mbltrtJ_et0 |
|
||||
et1 & mbltrtJ_et1 |
|
||||
ft1a & f_c_c_aclt;
|
||||
wire mbltrtJ_et0 = acbm_swap | iot_cono | jp_jsa;
|
||||
wire mbltrtJ_et1 = hwt_swap | fwt_swap | ir_blt;
|
||||
wire mb_fm_misc_bits1 = et6 & jp_flag_stor;
|
||||
wire mb_fm_ar0 = et1 & mb_fm_ar0_et1 |
|
||||
dct3 |
|
||||
et6 & acbm_cl;
|
||||
wire mb_fm_ar0_et1 = ir_acbm;
|
||||
wire mb_fm_arJ = at3a | st5 | key_wr | dst1 | mst1 |
|
||||
et0a & mb_fm_arJ_et0 |
|
||||
et10 & mb_fm_arJ_et10 |
|
||||
kt3 & key_execute;
|
||||
wire mb_fm_arJ_et0 = fwt_01 | fwt_10 | iot_status;
|
||||
wire mb_fm_arJ_et10 = (f_c_e_pse | s_c_e) & ~mb_fm_arJ_inh_et10;
|
||||
wire mb_fm_arJ_inh_et10 = ir_jp | ir_exch | ch_dep;
|
||||
wire mb_ar_swap = ft3 | blt_t1 | blt_t4 | blt_t6 |
|
||||
et0a & mb_ar_swap_et0 |
|
||||
et4 & mb_ar_swap_et4 |
|
||||
et9 & mb_ar_swap_et9 |
|
||||
et10 & mb_ar_swap_et10 |
|
||||
ft1a & ~f_c_c_aclt_OR_rt;
|
||||
wire mb_ar_swap_et0 = hwt_10 | jp_jsp | ir_exch | ir_blt | ir_fsb;
|
||||
wire mb_ar_swap_et4 = fwt_swap | iot_blk | ir_acbm;
|
||||
wire mb_ar_swap_et9 = ir_acbm | jp_AND_NOT_jsr;
|
||||
wire mb_ar_swap_et10 = jp_AND_ir6_0;
|
||||
wire mb_fm_mqJ = st6 | ft4a | blt_t0a |
|
||||
et0a & mb_fm_mqJ_et0;
|
||||
wire mb_fm_mqJ_et0 = jp_pop | jp_popj | jp_jra;
|
||||
wire mb1_8_clr = (fpt3 | fat8a) & ~mb[0];
|
||||
wire mb1_8_set = (fpt3 | fat8a) & mb[0];
|
||||
wire mblt_fm_ir1_uuo_t0 = et3 & ex_ir_uuo;
|
||||
wire mb_fm_pc1_init = et6 & mb_pc_sto |
|
||||
et6 & mb_fm_pc1_et6;
|
||||
wire mb_pc_sto = jp_pushj | jp_jsr | jp_jsp | ir_jrst;
|
||||
wire mb_fm_pc1_et6 = jp_jsa;
|
||||
|
||||
wire mc_mb_clr_D;
|
||||
dly100ns mb_dly0(.clk(clk), .reset(rst), .in(mc_mb_clr), .p(mc_mb_clr_D));
|
||||
@ -1056,7 +1063,7 @@ module apr(
|
||||
if(mb_fm_pc1)
|
||||
mb[18:35] <= mb[18:35] | pc;
|
||||
if(mb_fm_ir1)
|
||||
mb[18:35] <= mb[18:35] | ir;
|
||||
mb[0:17] <= mb[0:17] | { ir[0:12], 5'b0 };
|
||||
if(mb1_8_clr)
|
||||
mb[1:8] <= 0;
|
||||
if(mb1_8_set)
|
||||
@ -2056,7 +2063,8 @@ module apr(
|
||||
.in((fat3_D | fat4_D) & sc0_2_eq_7),
|
||||
.p(fat5));
|
||||
pa fa_pa8(.clk(clk), .reset(rst),
|
||||
.in(sct2 & faf3),
|
||||
.in(sct2 & faf3 |
|
||||
fat6),
|
||||
.p(fat5a));
|
||||
pa fa_pa9(.clk(clk), .reset(rst),
|
||||
.in((fat3_D | fat4_D) & ~sc0_2_eq_7),
|
||||
@ -2732,13 +2740,13 @@ module apr(
|
||||
assign maN_set[30] = ma_fm_pich |
|
||||
et3 & ex_ir_uuo;
|
||||
assign maN_set[31] = 0;
|
||||
assign maN_set[32] = pi_enc_32 |
|
||||
assign maN_set[32] = ma_fm_pich & pi_enc_32 |
|
||||
ma_fm_ir14_17 & ir[14] |
|
||||
ma_fm_ir9_12 & ir[9];
|
||||
assign maN_set[33] = pi_enc_33 |
|
||||
assign maN_set[33] = ma_fm_pich & pi_enc_33 |
|
||||
ma_fm_ir14_17 & ir[15] |
|
||||
ma_fm_ir9_12 & ir[10];
|
||||
assign maN_set[34] = pi_enc_34 |
|
||||
assign maN_set[34] = ma_fm_pich & pi_enc_34 |
|
||||
ma_fm_ir14_17 & ir[16] |
|
||||
ma_fm_ir9_12 & ir[11];
|
||||
assign maN_set[35] =
|
||||
@ -3153,6 +3161,7 @@ module apr(
|
||||
pir[i] <= 1;
|
||||
end
|
||||
else
|
||||
if(pih) // HACK so it can be set from testbench
|
||||
pir <= pir & ~pih;
|
||||
|
||||
if(pi_reset)
|
||||
|
||||
@ -144,7 +144,6 @@ module core161c_x(
|
||||
wire cmc_strb_sa;
|
||||
wire cmc_proc_rs_P;
|
||||
wire mb_pulse_out;
|
||||
wire mb_pulse_in;
|
||||
wire cmc_wr_rs;
|
||||
wire cmc_t0;
|
||||
wire cmc_t1;
|
||||
|
||||
@ -149,7 +149,7 @@ module fast162(
|
||||
.p(fmc_restart));
|
||||
pg fmc_pg2(.clk(clk), .reset(reset), .in(fmc_act), .p(fmct0));
|
||||
pg fmc_pg3(.clk(clk), .reset(reset), .in(fma_rd_rq), .p(fma_rd_rq_P));
|
||||
pg cmc_pg5(.clk(clk), .reset(reset), .in(wr_rs), .p(fmc_wr_rs));
|
||||
pg fmc_pg5(.clk(clk), .reset(reset), .in(wr_rs), .p(fmc_wr_rs));
|
||||
|
||||
pa fmc_pa0(.clk(clk), .reset(reset),
|
||||
.in(fmc_start |
|
||||
@ -167,7 +167,7 @@ module fast162(
|
||||
pa fmc_pa4(.clk(clk), .reset(reset),
|
||||
.in(fmct3_D),
|
||||
.p(fmc_wr_set));
|
||||
pg fmc_pg5(.clk(clk), .reset(reset),
|
||||
pg fmc_pa5(.clk(clk), .reset(reset),
|
||||
.in(fmct0 & ~fma_rd_rq & fma_wr_rq |
|
||||
fmct1_D & fma_wr_rq),
|
||||
.p(fmct3));
|
||||
|
||||
@ -116,7 +116,7 @@ module bd(input clk, input reset, input in, output p);
|
||||
r <= 1;
|
||||
end
|
||||
end
|
||||
assign p = r == 4;
|
||||
assign p = r == 2;
|
||||
endmodule
|
||||
|
||||
/* Same as above but with longer pulse. Used to pulse mb
|
||||
@ -135,5 +135,5 @@ module bd2(input clk, input reset, input in, output p);
|
||||
r <= 1;
|
||||
end
|
||||
end
|
||||
assign p = r == 4 || r == 5 || r == 6 || r == 7;
|
||||
assign p = r == 2 || r == 3 || r == 4 || r == 5;
|
||||
endmodule
|
||||
|
||||
@ -209,31 +209,51 @@ module tb_apr();
|
||||
.membus_mb_in_p3(36'b0)
|
||||
);
|
||||
|
||||
initial begin
|
||||
initial begin: init
|
||||
integer i;
|
||||
|
||||
$dumpfile("dump.vcd");
|
||||
$dumpvars();
|
||||
|
||||
cmem.core['o1323] <= 36'o215000000001;
|
||||
cmem.core['o1324] <= 36'o254200000000;
|
||||
for(i = 0; i < 'o40000; i = i + 1)
|
||||
cmem.core[i] <= 0;
|
||||
|
||||
cmem.core['o100] <= 36'o200000000105;
|
||||
cmem.core['o101] <= 36'o202000000041;
|
||||
cmem.core['o102] <= 36'o254200000000;
|
||||
#10;
|
||||
|
||||
cmem.core['o105] <= 36'o000000001234;
|
||||
cmem.core['o42] <= 36'o334000_000000;
|
||||
cmem.core['o43] <= 36'o000000_000000;
|
||||
cmem.core['o44] <= 36'o334000_000000;
|
||||
cmem.core['o45] <= 36'o000000_000000;
|
||||
cmem.core['o46] <= 36'o334000_000000;
|
||||
cmem.core['o47] <= 36'o000000_000000;
|
||||
cmem.core['o50] <= 36'o334000_000000;
|
||||
cmem.core['o51] <= 36'o000000_000000;
|
||||
cmem.core['o52] <= 36'o334000_000000;
|
||||
cmem.core['o53] <= 36'o000000_000000;
|
||||
|
||||
// fmem.ff[0] <= 36'o1;
|
||||
mas <= 'o100;
|
||||
cmem.core['o1733] <= 36'o300000_000000;
|
||||
cmem.core['o1734] <= 36'o254400001736; // jrst 10,1736
|
||||
cmem.core['o1735] <= 36'o254200000000;
|
||||
cmem.core['o1736] <= 36'o254200000001;
|
||||
cmem.core['o1737] <= 36'o254200000002;
|
||||
|
||||
fmem.ff[0] <= 36'o0;
|
||||
fmem.ff[1] <= 36'o0;
|
||||
mas <= 'o1733;
|
||||
|
||||
#200;
|
||||
sw_power <= 1;
|
||||
|
||||
#200;
|
||||
key_mem_stop <= 1;
|
||||
// key_mem_stop <= 1;
|
||||
|
||||
apr.pir <= 'o177;
|
||||
apr.pi_active <= 1;
|
||||
key_start <= 1;
|
||||
#1000;
|
||||
key_start <= 0;
|
||||
|
||||
/*
|
||||
#500;
|
||||
key_mem_stop <= 0;
|
||||
|
||||
@ -246,7 +266,7 @@ module tb_apr();
|
||||
key_inst_cont <= 1;
|
||||
#500;
|
||||
key_inst_cont <= 0;
|
||||
|
||||
*/
|
||||
end
|
||||
|
||||
initial begin
|
||||
|
||||
@ -136,7 +136,6 @@ module core161c(
|
||||
wire cmc_strb_sa;
|
||||
wire cmc_proc_rs_P;
|
||||
wire mb_pulse_out;
|
||||
wire mb_pulse_in;
|
||||
wire cmc_wr_rs;
|
||||
wire cmc_t0;
|
||||
wire cmc_t1;
|
||||
@ -160,7 +159,6 @@ module core161c(
|
||||
pg cmc_pg2(.clk(clk), .reset(reset),
|
||||
.in(cmpc_p0_rq | cmpc_p1_rq | cmpc_p2_rq | cmpc_p3_rq),
|
||||
.p(cmc_t0));
|
||||
pg cmc_pg3(.clk(clk), .reset(reset), .in(| mb_in), .p(mb_pulse_in));
|
||||
pg cmc_pg4(.clk(clk), .reset(reset), .in(wr_rs), .p(cmpc_rs_strb));
|
||||
pg cmc_pg5(.clk(clk), .reset(reset), .in(cmc_proc_rs), .p(cmc_proc_rs_P));
|
||||
pg cmc_pg6(.clk(clk), .reset(reset), .in(cmc_pse_sync & cmc_proc_rs), .p(cmc_wr_rs));
|
||||
@ -194,9 +192,9 @@ module core161c(
|
||||
.p(cmc_strb_sa));
|
||||
|
||||
// not on schematics
|
||||
bd cmc_bd0(.clk(clk), .reset(reset), .in(cmc_t1), .p(cmc_addr_ack));
|
||||
bd cmc_bd1(.clk(clk), .reset(reset), .in(cmc_strb_sa_D0), .p(cmc_rd_rs));
|
||||
bd2 cmc_bd2(.clk(clk), .reset(reset), .in(cmc_strb_sa), .p(mb_pulse_out));
|
||||
bd cmc_bd0(.clk(clk), .reset(reset), .in(cmc_t1), .p(cmc_addr_ack));
|
||||
bd cmc_bd1(.clk(clk), .reset(reset), .in(cmc_strb_sa_D0), .p(cmc_rd_rs));
|
||||
bd cmc_bd2(.clk(clk), .reset(reset), .in(cmc_strb_sa), .p(mb_pulse_out));
|
||||
|
||||
wire cmc_pwr_clr_D;
|
||||
wire cmc_t0_D, cmc_t1_D, cmc_t2_D0, cmc_t2_D1, cmc_t4_D;
|
||||
@ -252,14 +250,14 @@ module core161c(
|
||||
cmc_p2_act <= 0;
|
||||
cmc_p3_act <= 0;
|
||||
end
|
||||
cmb <= cmb | mb_in;
|
||||
if(cmc_cmb_clr)
|
||||
cmb <= 0;
|
||||
if(cmc_strb_sa)
|
||||
cmb <= cmb | sa;
|
||||
if(mb_pulse_in)
|
||||
cmb <= cmb | mb_in;
|
||||
if(cmpc_rs_strb)
|
||||
cmc_proc_rs <= 1;
|
||||
|
||||
if(cmc_t0) begin
|
||||
cmc_await_rq <= 0;
|
||||
cmc_proc_rs <= 0;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user