summaryrefslogtreecommitdiff
path: root/hdl/top.sv
diff options
context:
space:
mode:
authorJulian Blake Kongslie2022-03-20 17:27:41 -0700
committerJulian Blake Kongslie2022-03-20 17:27:41 -0700
commit3a65ecf1581148b0c09e85c58019d017e78f1857 (patch)
tree951f531e8f095d73e6b65ab31853a70b3ba85a0f /hdl/top.sv
parentCleanup of PDP-8 core to support arbitrated memory protocol. (diff)
downloadmultipdp8-3a65ecf1581148b0c09e85c58019d017e78f1857.tar.xz
Run ~*EIGHT GODDAMN PDP-8s IN PARALLEL*~
It looks like we could probably fit 16 on the current FPGA, just about. (doesn't meet timing at 50MHz, should in theory work at 40MHz)
Diffstat (limited to 'hdl/top.sv')
-rw-r--r--hdl/top.sv154
1 files changed, 113 insertions, 41 deletions
diff --git a/hdl/top.sv b/hdl/top.sv
index ba6311f..f4a64f9 100644
--- a/hdl/top.sv
+++ b/hdl/top.sv
@@ -297,48 +297,120 @@ module top
297 assign led[7] = {2'b0, led_step_counter[4], led_step_counter[3], led_step_counter[2], led_step_counter[1], led_step_counter[0], led_run, led_pause, led_ion, led_break, led_current_address}; 297 assign led[7] = {2'b0, led_step_counter[4], led_step_counter[3], led_step_counter[2], led_step_counter[1], led_step_counter[0], led_run, led_pause, led_ion, led_break, led_current_address};
298 assign led[8] = {5'b0, led_link, led_if[0], led_if[1], led_if[2], led_df[0], led_df[1], led_df[2]}; 298 assign led[8] = {5'b0, led_link, led_if[0], led_if[1], led_if[2], led_df[0], led_df[1], led_df[2]};
299 299
300 core cpu 300 generate
301 ( .clk(internal_clock) 301 genvar i;
302 , .reset(internal_reset) 302 for (i = 0; i < `NUM_PDPS; ++i) begin : core
303 303
304 , .switch_df(switch_df) 304 bit [11:0] local_led_pc;
305 , .switch_if(switch_if) 305 bit [11:0] local_led_memaddr;
306 , .switch_sr(switch_sr) 306 bit [11:0] local_led_memdata;
307 , .switch_start(switch_start) 307 bit [11:0] local_led_acc;
308 , .switch_load_add(switch_load_add) 308 bit [11:0] local_led_mq;
309 , .switch_dep(switch_dep) 309 bit local_led_and;
310 , .switch_exam(switch_exam) 310 bit local_led_tad;
311 , .switch_cont(switch_cont) 311 bit local_led_isz;
312 , .switch_stop(switch_stop) 312 bit local_led_dca;
313 , .switch_sing_step(switch_sing_step) 313 bit local_led_jms;
314 , .switch_sing_inst(switch_sing_inst) 314 bit local_led_jmp;
315 bit local_led_iot;
316 bit local_led_opr;
317 bit local_led_fetch;
318 bit local_led_execute;
319 bit local_led_defer;
320 bit local_led_word_count;
321 bit local_led_current_address;
322 bit local_led_break;
323 bit local_led_ion;
324 bit local_led_pause;
325 bit local_led_run;
326 bit [4:0] local_led_step_counter;
327 bit [2:0] local_led_df;
328 bit [2:0] local_led_if;
329 bit local_led_link;
315 330
316 , .led_pc(led_pc) 331 core
317 , .led_memaddr(led_memaddr) 332 #( .JTAG_INSTANCE(1+i)
318 , .led_memdata(led_memdata) 333 ) cpu
319 , .led_acc(led_acc) 334 ( .clk(internal_clock)
320 , .led_mq(led_mq) 335 , .reset(internal_reset)
321 , .led_and(led_and) 336
322 , .led_tad(led_tad) 337 , .mem_command_ready(pdp_command_ready[i])
323 , .led_isz(led_isz) 338 , .mem_command_valid(pdp_command_valid[i])
324 , .led_dca(led_dca) 339 , .mem_command(pdp_command_data[i])
325 , .led_jms(led_jms) 340
326 , .led_jmp(led_jmp) 341 , .mem_read_ready(pdp_response_ready[i])
327 , .led_iot(led_iot) 342 , .mem_read_valid(pdp_response_valid[i])
328 , .led_opr(led_opr) 343 , .mem_read(pdp_response_data[i])
329 , .led_fetch(led_fetch) 344
330 , .led_execute(led_execute) 345 , .switch_df(switch_df)
331 , .led_defer(led_defer) 346 , .switch_if(switch_if)
332 , .led_word_count(led_word_count) 347 , .switch_sr(switch_sr)
333 , .led_current_address(led_current_address) 348 , .switch_start(switch_start)
334 , .led_break(led_break) 349 , .switch_load_add(switch_load_add)
335 , .led_ion(led_ion) 350 , .switch_dep(switch_dep)
336 , .led_pause(led_pause) 351 , .switch_exam(switch_exam)
337 , .led_run(led_run) 352 , .switch_cont(switch_cont)
338 , .led_step_counter(led_step_counter) 353 , .switch_stop(switch_stop)
339 , .led_df(led_df) 354 , .switch_sing_step(switch_sing_step)
340 , .led_if(led_if) 355 , .switch_sing_inst(switch_sing_inst)
341 , .led_link(led_link) 356
342 ); 357 , .led_pc(local_led_pc)
358 , .led_memaddr(local_led_memaddr)
359 , .led_memdata(local_led_memdata)
360 , .led_acc(local_led_acc)
361 , .led_mq(local_led_mq)
362 , .led_and(local_led_and)
363 , .led_tad(local_led_tad)
364 , .led_isz(local_led_isz)
365 , .led_dca(local_led_dca)
366 , .led_jms(local_led_jms)
367 , .led_jmp(local_led_jmp)
368 , .led_iot(local_led_iot)
369 , .led_opr(local_led_opr)
370 , .led_fetch(local_led_fetch)
371 , .led_execute(local_led_execute)
372 , .led_defer(local_led_defer)
373 , .led_word_count(local_led_word_count)
374 , .led_current_address(local_led_current_address)
375 , .led_break(local_led_break)
376 , .led_ion(local_led_ion)
377 , .led_pause(local_led_pause)
378 , .led_run(local_led_run)
379 , .led_step_counter(local_led_step_counter)
380 , .led_df(local_led_df)
381 , .led_if(local_led_if)
382 , .led_link(local_led_link)
383 );
384
385 end
386
387 endgenerate
388
389 assign led_pc = core[0].local_led_pc;
390 assign led_memaddr = core[0].local_led_memaddr;
391 assign led_memdata = core[0].local_led_memdata;
392 assign led_acc = core[0].local_led_acc;
393 assign led_mq = core[0].local_led_mq;
394 assign led_and = core[0].local_led_and;
395 assign led_tad = core[0].local_led_tad;
396 assign led_isz = core[0].local_led_isz;
397 assign led_dca = core[0].local_led_dca;
398 assign led_jms = core[0].local_led_jms;
399 assign led_jmp = core[0].local_led_jmp;
400 assign led_iot = core[0].local_led_iot;
401 assign led_opr = core[0].local_led_opr;
402 assign led_fetch = core[0].local_led_fetch;
403 assign led_execute = core[0].local_led_execute;
404 assign led_defer = core[0].local_led_defer;
405 assign led_word_count = core[0].local_led_word_count;
406 assign led_current_address = core[0].local_led_current_address;
407 assign led_break = core[0].local_led_break;
408 assign led_ion = core[0].local_led_ion;
409 assign led_pause = core[0].local_led_pause;
410 assign led_run = core[0].local_led_run;
411 assign led_step_counter = core[0].local_led_step_counter;
412 assign led_df = core[0].local_led_df;
413 assign led_if = core[0].local_led_if;
414 assign led_link = core[0].local_led_link;
343 415
344endmodule 416endmodule