1
0
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:
aap 2019-10-29 14:13:52 +01:00
parent b96e2d468d
commit a8b07f4340
7 changed files with 68 additions and 40 deletions

View File

@ -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();

View File

@ -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)

View File

@ -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;

View File

@ -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));

View File

@ -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

View File

@ -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

View File

@ -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;