Difference between revisions of "PDP-8 Front Panel"

From Land Boards Wiki
Jump to navigation Jump to search
(52 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[File:PDP-8_P451-720.jpg]]
+
[[File:tindie-mediums.png|link=https://www.tindie.com/products/23753/]]
 +
 
 +
[[File:PDP-8_P17546_cropped_720px.jpg]]
 +
 
 +
<video type="youtube">1-lU59broa4</video>
  
 
== Features ==
 
== Features ==
  
* 50 pin connector
+
* 50-pin connector
** 2x25 Pinout matches [[RETRO-EP4CE15]] Card pins
+
** 2x25 Pinout matches [[RETRO-EP4CE15]] Card pins (1:1 cable)
* 12 Value LEDs (DB0-11) - octal format
+
** Some unused pins - wired to +3.3V/GND for connecting other cards
** Display options: Program Counter (PC), Memory Address, Memory Data, Accumulator
+
* 12 Value LEDs (DB-11) - silkscreen marked in octal format
 +
* DISP pushbutton - Selects what is on the 12 Value LEDs
 +
** I like diffused orange color the best for LEDs - looks retro
 +
** Pushing DISP cycles between LEDs displaying PC, Memory Address, Memory Data, Accumulator
 
* 12 Load Value Slide Switches (SL0-11) - octal format
 
* 12 Load Value Slide Switches (SL0-11) - octal format
** Enter values: PC, Memory Address, Memory Data, Accumulator
+
** Enter values: Program Counter (PC), Memory Address, Memory Data, Accumulator
* LNK - Link value slide switch
 
* DISP - Display 12 Value LEDs select pushbutton
 
** Cycles between LEDs displaying PC, Memory Address, Memory Data, Accumulator
 
 
* Pushbutton Switches
 
* Pushbutton Switches
 
** STEP pushbutton - Increment PC
 
** STEP pushbutton - Increment PC
** LDPC pushbutton - Load PC from Value Slide Switches
+
** LDPC pushbutton - Store value from Value Slide Switches to Program Counter (PC)
 
** DEP pushbutton - Store value from Value Slide Switches to memory
 
** DEP pushbutton - Store value from Value Slide Switches to memory
 
** LDA pushbutton - Store value from Value Slide Switches to Accumulator
 
** LDA pushbutton - Store value from Value Slide Switches to Accumulator
 
** RES - Reset pushbutton - Resets CPU
 
** RES - Reset pushbutton - Resets CPU
 
** PB1 - spare pushbutton
 
** PB1 - spare pushbutton
* 4 DISP LEDs - Cycle between 12 LEDs source with DISP pushbutton
+
* 4 DISP LEDs - Indicates what is being shown on the 12 LEDs
 +
** Cycle between 12 LEDs source with DISP pushbutton
 
** PC - 12 LEDs display Program Counter value
 
** PC - 12 LEDs display Program Counter value
 
** MADR - 12 LEDs display Memory Address value
 
** MADR - 12 LEDs display Memory Address value
 
** MD - 12 LEDs display Memory Data value
 
** MD - 12 LEDs display Memory Data value
 
** AC - 12 LEDs display Accumulator value
 
** AC - 12 LEDs display Accumulator value
 +
* LNK - Link value slide switch
 
* LINK LED - Displays Link value
 
* LINK LED - Displays Link value
 
* RUN LED - Running program
 
* RUN LED - Running program
 
* RUN/HALT slide switch
 
* RUN/HALT slide switch
 
* PWR - Power LED
 
* PWR - Power LED
* 95x95mm form factor
+
* 95x95mm form factor matches [[RETRO-EP4CE15]]
 
* (4) 6-32 mounting holes
 
* (4) 6-32 mounting holes
 +
** Boards can be stacked with standoffs
  
== PDP-8 FPGA Design ==
+
== PDP-8 FPGA Designs ==
  
* [https://www.amazon.com/PDP-8-Class-Project-Resoling-Machine-ebook/dp/B07KY5RCJ7/ The PDP-8 Class Project -or- Resoling an Old Machine by Tom Almy] - Amazon link (Kindle e-boot or paper)
+
* Two working designs
 +
** Tom Almy's PDP-8
 +
** OpenCores PDP-8 FPGA designs
 +
 
 +
=== Build of Tom Almy's PDP-8 FPGA (Working 2021-May) ===
 +
 
 +
Build is based on [https://almy.us/ Tom Almy]'s book [https://www.amazon.com/PDP-8-Class-Project-Resoling-Machine/dp/1790487978/ref=sr_1_1?dchild=1&keywords=tom+almy+pdp-8&qid=1619874138&sr=8-1 The PDP-8 Class Project: Resoling An Old Machine].
 +
 
 +
* [https://hackaday.io/project/179357-pdp-8-fpga Hackaday page with progress logs]
 
* [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_Book(Almy) PDP-8 PFGA Design] - GitHub repo
 
* [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_Book(Almy) PDP-8 PFGA Design] - GitHub repo
** [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_Book(Almy)/PDP8_VDU_FrPnl PDP-8 with Front Panel and VDU]
+
* [https://github.com/douggilliland/Linux-68k/tree/master/pdp8 My PDP-8 Software GitHub repository]
 +
* [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_Book(Almy)/PDP8_VDU_FrPnl PDP-8 with Front Panel and VDU]
 +
 
 +
==== Hardware used ====
 +
 
 +
* [http://land-boards.com/blwiki/index.php?title=RETRO-EP4CE15 RETRO-EP4CE15] - FPGA Hardware used
 +
* [http://land-boards.com/blwiki/index.php?title=QMTECH_EP4CE15_FPGA_Card QMTECH EP4CE15 FPGA Card]
 +
* [http://land-boards.com/blwiki/index.php?title=PDP-8_Front_Panel PDP-8 Front Panel]
 +
 
 +
==== FPGA Resources ====
 +
 
 +
* Front Panel
 +
* Cyclone IV
 +
 
 +
<pre>
 +
+----------------------------------------------------------------------------------+
 +
; Fitter Summary                                                                  ;
 +
+------------------------------------+---------------------------------------------+
 +
; Fitter Status                      ; Successful - Sat Apr 30 20:28:20 2022      ;
 +
; Quartus Prime Version              ; 21.1.0 Build 842 10/21/2021 SJ Lite Edition ;
 +
; Revision Name                      ; pdp8                                        ;
 +
; Top-level Entity Name              ; pdp8                                        ;
 +
; Family                            ; Cyclone IV E                                ;
 +
; Device                            ; EP4CE15F23C8                                ;
 +
; Timing Models                      ; Final                                      ;
 +
; Total logic elements              ; 2,390 / 15,408 ( 16 % )                    ;
 +
;    Total combinational functions  ; 2,300 / 15,408 ( 15 % )                    ;
 +
;    Dedicated logic registers      ; 734 / 15,408 ( 5 % )                        ;
 +
; Total registers                    ; 734                                        ;
 +
; Total pins                        ; 51 / 344 ( 15 % )                          ;
 +
; Total virtual pins                ; 0                                          ;
 +
; Total memory bits                  ; 98,304 / 516,096 ( 19 % )                  ;
 +
; Embedded Multiplier 9-bit elements ; 2 / 112 ( 2 % )                            ;
 +
; Total PLLs                        ; 0 / 4 ( 0 % )                              ;
 +
+------------------------------------+---------------------------------------------+
 +
</pre>
 +
 
 +
=== OpenCores PDP-8 Build ===
 +
 
 +
* [https://hackaday.io/project/180081-opencores-pdp-8-on-fpga Hackaday page with progress logs]
 +
* Wider features than Tom Almy's design
 +
* Supports 32 K words of memory
 +
* SD card support
 +
* Boot OS/8
 +
* [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_OpenCores Land Board OpenCores PDP-8 Builds] - GitHub repository
 +
* Two tested/working builds
 +
** Built in ANSI Terminal build
 +
** Serial I/O build
 +
 
 +
==== RETRO-EP4CE15_CYCLONE_IV_VDU PDP-8 Build ====
 +
 
 +
* [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_OpenCores/RETRO-EP4CE15_CYCLONE_IV_VDU RETRO-EP4CE15_CYCLONE_IV_VDU PDP-8 Build]
 +
* Built in ANSI Terminal with cpu_001 (IOP16B built-in) - Latest build
 +
* [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_OpenCores/RETRO-EP4CE15_CYCLONE_IV_VDU/ANSITerm/Assy_Code VDU IOP assembly code]
 +
* [https://hackaday.io/project/180415-ansi-terminal-in-an-fpga Hackaday project page for ANSI Terminal]
 +
 
 +
==== RETRO-EP4CE15_CYCLONE_IV PDP-8 Build ====
 +
 
 +
* [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_OpenCores/RETRO-EP4CE15_CYCLONE_IV RETRO-EP4CE15_CYCLONE_IV]
 +
* Serial only (no VDU)
 +
 
 +
==== RETRO-EP4CE15_CYCLONE_V PDP-8 Build ====
 +
 
 +
* [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_OpenCores/RETRO-EP4CE15_CYCLONE_V RETRO-EP4CE15_CYCLONE_V]
 +
* WIP - missing pin assignment
 +
 
 +
==== Hardware used ====
 +
 
 +
* [http://land-boards.com/blwiki/index.php?title=RETRO-EP4CE15 RETRO-EP4CE15] - FPGA Hardware used
 +
* [http://land-boards.com/blwiki/index.php?title=QMTECH_EP4CE15_FPGA_Card QMTECH EP4CE15 FPGA Card]
 +
* [http://land-boards.com/blwiki/index.php?title=PDP-8_Front_Panel PDP-8 Front Panel]
 +
 
 +
==== FPGA Resources ====
 +
 
 +
* ANSI Terminal (IOP-16)
 +
* Cyclone IV
 +
 
 +
<pre>
 +
+----------------------------------------------------------------------------------+
 +
; Fitter Summary                                                                  ;
 +
+------------------------------------+---------------------------------------------+
 +
; Fitter Status                      ; Successful - Sat Apr  9 19:53:05 2022      ;
 +
; Quartus Prime Version              ; 21.1.0 Build 842 10/21/2021 SJ Lite Edition ;
 +
; Revision Name                      ; pdp8_top                                    ;
 +
; Top-level Entity Name              ; pdp8_top                                    ;
 +
; Family                            ; Cyclone IV E                                ;
 +
; Device                            ; EP4CE15F23C8                                ;
 +
; Timing Models                      ; Final                                      ;
 +
; Total logic elements              ; 5,273 / 15,408 ( 34 % )                    ;
 +
;    Total combinational functions  ; 5,023 / 15,408 ( 33 % )                    ;
 +
;    Dedicated logic registers      ; 1,569 / 15,408 ( 10 % )                    ;
 +
; Total registers                    ; 1569                                        ;
 +
; Total pins                        ; 128 / 344 ( 37 % )                          ;
 +
; Total virtual pins                ; 0                                          ;
 +
; Total memory bits                  ; 426,112 / 516,096 ( 83 % )                  ;
 +
; Embedded Multiplier 9-bit elements ; 2 / 112 ( 2 % )                            ;
 +
; Total PLLs                        ; 0 / 4 ( 0 % )                              ;
 +
+------------------------------------+---------------------------------------------+
 +
</pre>
 +
 
 +
==== opencores PDP-8 Processor Reference ====
 +
 
 +
* [http://opencores.org/project,pdp8 opencores PDP-8 Processor Core and System Overview]
 +
* [https://opencores.org/projects/pdp8/quick%20start Quickstart page]
  
 
== J1 Connector ==
 
== J1 Connector ==
Line 52: Line 170:
 
[[File:PDP-8F_FrontPanel_720px.jpg]]
 
[[File:PDP-8F_FrontPanel_720px.jpg]]
  
== Pin List ==
+
== Pin List for Tom Almy FPGA Build==
  
 +
* For [https://github.com/douggilliland/Retro-Computers/tree/master/PDP-8/PDP8_Book(Almy)/PDP8_VDU_FrPnl Tom Almy's PDP-8 FPGA Code]
 
<pre>
 
<pre>
 
set_global_assignment -name FAMILY "Cyclone IV E"
 
set_global_assignment -name FAMILY "Cyclone IV E"
Line 129: Line 248:
 
# Status/Operation LEDs
 
# Status/Operation LEDs
 
set_location_assignment PIN_K21 -to linkLED
 
set_location_assignment PIN_K21 -to linkLED
set_location_assignment PIN_AA17 -to dispMDLED
+
set_location_assignment PIN_Y22 -to dispMDLED
set_location_assignment PIN_Y22 -to dispMALED
+
set_location_assignment PIN_AA17 -to dispMALED
 
set_location_assignment PIN_AA15 -to dispPCLED
 
set_location_assignment PIN_AA15 -to dispPCLED
 
set_location_assignment PIN_R21 -to dispACLED
 
set_location_assignment PIN_R21 -to dispACLED
Line 140: Line 259:
 
set_location_assignment PIN_P22 -to ldACPB
 
set_location_assignment PIN_P22 -to ldACPB
 
set_location_assignment PIN_AB15 -to dispPB
 
set_location_assignment PIN_AB15 -to dispPB
 +
 +
</pre>
 +
 +
== Pin List for OpenCores Build ==
 +
 +
<pre>
 +
set_global_assignment -name FAMILY "Cyclone IV E"
 +
set_global_assignment -name DEVICE EP4CE15F23C8
 +
set_global_assignment -name TOP_LEVEL_ENTITY pdp8_top
 +
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 11.1
 +
set_global_assignment -name PROJECT_CREATION_TIME_DATE "19:28:47  OCTOBER 30, 2013"
 +
set_global_assignment -name LAST_QUARTUS_VERSION "20.1.0 Lite Edition"
 +
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
 +
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
 +
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
 +
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
 +
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
 +
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
 +
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
 +
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
 +
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL"
 +
# Clock and reset
 +
set_location_assignment PIN_T2 -to CLOCK_50
 +
set_location_assignment PIN_K22 -to reset_n
 +
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to reset_n
 +
# PS/2
 +
set_location_assignment PIN_R1 -to io_PS2_CLK
 +
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_PS2_CLK
 +
set_location_assignment PIN_R2 -to io_PS2_DAT
 +
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_PS2_DAT
 +
#
 +
set_location_assignment PIN_B10 -to TTY1_TXD_Ser
 +
set_location_assignment PIN_B13 -to TTY1_RXD_Ser
 +
set_location_assignment PIN_A10 -to TTY1_RTS_ser
 +
set_location_assignment PIN_A13 -to TTY1_CTS_ser
 +
set_location_assignment PIN_B22 -to serSelect
 +
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to serSelect
 +
# Video
 +
set_location_assignment PIN_B15 -to o_videoR0
 +
set_location_assignment PIN_A15 -to o_videoR1
 +
set_location_assignment PIN_B16 -to o_videoG0
 +
set_location_assignment PIN_A16 -to o_videoG1
 +
set_location_assignment PIN_B17 -to o_videoB0
 +
set_location_assignment PIN_A17 -to o_videoB1
 +
set_location_assignment PIN_B18 -to o_hSync
 +
set_location_assignment PIN_A18 -to o_vSync
 +
# SD Card
 +
set_location_assignment PIN_B19 -to sdCS
 +
set_location_assignment PIN_B20 -to sdCLK
 +
set_location_assignment PIN_A19 -to sdDI
 +
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sdDI
 +
set_location_assignment PIN_A20 -to sdDO
 +
set_location_assignment PIN_B14 -to sdCD
 +
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sdCD
 +
# Front Panel LEDs
 +
set_location_assignment PIN_F21 -to RUN_LED
 +
set_location_assignment PIN_AA15 -to PC_LED
 +
set_location_assignment PIN_R21 -to AC_LED
 +
set_location_assignment PIN_AA17 -to MADR_LED
 +
set_location_assignment PIN_Y22 -to MD_LED
 +
set_location_assignment PIN_K21 -to LINK_LED
 +
# Front Panel Pushbuttons and Slide Switches
 +
set_location_assignment PIN_P22 -to LDA_PB
 +
set_location_assignment PIN_AB20 -to LDPC_PB
 +
set_location_assignment PIN_V21 -to DEP_PB
 +
set_location_assignment PIN_AB17 -to STEP_PB
 +
set_location_assignment PIN_H21 -to LINK_SS
 +
set_location_assignment PIN_AB15 -to DISP_PB
 +
set_location_assignment PIN_J22 -to EXAM_PB
 +
set_location_assignment PIN_H22 -to RUN_SS
 +
# 12 LEDs
 +
set_location_assignment PIN_AA14 -to OUT12_LEDs[0]
 +
set_location_assignment PIN_AA16 -to OUT12_LEDs[1]
 +
set_location_assignment PIN_AA18 -to OUT12_LEDs[2]
 +
set_location_assignment PIN_AA19 -to OUT12_LEDs[3]
 +
set_location_assignment PIN_Y21 -to OUT12_LEDs[4]
 +
set_location_assignment PIN_W22 -to OUT12_LEDs[5]
 +
set_location_assignment PIN_U21 -to OUT12_LEDs[6]
 +
set_location_assignment PIN_P21 -to OUT12_LEDs[7]
 +
set_location_assignment PIN_N21 -to OUT12_LEDs[8]
 +
set_location_assignment PIN_M21 -to OUT12_LEDs[9]
 +
set_location_assignment PIN_L21 -to OUT12_LEDs[10]
 +
set_location_assignment PIN_J21 -to OUT12_LEDs[11]
 +
# 12 Slide switches
 +
set_location_assignment PIN_AB14 -to SW12_SS[0]
 +
set_location_assignment PIN_AB16 -to SW12_SS[1]
 +
set_location_assignment PIN_AB18 -to SW12_SS[2]
 +
set_location_assignment PIN_AB19 -to SW12_SS[3]
 +
set_location_assignment PIN_AA20 -to SW12_SS[4]
 +
set_location_assignment PIN_W21 -to SW12_SS[5]
 +
set_location_assignment PIN_V22 -to SW12_SS[6]
 +
set_location_assignment PIN_U22 -to SW12_SS[7]
 +
set_location_assignment PIN_R22 -to SW12_SS[8]
 +
set_location_assignment PIN_N22 -to SW12_SS[9]
 +
set_location_assignment PIN_M22 -to SW12_SS[10]
 +
set_location_assignment PIN_L22 -to SW12_SS[11]
 +
# SRAM (not used)
 +
set_location_assignment PIN_F1 -to n_sRamCS
 +
set_location_assignment PIN_J2 -to n_sRamOE
 +
set_location_assignment PIN_B4 -to n_sRamWE
 +
set_location_assignment PIN_E1 -to sramData[0]
 +
set_location_assignment PIN_C1 -to sramData[1]
 +
set_location_assignment PIN_B1 -to sramData[2]
 +
set_location_assignment PIN_B3 -to sramData[3]
 +
set_location_assignment PIN_B2 -to sramData[4]
 +
set_location_assignment PIN_C2 -to sramData[5]
 +
set_location_assignment PIN_D2 -to sramData[6]
 +
set_location_assignment PIN_F2 -to sramData[7]
 +
set_location_assignment PIN_H1 -to sramAddress[0]
 +
set_location_assignment PIN_J1 -to sramAddress[1]
 +
set_location_assignment PIN_M1 -to sramAddress[2]
 +
set_location_assignment PIN_N1 -to sramAddress[3]
 +
set_location_assignment PIN_P1 -to sramAddress[4]
 +
set_location_assignment PIN_P2 -to sramAddress[5]
 +
set_location_assignment PIN_N2 -to sramAddress[6]
 +
set_location_assignment PIN_M2 -to sramAddress[7]
 +
set_location_assignment PIN_H2 -to sramAddress[8]
 +
set_location_assignment PIN_A3 -to sramAddress[9]
 +
set_location_assignment PIN_A4 -to sramAddress[10]
 +
set_location_assignment PIN_C3 -to sramAddress[11]
 +
set_location_assignment PIN_A5 -to sramAddress[12]
 +
set_location_assignment PIN_A6 -to sramAddress[13]
 +
set_location_assignment PIN_A7 -to sramAddress[14]
 +
set_location_assignment PIN_A8 -to sramAddress[15]
 +
set_location_assignment PIN_B7 -to sramAddress[16]
 +
set_location_assignment PIN_B6 -to sramAddress[17]
 +
set_location_assignment PIN_B5 -to sramAddress[18]
 +
set_location_assignment PIN_C4 -to sramAddress[19]
 +
# SDRAM (not used)
 +
set_location_assignment PIN_Y6 -to sdRamClk
 +
set_location_assignment PIN_W6 -to sdRamClkEn
 +
set_location_assignment PIN_AA4 -to n_sdRamCas
 +
set_location_assignment PIN_AA3 -to n_sdRamCe
 +
set_location_assignment PIN_AB3 -to n_sdRamRas
 +
set_location_assignment PIN_AB4 -to n_sdRamWe
 +
set_location_assignment PIN_V2 -to sdRamAddr[0]
 +
set_location_assignment PIN_V1 -to sdRamAddr[1]
 +
set_location_assignment PIN_U2 -to sdRamAddr[2]
 +
set_location_assignment PIN_U1 -to sdRamAddr[3]
 +
set_location_assignment PIN_V3 -to sdRamAddr[4]
 +
set_location_assignment PIN_V4 -to sdRamAddr[5]
 +
set_location_assignment PIN_Y2 -to sdRamAddr[6]
 +
set_location_assignment PIN_AA1 -to sdRamAddr[7]
 +
set_location_assignment PIN_Y3 -to sdRamAddr[8]
 +
set_location_assignment PIN_V5 -to sdRamAddr[9]
 +
set_location_assignment PIN_W1 -to sdRamAddr[10]
 +
set_location_assignment PIN_Y4 -to sdRamAddr[11]
 +
set_location_assignment PIN_V6 -to sdRamAddr[12]
 +
set_location_assignment PIN_Y1 -to sdRamAddr[13]
 +
set_location_assignment PIN_W2 -to sdRamAddr[14]
 +
set_location_assignment PIN_AA10 -to sdRamData[0]
 +
set_location_assignment PIN_AB9 -to sdRamData[1]
 +
set_location_assignment PIN_AA9 -to sdRamData[2]
 +
set_location_assignment PIN_AB8 -to sdRamData[3]
 +
set_location_assignment PIN_AA8 -to sdRamData[4]
 +
set_location_assignment PIN_AB7 -to sdRamData[5]
 +
set_location_assignment PIN_AA7 -to sdRamData[6]
 +
set_location_assignment PIN_AB5 -to sdRamData[7]
 +
set_location_assignment PIN_Y7 -to sdRamData[8]
 +
set_location_assignment PIN_W8 -to sdRamData[9]
 +
set_location_assignment PIN_Y8 -to sdRamData[10]
 +
set_location_assignment PIN_V9 -to sdRamData[11]
 +
set_location_assignment PIN_V10 -to sdRamData[12]
 +
set_location_assignment PIN_Y10 -to sdRamData[13]
 +
set_location_assignment PIN_W10 -to sdRamData[14]
 +
set_location_assignment PIN_V11 -to sdRamData[15]
 +
  
 
</pre>
 
</pre>
Line 145: Line 431:
 
== PDP-8 Front Panel Assembly Sheet ==
 
== PDP-8 Front Panel Assembly Sheet ==
  
[[PDP-8 Front Panel Assembly Sheet]]
+
* [[PDP-8 Front Panel Assembly Sheet]]

Revision as of 14:29, 25 May 2022

Tindie-mediums.png

PDP-8 P17546 cropped 720px.jpg

Features

  • 50-pin connector
    • 2x25 Pinout matches RETRO-EP4CE15 Card pins (1:1 cable)
    • Some unused pins - wired to +3.3V/GND for connecting other cards
  • 12 Value LEDs (DB-11) - silkscreen marked in octal format
  • DISP pushbutton - Selects what is on the 12 Value LEDs
    • I like diffused orange color the best for LEDs - looks retro
    • Pushing DISP cycles between LEDs displaying PC, Memory Address, Memory Data, Accumulator
  • 12 Load Value Slide Switches (SL0-11) - octal format
    • Enter values: Program Counter (PC), Memory Address, Memory Data, Accumulator
  • Pushbutton Switches
    • STEP pushbutton - Increment PC
    • LDPC pushbutton - Store value from Value Slide Switches to Program Counter (PC)
    • DEP pushbutton - Store value from Value Slide Switches to memory
    • LDA pushbutton - Store value from Value Slide Switches to Accumulator
    • RES - Reset pushbutton - Resets CPU
    • PB1 - spare pushbutton
  • 4 DISP LEDs - Indicates what is being shown on the 12 LEDs
    • Cycle between 12 LEDs source with DISP pushbutton
    • PC - 12 LEDs display Program Counter value
    • MADR - 12 LEDs display Memory Address value
    • MD - 12 LEDs display Memory Data value
    • AC - 12 LEDs display Accumulator value
  • LNK - Link value slide switch
  • LINK LED - Displays Link value
  • RUN LED - Running program
  • RUN/HALT slide switch
  • PWR - Power LED
  • 95x95mm form factor matches RETRO-EP4CE15
  • (4) 6-32 mounting holes
    • Boards can be stacked with standoffs

PDP-8 FPGA Designs

  • Two working designs
    • Tom Almy's PDP-8
    • OpenCores PDP-8 FPGA designs

Build of Tom Almy's PDP-8 FPGA (Working 2021-May)

Build is based on Tom Almy's book The PDP-8 Class Project: Resoling An Old Machine.

Hardware used

FPGA Resources

  • Front Panel
  • Cyclone IV
+----------------------------------------------------------------------------------+
; Fitter Summary                                                                   ;
+------------------------------------+---------------------------------------------+
; Fitter Status                      ; Successful - Sat Apr 30 20:28:20 2022       ;
; Quartus Prime Version              ; 21.1.0 Build 842 10/21/2021 SJ Lite Edition ;
; Revision Name                      ; pdp8                                        ;
; Top-level Entity Name              ; pdp8                                        ;
; Family                             ; Cyclone IV E                                ;
; Device                             ; EP4CE15F23C8                                ;
; Timing Models                      ; Final                                       ;
; Total logic elements               ; 2,390 / 15,408 ( 16 % )                     ;
;     Total combinational functions  ; 2,300 / 15,408 ( 15 % )                     ;
;     Dedicated logic registers      ; 734 / 15,408 ( 5 % )                        ;
; Total registers                    ; 734                                         ;
; Total pins                         ; 51 / 344 ( 15 % )                           ;
; Total virtual pins                 ; 0                                           ;
; Total memory bits                  ; 98,304 / 516,096 ( 19 % )                   ;
; Embedded Multiplier 9-bit elements ; 2 / 112 ( 2 % )                             ;
; Total PLLs                         ; 0 / 4 ( 0 % )                               ;
+------------------------------------+---------------------------------------------+

OpenCores PDP-8 Build

RETRO-EP4CE15_CYCLONE_IV_VDU PDP-8 Build

RETRO-EP4CE15_CYCLONE_IV PDP-8 Build

RETRO-EP4CE15_CYCLONE_V PDP-8 Build

Hardware used

FPGA Resources

  • ANSI Terminal (IOP-16)
  • Cyclone IV
+----------------------------------------------------------------------------------+
; Fitter Summary                                                                   ;
+------------------------------------+---------------------------------------------+
; Fitter Status                      ; Successful - Sat Apr  9 19:53:05 2022       ;
; Quartus Prime Version              ; 21.1.0 Build 842 10/21/2021 SJ Lite Edition ;
; Revision Name                      ; pdp8_top                                    ;
; Top-level Entity Name              ; pdp8_top                                    ;
; Family                             ; Cyclone IV E                                ;
; Device                             ; EP4CE15F23C8                                ;
; Timing Models                      ; Final                                       ;
; Total logic elements               ; 5,273 / 15,408 ( 34 % )                     ;
;     Total combinational functions  ; 5,023 / 15,408 ( 33 % )                     ;
;     Dedicated logic registers      ; 1,569 / 15,408 ( 10 % )                     ;
; Total registers                    ; 1569                                        ;
; Total pins                         ; 128 / 344 ( 37 % )                          ;
; Total virtual pins                 ; 0                                           ;
; Total memory bits                  ; 426,112 / 516,096 ( 83 % )                  ;
; Embedded Multiplier 9-bit elements ; 2 / 112 ( 2 % )                             ;
; Total PLLs                         ; 0 / 4 ( 0 % )                               ;
+------------------------------------+---------------------------------------------+

opencores PDP-8 Processor Reference

J1 Connector

  • Extra power and ground pins (not on RETRO-EP4CE15 Card)
    • Pins 3,4 = GND
    • Pins 5-8 = VCC
    • Pin 9 = N/C

J1 to RETRO-EP4CE15 Pin Mapping

PDP-8F FrontPanel Conn Map RETRO-EP4CE15 Both.PNG

Real PDP-8/F Front Panel

PDP-8F FrontPanel 720px.jpg

Pin List for Tom Almy FPGA Build

set_global_assignment -name FAMILY "Cyclone IV E"
set_global_assignment -name DEVICE EP4CE15F23C8
set_global_assignment -name TOP_LEVEL_ENTITY pdp8
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0
set_global_assignment -name PROJECT_CREATION_TIME_DATE "13:56:19  MARCH 15, 2021"
set_global_assignment -name LAST_QUARTUS_VERSION "20.1.0 Lite Edition"
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON
set_global_assignment -name SMART_RECOMPILE ON
set_global_assignment -name PROJECT_IP_REGENERATION_POLICY ALWAYS_REGENERATE_IP
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL"
# Clock, reset button
set_location_assignment PIN_T2 -to clk
set_location_assignment PIN_K22 -to btnCpuReset
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to btnCpuReset
# Run Switch/LED
set_location_assignment PIN_H22 -to runSwitch
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to runSwitch
set_location_assignment PIN_F21 -to runLED
# Serial
set_location_assignment PIN_B13 -to RsRx
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to RsRx
set_location_assignment PIN_B10 -to RsTx
# PS/2
set_location_assignment PIN_R1 -to io_ps2Clk
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_ps2Clk
set_location_assignment PIN_R2 -to io_ps2Data
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_ps2Data
# VGA
set_location_assignment PIN_A17 -to o_vid_blu[1]
set_location_assignment PIN_B17 -to o_vid_blu[0]
set_location_assignment PIN_A16 -to o_vid_grn[1]
set_location_assignment PIN_B16 -to o_vid_grn[0]
set_location_assignment PIN_A15 -to o_vid_red[1]
set_location_assignment PIN_B15 -to o_vid_red[0]
set_location_assignment PIN_B18 -to o_vid_hSync
set_location_assignment PIN_A18 -to o_vid_vSync
# 12 Slide switches
set_location_assignment PIN_AB14 -to sw[0]
set_location_assignment PIN_AB16 -to sw[1]
set_location_assignment PIN_AB18 -to sw[2]
set_location_assignment PIN_AB19 -to sw[3]
set_location_assignment PIN_AA20 -to sw[4]
set_location_assignment PIN_W21 -to sw[5]
set_location_assignment PIN_V22 -to sw[6]
set_location_assignment PIN_U22 -to sw[7]
set_location_assignment PIN_R22 -to sw[8]
set_location_assignment PIN_N22 -to sw[9]
set_location_assignment PIN_M22 -to sw[10]
set_location_assignment PIN_L22 -to sw[11]
# 12 LEDs
set_location_assignment PIN_J21 -to dispLEDs[11]
set_location_assignment PIN_L21 -to dispLEDs[10]
set_location_assignment PIN_M21 -to dispLEDs[9]
set_location_assignment PIN_N21 -to dispLEDs[8]
set_location_assignment PIN_P21 -to dispLEDs[7]
set_location_assignment PIN_U21 -to dispLEDs[6]
set_location_assignment PIN_W22 -to dispLEDs[5]
set_location_assignment PIN_Y21 -to dispLEDs[4]
set_location_assignment PIN_AA19 -to dispLEDs[3]
set_location_assignment PIN_AA18 -to dispLEDs[2]
set_location_assignment PIN_AA16 -to dispLEDs[1]
set_location_assignment PIN_AA14 -to dispLEDs[0]
# Status/Operation LEDs
set_location_assignment PIN_K21 -to linkLED
set_location_assignment PIN_Y22 -to dispMDLED
set_location_assignment PIN_AA17 -to dispMALED
set_location_assignment PIN_AA15 -to dispPCLED
set_location_assignment PIN_R21 -to dispACLED
set_location_assignment PIN_H21 -to lnkSwitch
# Pushbuttons
set_location_assignment PIN_AB17 -to stepPB
set_location_assignment PIN_V21 -to depPB
set_location_assignment PIN_AB20 -to ldPCPB
set_location_assignment PIN_P22 -to ldACPB
set_location_assignment PIN_AB15 -to dispPB

Pin List for OpenCores Build

set_global_assignment -name FAMILY "Cyclone IV E"
set_global_assignment -name DEVICE EP4CE15F23C8
set_global_assignment -name TOP_LEVEL_ENTITY pdp8_top
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 11.1
set_global_assignment -name PROJECT_CREATION_TIME_DATE "19:28:47  OCTOBER 30, 2013"
set_global_assignment -name LAST_QUARTUS_VERSION "20.1.0 Lite Edition"
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL"
# Clock and reset
set_location_assignment PIN_T2 -to CLOCK_50
set_location_assignment PIN_K22 -to reset_n
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to reset_n
# PS/2
set_location_assignment PIN_R1 -to io_PS2_CLK
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_PS2_CLK
set_location_assignment PIN_R2 -to io_PS2_DAT
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_PS2_DAT
#
set_location_assignment PIN_B10 -to TTY1_TXD_Ser
set_location_assignment PIN_B13 -to TTY1_RXD_Ser
set_location_assignment PIN_A10 -to TTY1_RTS_ser
set_location_assignment PIN_A13 -to TTY1_CTS_ser
set_location_assignment PIN_B22 -to serSelect
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to serSelect
# Video
set_location_assignment PIN_B15 -to o_videoR0
set_location_assignment PIN_A15 -to o_videoR1
set_location_assignment PIN_B16 -to o_videoG0
set_location_assignment PIN_A16 -to o_videoG1
set_location_assignment PIN_B17 -to o_videoB0
set_location_assignment PIN_A17 -to o_videoB1
set_location_assignment PIN_B18 -to o_hSync
set_location_assignment PIN_A18 -to o_vSync
# SD Card
set_location_assignment PIN_B19 -to sdCS
set_location_assignment PIN_B20 -to sdCLK
set_location_assignment PIN_A19 -to sdDI
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sdDI
set_location_assignment PIN_A20 -to sdDO
set_location_assignment PIN_B14 -to sdCD
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sdCD
# Front Panel LEDs
set_location_assignment PIN_F21 -to RUN_LED
set_location_assignment PIN_AA15 -to PC_LED
set_location_assignment PIN_R21 -to AC_LED
set_location_assignment PIN_AA17 -to MADR_LED
set_location_assignment PIN_Y22 -to MD_LED
set_location_assignment PIN_K21 -to LINK_LED
# Front Panel Pushbuttons and Slide Switches
set_location_assignment PIN_P22 -to LDA_PB
set_location_assignment PIN_AB20 -to LDPC_PB
set_location_assignment PIN_V21 -to DEP_PB
set_location_assignment PIN_AB17 -to STEP_PB
set_location_assignment PIN_H21 -to LINK_SS
set_location_assignment PIN_AB15 -to DISP_PB
set_location_assignment PIN_J22 -to EXAM_PB
set_location_assignment PIN_H22 -to RUN_SS
# 12 LEDs
set_location_assignment PIN_AA14 -to OUT12_LEDs[0]
set_location_assignment PIN_AA16 -to OUT12_LEDs[1]
set_location_assignment PIN_AA18 -to OUT12_LEDs[2]
set_location_assignment PIN_AA19 -to OUT12_LEDs[3]
set_location_assignment PIN_Y21 -to OUT12_LEDs[4]
set_location_assignment PIN_W22 -to OUT12_LEDs[5]
set_location_assignment PIN_U21 -to OUT12_LEDs[6]
set_location_assignment PIN_P21 -to OUT12_LEDs[7]
set_location_assignment PIN_N21 -to OUT12_LEDs[8]
set_location_assignment PIN_M21 -to OUT12_LEDs[9]
set_location_assignment PIN_L21 -to OUT12_LEDs[10]
set_location_assignment PIN_J21 -to OUT12_LEDs[11]
# 12 Slide switches
set_location_assignment PIN_AB14 -to SW12_SS[0]
set_location_assignment PIN_AB16 -to SW12_SS[1]
set_location_assignment PIN_AB18 -to SW12_SS[2]
set_location_assignment PIN_AB19 -to SW12_SS[3]
set_location_assignment PIN_AA20 -to SW12_SS[4]
set_location_assignment PIN_W21 -to SW12_SS[5]
set_location_assignment PIN_V22 -to SW12_SS[6]
set_location_assignment PIN_U22 -to SW12_SS[7]
set_location_assignment PIN_R22 -to SW12_SS[8]
set_location_assignment PIN_N22 -to SW12_SS[9]
set_location_assignment PIN_M22 -to SW12_SS[10]
set_location_assignment PIN_L22 -to SW12_SS[11]
# SRAM (not used)
set_location_assignment PIN_F1 -to n_sRamCS
set_location_assignment PIN_J2 -to n_sRamOE
set_location_assignment PIN_B4 -to n_sRamWE
set_location_assignment PIN_E1 -to sramData[0]
set_location_assignment PIN_C1 -to sramData[1]
set_location_assignment PIN_B1 -to sramData[2]
set_location_assignment PIN_B3 -to sramData[3]
set_location_assignment PIN_B2 -to sramData[4]
set_location_assignment PIN_C2 -to sramData[5]
set_location_assignment PIN_D2 -to sramData[6]
set_location_assignment PIN_F2 -to sramData[7]
set_location_assignment PIN_H1 -to sramAddress[0]
set_location_assignment PIN_J1 -to sramAddress[1]
set_location_assignment PIN_M1 -to sramAddress[2]
set_location_assignment PIN_N1 -to sramAddress[3]
set_location_assignment PIN_P1 -to sramAddress[4]
set_location_assignment PIN_P2 -to sramAddress[5]
set_location_assignment PIN_N2 -to sramAddress[6]
set_location_assignment PIN_M2 -to sramAddress[7]
set_location_assignment PIN_H2 -to sramAddress[8]
set_location_assignment PIN_A3 -to sramAddress[9]
set_location_assignment PIN_A4 -to sramAddress[10]
set_location_assignment PIN_C3 -to sramAddress[11]
set_location_assignment PIN_A5 -to sramAddress[12]
set_location_assignment PIN_A6 -to sramAddress[13]
set_location_assignment PIN_A7 -to sramAddress[14]
set_location_assignment PIN_A8 -to sramAddress[15]
set_location_assignment PIN_B7 -to sramAddress[16]
set_location_assignment PIN_B6 -to sramAddress[17]
set_location_assignment PIN_B5 -to sramAddress[18]
set_location_assignment PIN_C4 -to sramAddress[19]
# SDRAM (not used)
set_location_assignment PIN_Y6 -to sdRamClk
set_location_assignment PIN_W6 -to sdRamClkEn
set_location_assignment PIN_AA4 -to n_sdRamCas
set_location_assignment PIN_AA3 -to n_sdRamCe
set_location_assignment PIN_AB3 -to n_sdRamRas
set_location_assignment PIN_AB4 -to n_sdRamWe
set_location_assignment PIN_V2 -to sdRamAddr[0]
set_location_assignment PIN_V1 -to sdRamAddr[1]
set_location_assignment PIN_U2 -to sdRamAddr[2]
set_location_assignment PIN_U1 -to sdRamAddr[3]
set_location_assignment PIN_V3 -to sdRamAddr[4]
set_location_assignment PIN_V4 -to sdRamAddr[5]
set_location_assignment PIN_Y2 -to sdRamAddr[6]
set_location_assignment PIN_AA1 -to sdRamAddr[7]
set_location_assignment PIN_Y3 -to sdRamAddr[8]
set_location_assignment PIN_V5 -to sdRamAddr[9]
set_location_assignment PIN_W1 -to sdRamAddr[10]
set_location_assignment PIN_Y4 -to sdRamAddr[11]
set_location_assignment PIN_V6 -to sdRamAddr[12]
set_location_assignment PIN_Y1 -to sdRamAddr[13]
set_location_assignment PIN_W2 -to sdRamAddr[14]
set_location_assignment PIN_AA10 -to sdRamData[0]
set_location_assignment PIN_AB9 -to sdRamData[1]
set_location_assignment PIN_AA9 -to sdRamData[2]
set_location_assignment PIN_AB8 -to sdRamData[3]
set_location_assignment PIN_AA8 -to sdRamData[4]
set_location_assignment PIN_AB7 -to sdRamData[5]
set_location_assignment PIN_AA7 -to sdRamData[6]
set_location_assignment PIN_AB5 -to sdRamData[7]
set_location_assignment PIN_Y7 -to sdRamData[8]
set_location_assignment PIN_W8 -to sdRamData[9]
set_location_assignment PIN_Y8 -to sdRamData[10]
set_location_assignment PIN_V9 -to sdRamData[11]
set_location_assignment PIN_V10 -to sdRamData[12]
set_location_assignment PIN_Y10 -to sdRamData[13]
set_location_assignment PIN_W10 -to sdRamData[14]
set_location_assignment PIN_V11 -to sdRamData[15]


PDP-8 Front Panel Assembly Sheet