diff options
| author | Julian Blake Kongslie | 2022-03-20 17:27:41 -0700 |
|---|---|---|
| committer | Julian Blake Kongslie | 2022-03-20 17:27:41 -0700 |
| commit | 3a65ecf1581148b0c09e85c58019d017e78f1857 (patch) | |
| tree | 951f531e8f095d73e6b65ab31853a70b3ba85a0f /hdl/top.sv | |
| parent | Cleanup of PDP-8 core to support arbitrated memory protocol. (diff) | |
| download | multipdp8-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 '')
| -rw-r--r-- | hdl/top.sv | 154 |
1 files changed, 113 insertions, 41 deletions
| @@ -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 | ||
| 344 | endmodule | 416 | endmodule |
