1
0
mirror of https://github.com/ibm2030/IBM2030.git synced 2026-01-11 23:52:47 +00:00
ibm2030.IBM2030/ibm2030.vhd

850 lines
27 KiB
VHDL

---------------------------------------------------------------------------
-- Copyright 2010 Lawrence Wilkinson lawrence@ljw.me.uk
--
-- This file is part of LJW2030, a VHDL implementation of the IBM
-- System/360 Model 30.
--
-- LJW2030 is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- LJW2030 is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with LJW2030 . If not, see <http://www.gnu.org/licenses/>.
--
---------------------------------------------------------------------------
--
-- File: ibm2030.vhd
-- Creation Date: 21:17:39 2005-04-18
-- Description:
-- Top-level System360/30, including CPU, Panel Lamps and Panel Switches
-- Does not yet include I/O
-- Page references like "5-01A" refer to the IBM Maintenance Diagram Manual (MDM)
-- for the 360/30 R25-5103-1
-- References like "02AE6" refer to coordinate "E6" on page "5-02A"
-- Logic references like "AB3D5" refer to card "D5" in board "B3" in gate "A"
-- Gate A is the main logic gate, B is the second (optional) logic gate,
-- C is the core storage and X is the CCROS unit
--
-- Revision History:
-- Revision 1.0 2010-07-09
-- Initial release - no I/O
-- Revision 1.1 2012-04-07
-- 1050 Serial console added
-- External main and aux storage, with pre-loading from platform flash
--
---------------------------------------------------------------------------
library IEEE;
library UNISIM;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
USE work.Buses_package.all;
use UNISIM.vcomponents.all;
use work.all;
entity ibm2030 is
Port ( -- Physical I/O on Digilent S3 Board
-- Seven-segment displays
ssd : out std_logic_vector(7 downto 0); -- 7-segment segment cathodes - active=0, a=bit0, g=bit6, dp=bit7
ssdan : out std_logic_vector(3 downto 0); -- 7-segment digit anodes - active=0, RHS=bit0
-- Discrete LEDs
led : out std_logic_vector(7 downto 0); -- 8 LEDs
-- Pushbuttons and switches
pb : in std_logic_vector(3 downto 0); -- 4 pushbuttons
sw : in std_logic_vector(7 downto 0); -- 8 slide switches
-- Connections to scanned front panel switches
pa_io1,pa_io2,pa_io3,pa_io4 : in std_logic := '0'; -- 4 digital inputs
pa_io5,pa_io6,pa_io7,pa_io8,pa_io9,
pa_io10,pa_io11,pa_io12,pa_io13,pa_io14 : out std_logic; -- 10 digital switch scanning outputs
pa_io15,pa_io16,pa_io17,pa_io18,ma2_db0,ma2_db1,
ma2_db2,ma2_db3,ma2_db4,ma2_db5: in std_logic := '0'; -- 10 digital switch scan inputs
-- ma2_db6,ma2_db7,ma2_astb,ma2_dstb,ma2_write, ma2_wait, ma2_reset, ma2_int : in std_logic := '0'; -- 8 digital inputs (not used)
-- Keyboard connection
-- ps2_clk : inout std_logic; -- Keyboard/Mouse clock (not used)
-- ps2_data : inout std_logic; -- Keyboard/Mouse data (not used)
-- Video output
vga_r,vga_g,vga_b,vga_hs,vga_vs : out std_logic; -- VGA output RGB+Sync
-- Panel switches input
MAX7318_SCL : out std_logic;
MAX7318_SDA : inout std_logic;
-- Panel lights output
MAX7219_CLK,MAX7219_LOAD,MAX7219_DIN : out std_logic;
-- MAX6951 is charlieplexed LED mux (miniature panel)
MAX6951_CLK,MAX6951_CS0,MAX6951_CS1,MAX6951_CS2,MAX6951_CS3,MAX6951_DIN : out std_logic;
-- Static RAM interface
sramaddr : out std_logic_vector(17 downto 0);
srama : inout std_logic_vector(8 downto 0);
sramace : out std_logic;
sramwe : out std_logic;
sramoe : out std_logic;
sramaub : out std_logic;
sramalb : out std_logic;
-- Serial I/O
serialRx : in std_logic;
serialTx : out std_logic := '1';
-- 50Mhz clock
clk : in std_logic;
-- Configuration PROM interface
din : in std_logic;
reset_prom : out std_logic;
rclk : out std_logic);
end ibm2030;
architecture FMD of ibm2030 is
-- Indicator outputs from CPU
signal WX_IND : std_logic_vector(0 to 12);
signal W_IND_P : std_logic;
signal X_IND_P : std_logic;
signal IND_SALS : SALS_BUS;
signal IND_EX,IND_CY_MATCH,IND_ALLOW_WR,IND_1050_INTRV,IND_1050_REQ,IND_MPX,IND_SEL_CHNL : STD_LOGIC;
signal IND_MSDR : STD_LOGIC_VECTOR(0 to 7);
signal IND_MSDR_P : STD_LOGIC;
signal IND_OPNL_IN : STD_LOGIC;
signal IND_ADDR_IN : STD_LOGIC;
signal IND_STATUS_IN : STD_LOGIC;
signal IND_SERV_IN : STD_LOGIC;
signal IND_SEL_OUT : STD_LOGIC;
signal IND_ADDR_OUT : STD_LOGIC;
signal IND_CMMD_OUT : STD_LOGIC;
signal IND_SERV_OUT : STD_LOGIC;
signal IND_SUPPR_OUT : STD_LOGIC;
signal IND_FO : STD_LOGIC_VECTOR(0 to 7);
signal IND_FO_P: STD_LOGIC;
signal IND_A : STD_LOGIC_VECTOR(0 to 8);
signal IND_B : STD_LOGIC_VECTOR(0 to 8);
signal IND_ALU : STD_LOGIC_VECTOR(0 to 8);
signal IND_M : STD_LOGIC_VECTOR(0 to 8);
signal IND_N : STD_LOGIC_VECTOR(0 to 8);
signal IND_MAIN_STG : STD_LOGIC;
signal IND_LOC_STG : STD_LOGIC;
signal IND_COMP_MODE : STD_LOGIC;
signal IND_CHK_A_REG : STD_LOGIC;
signal IND_CHK_B_REG : STD_LOGIC;
signal IND_CHK_STOR_ADDR : STD_LOGIC;
signal IND_CHK_CTRL_REG : STD_LOGIC;
signal IND_CHK_ROS_SALS : STD_LOGIC;
signal IND_CHK_ROS_ADDR : STD_LOGIC;
signal IND_CHK_STOR_DATA : STD_LOGIC;
signal IND_CHK_ALU : STD_LOGIC;
signal IND_SYST : STD_LOGIC;
signal IND_MAN : STD_LOGIC;
signal IND_WAIT : STD_LOGIC;
signal IND_TEST : STD_LOGIC;
signal IND_LOAD : STD_LOGIC;
signal IND_LP : STD_LOGIC;
-- SX
signal IND_COUNT : STD_LOGIC_VECTOR(0 to 15) := "0000000000000000";
signal IND_COUNT_LP, IND_COUNT_HP : STD_LOGIC := '1';
signal IND_SX1_DATA : STD_LOGIC_VECTOR(0 to 7) := "00000000";
signal IND_SX1_DATAP : STD_LOGIC := '1';
signal IND_SX1_COMMAND: STD_LOGIC_VECTOR(0 to 7) := "00000000";
signal IND_SX1_KEY: STD_LOGIC_VECTOR(0 to 3) := "0000";
signal IND_SX1_KEYP : STD_LOGIC := '1';
signal IND_SX1_PCI, IND_SX1_SKIP, IND_SX1_SLI, IND_SX1_CD, IND_SX1_CC : STD_LOGIC;
signal IND_SX1_DA_CHK, IND_SX1_PROT_CHK, IND_SX1_PROG_CHK, IND_SX1_IL_CHK, IND_SX1_CHNLDATA_CHK, IND_SX1_IF_CHK, IND_SX1_CHNLCTRL_CHK : STD_LOGIC;
signal IND_SX1_STATIN_TAG, IND_SX1_ADRIN_TAG, IND_SX1_OPIN_TAG, IND_SX1_SUPOUT_TAG, IND_SX1_SERVOUT_TAG, IND_SX1_CMMDOUT_TAG, IND_SX1_ADROUT_TAG, IND_SX1_SELOUT_TAG : STD_LOGIC;
-- Switch inputs to CPU
signal SW_START,SW_LOAD,SW_SET_IC,SW_STOP,SW_POWER_OFF : STD_LOGIC;
signal SW_INH_CF_STOP,SW_PROC,SW_SCAN : STD_LOGIC;
signal SW_SINGLE_CYCLE,SW_INSTRUCTION_STEP,SW_RATE_SW_PROCESS : STD_LOGIC;
signal SW_LAMP_TEST,SW_DSPLY,SW_STORE,SW_SYS_RST : STD_LOGIC;
signal SW_CHK_RST,SW_ROAR_RST,SW_CHK_RESTART,SW_DIAGNOSTIC : STD_LOGIC;
signal SW_CHK_STOP,SW_CHK_SW_PROCESS,SW_CHK_SW_DISABLE,SW_ROAR_RESTT_STOR_BYPASS : STD_LOGIC;
signal SW_ROAR_RESTT,SW_ROAR_RESTT_WITHOUT_RST,SW_EARLY_ROAR_STOP,SW_ROAR_STOP : STD_LOGIC;
signal SW_ROAR_SYNC,SW_ADDR_COMP_PROC,SW_SAR_DLYD_STOP,SW_SAR_STOP,SW_SAR_RESTART : STD_LOGIC;
signal SW_INTRP_TIMER, SW_CONS_INTRP : STD_LOGIC;
signal SW_A,SW_B,SW_C,SW_D,SW_F,SW_G,SW_H,SW_J : STD_LOGIC_VECTOR(0 to 3);
signal SW_AP,SW_BP,SW_CP,SW_DP,SW_FP,SW_GP,SW_HP,SW_JP : STD_LOGIC;
signal E_SW : E_SW_BUS_Type;
-- Misc stuff
signal StorageIn : STORAGE_IN_INTERFACE; -- CPU interface to storage
signal StorageOut : STORAGE_OUT_INTERFACE; -- CPU interface to storage
signal SerialIn : PCH_CONN;
signal SerialOut : RDR_CONN;
signal SerialControl : CONN_1050;
signal SerialBusUngated : STD_LOGIC_VECTOR(7 downto 0);
signal RxDataAvailable : STD_LOGIC;
signal RxAck, PunchGate : STD_LOGIC;
signal SO : Serial_Output_Lines;
signal SwSlow : STD_LOGIC := '0'; -- Set to '1' to slow clock down to 1Hz, not used
signal N60_CY_TIMER_PULSE : STD_LOGIC; -- Used for the Interval Timer
signal Clock1ms : STD_LOGIC; -- 1kHz clock for single-shots etc.
signal DEBUG : DEBUG_BUS; -- Passed to all modeles to probe signals
signal LED_vector : std_logic_vector(0 to 255);
signal Switch_vector : std_logic_vector(0 to 63);
begin
cpu : entity work.cpu port map (
WX_IND => WX_IND,
W_IND_P => W_IND_P,
X_IND_P => X_IND_P,
IND_SALS => IND_SALS,
IND_EX => IND_EX,
IND_CY_MATCH => IND_CY_MATCH,
IND_ALLOW_WR => IND_ALLOW_WR,
IND_1050_INTRV => IND_1050_INTRV,
IND_1050_REQ => IND_1050_REQ,
IND_MPX => IND_MPX,
IND_SEL_CHNL => IND_SEL_CHNL,
IND_MSDR => IND_MSDR,
IND_MSDR_P => IND_MSDR_P,
IND_OPNL_IN => IND_OPNL_IN,
IND_ADDR_IN => IND_ADDR_IN,
IND_STATUS_IN => IND_STATUS_IN,
IND_SERV_IN => IND_SERV_IN,
IND_SEL_OUT => IND_SEL_OUT,
IND_ADDR_OUT => IND_ADDR_OUT,
IND_CMMD_OUT => IND_CMMD_OUT,
IND_SERV_OUT => IND_SERV_OUT,
IND_SUPPR_OUT => IND_SUPPR_OUT,
IND_FO => IND_FO,
IND_FO_P => IND_FO_P,
IND_A => IND_A,
IND_B => IND_B,
IND_ALU => IND_ALU,
IND_M => IND_M,
IND_N => IND_N,
IND_MAIN_STG => IND_MAIN_STG,
IND_LOC_STG => IND_LOC_STG,
IND_COMP_MODE => IND_COMP_MODE,
IND_CHK_A_REG => IND_CHK_A_REG,
IND_CHK_B_REG => IND_CHK_B_REG,
IND_CHK_STOR_ADDR => IND_CHK_STOR_ADDR,
IND_CHK_CTRL_REG => IND_CHK_CTRL_REG,
IND_CHK_ROS_SALS => IND_CHK_ROS_SALS,
IND_CHK_ROS_ADDR => IND_CHK_ROS_ADDR,
IND_CHK_STOR_DATA => IND_CHK_STOR_DATA,
IND_CHK_ALU => IND_CHK_ALU,
IND_LOAD => IND_LOAD,
IND_WAIT => IND_WAIT,
IND_TEST => IND_TEST,
IND_MAN => IND_MAN,
IND_SYST => IND_SYST,
SW_START => SW_START,
SW_LOAD => SW_LOAD,
SW_SET_IC => SW_SET_IC,
SW_STOP => SW_STOP,
SW_POWER_OFF => SW_POWER_OFF,
SW_INH_CF_STOP => SW_INH_CF_STOP,
SW_PROC => SW_PROC,
SW_SCAN => SW_SCAN,
SW_SINGLE_CYCLE => SW_SINGLE_CYCLE,
SW_INSTRUCTION_STEP => SW_INSTRUCTION_STEP,
SW_RATE_SW_PROCESS => SW_RATE_SW_PROCESS,
SW_LAMP_TEST => SW_LAMP_TEST,
SW_DSPLY => SW_DSPLY,
SW_STORE => SW_STORE,
SW_SYS_RST => SW_SYS_RST,
SW_CHK_RST => SW_CHK_RST,
SW_ROAR_RST => SW_ROAR_RST,
SW_CHK_RESTART => SW_CHK_RESTART,
SW_DIAGNOSTIC => SW_DIAGNOSTIC,
SW_CHK_STOP => SW_CHK_STOP,
SW_CHK_SW_PROCESS => SW_CHK_SW_PROCESS,
SW_CHK_SW_DISABLE => SW_CHK_SW_DISABLE,
SW_ROAR_RESTT_STOR_BYPASS => SW_ROAR_RESTT_STOR_BYPASS,
SW_ROAR_RESTT => SW_ROAR_RESTT,
SW_ROAR_RESTT_WITHOUT_RST => SW_ROAR_RESTT_WITHOUT_RST,
SW_EARLY_ROAR_STOP => SW_EARLY_ROAR_STOP,
SW_ROAR_STOP => SW_ROAR_STOP,
SW_ROAR_SYNC => SW_ROAR_SYNC,
SW_ADDR_COMP_PROC => SW_ADDR_COMP_PROC,
SW_SAR_DLYD_STOP => SW_SAR_DLYD_STOP,
SW_SAR_STOP => SW_SAR_STOP,
SW_SAR_RESTART => SW_SAR_RESTART,
SW_INTRP_TIMER => SW_INTRP_TIMER,
SW_CONS_INTRP => SW_CONS_INTRP,
SW_A => SW_A,
SW_B => SW_B,
SW_C => SW_C,
SW_D => SW_D,
SW_F => SW_F,
SW_G => SW_G,
SW_H => SW_H,
SW_J => SW_J,
SW_AP => SW_AP,
SW_BP => SW_BP,
SW_CP => SW_CP,
SW_DP => SW_DP,
SW_FP => SW_FP,
SW_GP => SW_GP,
SW_HP => SW_HP,
SW_JP => SW_JP,
E_SW => E_SW,
-- Storage interface
StorageIn => StorageIn,
StorageOut => StorageOut,
-- Serial interface for 1050
serialInput.SerialRx => SerialRx,
serialInput.DCD => '1',
serialInput.DSR => '1',
serialInput.RI => '0',
serialInput.CTS => '1',
serialOutput => SO,
-- Multiplexor interface not connected to anything yet
MPX_BUS_O => open,
MPX_BUS_I => (others=>'0'),
MPX_TAGS_O => open,
MPX_TAGS_I => (others=>'0'),
DEBUG => DEBUG, -- Used to pass debug signals up to the top level for output
N60_CY_TIMER_PULSE => N60_CY_TIMER_PULSE, -- Actually 50Hz
Clock1ms => Clock1ms,
SwSlow => SwSlow,
clk => clk -- 50Mhz clock
);
frontPanel : entity vga_panel port map (
Clock50 => clk,
Red => vga_r, Green => vga_g, Blue => vga_b,
HS => vga_hs, VS => vga_vs,
Indicators( 0) => '0', -- Constant
Indicators( 1) => IND_SALS.SALS_PN,
Indicators( 2 to 7) => IND_SALS.SALS_CN,
Indicators( 8) => IND_SALS.SALS_PA,
Indicators( 9) => IND_LP,
Indicators( 10) => W_IND_P,
Indicators( 11 to 15) => WX_IND(0 to 4),
Indicators( 16) => X_IND_P,
Indicators( 17 to 24) => WX_IND(5 to 12),
Indicators( 25) => IND_SALS.SALS_PS,
Indicators( 26 to 29) => IND_SALS.SALS_CH,
Indicators( 30 to 33) => IND_SALS.SALS_CL,
Indicators( 34) => IND_SALS.SALS_AA,
Indicators( 35 to 38) => IND_SALS.SALS_CA,
Indicators( 39 to 40) => IND_SALS.SALS_CB,
Indicators( 41 to 43) => IND_SALS.SALS_CM,
Indicators( 44 to 45) => IND_SALS.SALS_CU,
Indicators( 46) => IND_SALS.SALS_AK,
Indicators( 47) => IND_SALS.SALS_PK,
Indicators( 48 to 51) => IND_SALS.SALS_CK,
Indicators( 52) => IND_SALS.SALS_PC,
Indicators( 53 to 56) => IND_SALS.SALS_CD,
Indicators( 57 to 59) => IND_SALS.SALS_CF,
Indicators( 60 to 61) => IND_SALS.SALS_CG,
Indicators( 62 to 63) => IND_SALS.SALS_CV,
Indicators( 64 to 66) => IND_SALS.SALS_CC,
Indicators( 67) => IND_SALS.SALS_SA,
Indicators( 68 to 71) => IND_SALS.SALS_CS,
-- Skip 18 + 9 + 9 + 5 + 9 + 6 = 56 for SX1 (72 to 127)
Indicators( 72 to 127) => "00000000000000000000000000000000000000000000000000000000",
-- If we had SX2 there would be another 56 here
-- MPX
Indicators( 128) => IND_OPNL_IN,
Indicators( 129) => IND_ADDR_IN,
Indicators( 130) => IND_STATUS_IN,
Indicators( 131) => IND_SERV_IN,
Indicators( 132) => IND_SEL_OUT,
Indicators( 133) => IND_ADDR_OUT,
Indicators( 134) => IND_CMMD_OUT,
Indicators( 135) => IND_SERV_OUT,
Indicators( 136) => IND_SUPPR_OUT,
Indicators( 137) => IND_FO_P,
Indicators(138 to 145) => IND_FO,
-- MSAR
Indicators( 146) => IND_MAIN_STG,
Indicators( 147) => IND_M(8),
Indicators(148 to 155) => IND_M(0 to 7),
Indicators( 156) => IND_N(8),
Indicators(157 to 164) => IND_N(0 to 7),
Indicators( 165) => IND_LOC_STG,
-- MSDR
Indicators( 166) => IND_MSDR_P,
Indicators(167 to 174) => IND_MSDR,
-- ALU
Indicators( 175) => IND_ALU(8),
Indicators(176 to 183) => IND_ALU(0 to 7),
Indicators( 184) => IND_EX,
Indicators( 185) => IND_CY_MATCH,
Indicators( 186) => IND_ALLOW_WR,
Indicators( 187) => IND_CHK_STOR_ADDR,
Indicators( 188) => IND_CHK_STOR_DATA,
Indicators( 189) => IND_1050_INTRV,
Indicators( 190) => IND_1050_REQ,
Indicators( 191) => IND_CHK_B_REG,
Indicators( 192) => IND_CHK_A_REG,
Indicators( 193) => IND_CHK_ALU,
-- A,B
Indicators( 194) => IND_A(8),
Indicators(195 to 202) => IND_A(0 to 7),
Indicators( 203) => IND_B(8),
Indicators(204 to 211) => IND_B(0 to 7),
Indicators( 212) => IND_MPX,
Indicators( 213) => IND_SEL_CHNL,
Indicators( 214) => IND_COMP_MODE,
Indicators( 215) => IND_CHK_ROS_ADDR,
Indicators( 216) => IND_CHK_ROS_SALS,
Indicators( 217) => IND_CHK_CTRL_REG,
-- The following indicators mimic the 8 Hex rotary switches to make it easier to set them
Indicators(218 to 221) => SW_A(0 to 3),
Indicators(222 to 225) => SW_B(0 to 3),
Indicators(226 to 229) => SW_C(0 to 3),
Indicators(230 to 233) => SW_D(0 to 3),
Indicators(234 to 237) => SW_F(0 to 3),
Indicators(238 to 241) => SW_G(0 to 3),
Indicators(242 to 245) => SW_H(0 to 3),
Indicators(246 to 249) => SW_J(0 to 3)
);
-- LEDs are set here
led(0) <= IND_LOAD;
led(1) <= IND_TEST;
led(2) <= IND_WAIT;
led(3) <= IND_MAN;
led(4) <= IND_SYST;
led(5) <= '0';
led(6) <= '0';
led(7) <= DEBUG.Probe;
IND_LP <= SW_LAMP_TEST;
-- Temporary Selector Channel indicators
IND_COUNT_LP <= '1';
IND_COUNT_HP <= '1';
IND_COUNT <= (others => SW_LAMP_TEST);
IND_SX1_DATA <= (others => SW_LAMP_TEST);
IND_SX1_DATAP <= SW_LAMP_TEST;
IND_SX1_COMMAND <= (others => SW_LAMP_TEST);
IND_SX1_KEY <= (others => SW_LAMP_TEST);
IND_SX1_KEYP <= SW_LAMP_TEST;
IND_SX1_PCI <= SW_LAMP_TEST;
IND_SX1_SKIP <= SW_LAMP_TEST;
IND_SX1_SLI <= SW_LAMP_TEST;
IND_SX1_CD <= SW_LAMP_TEST;
IND_SX1_CC <= SW_LAMP_TEST;
IND_SX1_DA_CHK <= SW_LAMP_TEST;
IND_SX1_PROT_CHK <= SW_LAMP_TEST;
IND_SX1_PROG_CHK <= SW_LAMP_TEST;
IND_SX1_IL_CHK <= SW_LAMP_TEST;
IND_SX1_CHNLDATA_CHK <= SW_LAMP_TEST;
IND_SX1_STATIN_TAG <= SW_LAMP_TEST;
IND_SX1_ADRIN_TAG <= SW_LAMP_TEST;
IND_SX1_OPIN_TAG <= SW_LAMP_TEST;
IND_SX1_SUPOUT_TAG <= SW_LAMP_TEST;
IND_SX1_SERVOUT_TAG <= SW_LAMP_TEST;
IND_SX1_CMMDOUT_TAG <= SW_LAMP_TEST;
IND_SX1_ADROUT_TAG <= SW_LAMP_TEST;
IND_SX1_SELOUT_TAG <= SW_LAMP_TEST;
IND_SX1_IF_CHK <= SW_LAMP_TEST;
IND_SX1_CHNLCTRL_CHK <= SW_LAMP_TEST;
frontPanel_switches: entity switches port map (
-- Hardware switch inputs and scan outputs
SwA_scan => pa_io5,
SwB_scan => pa_io6,
SwC_scan => pa_io7,
SwD_scan => pa_io8,
SwE_scan => pa_io9,
SwF_scan => pa_io10,
SwG_scan => pa_io11,
SwH_scan => pa_io12,
SwJ_scan => pa_io13,
SwAC_scan => pa_io14,
Hex_in(0) => pa_io1,
Hex_in(1) => pa_io2,
Hex_in(2) => pa_io3,
Hex_in(3) => pa_io4,
SW_E_INNER => pa_io15,
SW_E_OUTER => pa_io16,
RawSw_Proc_Inh_CF_Stop => pa_io17,
RawSw_Proc_Scan => pa_io18,
RawSw_Rate_Single_Cycle => ma2_db1,
RawSw_Rate_Instruction_Step => ma2_db0,
RawSw_Chk_Chk_Restart => ma2_db5,
RawSw_Chk_Diagnostic => ma2_db2,
RawSw_Chk_Stop => ma2_db4,
RawSw_Chk_Disable => ma2_db3,
sw => sw,
pb => pb,
-- Switches fed to CPU
SwA => SW_A, SwAP => SW_AP,
SwB => SW_B, SwBP => SW_BP,
SwC => SW_C, SwCP => SW_CP,
SwD => SW_D, SwDP => SW_DP,
SwE => E_SW,
SwF => SW_F, SwFP => SW_FP,
SwG => SW_G, SwGP => SW_GP,
SwH => SW_H, SwHP => SW_HP,
SwJ => SW_J, SwJP => SW_JP,
Sw_PowerOff => SW_POWER_OFF,
Sw_Interrupt => SW_CONS_INTRP,
Sw_Load => SW_LOAD,
Sw_SystemReset => SW_SYS_RST,
Sw_RoarReset => SW_ROAR_RST,
Sw_Start => SW_START,
Sw_SetIC => SW_SET_IC,
Sw_CheckReset => SW_CHK_RST,
Sw_Stop => SW_STOP,
Sw_IntTmr => SW_INTRP_TIMER,
Sw_Store => SW_STORE,
Sw_LampTest => SW_LAMP_TEST,
Sw_Display => SW_DSPLY,
Sw_Proc_Inh_CF_Stop => SW_INH_CF_STOP,
Sw_Proc_Proc => SW_PROC,
Sw_Proc_Scan => SW_SCAN,
Sw_Rate_Single_Cycle => SW_SINGLE_CYCLE,
Sw_Rate_Instruction_Step => SW_INSTRUCTION_STEP,
Sw_Rate_Process => SW_RATE_SW_PROCESS,
Sw_Chk_Chk_Restart => SW_CHK_RESTART,
Sw_Chk_Diagnostic => SW_DIAGNOSTIC,
Sw_Chk_Stop => SW_CHK_STOP,
Sw_Chk_Process => SW_CHK_SW_PROCESS,
Sw_Chk_Disable => SW_CHK_SW_DISABLE,
Sw_ROAR_RESTT_STOR_BYPASS => SW_ROAR_RESTT_STOR_BYPASS,
Sw_ROAR_RESTT => SW_ROAR_RESTT,
Sw_ROAR_RESTT_WITHOUT_RST => SW_ROAR_RESTT_WITHOUT_RST,
Sw_EARLY_ROAR_STOP => SW_EARLY_ROAR_STOP,
Sw_ROAR_STOP => SW_ROAR_STOP,
Sw_ROAR_SYNC => SW_ROAR_SYNC,
Sw_ADDR_COMP_PROC => SW_ADDR_COMP_PROC,
Sw_SAR_DLYD_STOP => SW_SAR_DLYD_STOP,
Sw_SAR_STOP => SW_SAR_STOP,
Sw_SAR_RESTART => SW_SAR_RESTART,
-- MAX7318
SCL => MAX7318_SCL,
SDA => MAX7318_SDA,
-- Clocks etc.
clk => clk, -- 50MHz clock
status_lamps(4) => IND_LOAD,
status_lamps(3) => IND_TEST,
status_lamps(2) => IND_WAIT,
status_lamps(1) => IND_MAN,
status_lamps(0) => IND_SYST,
-- Clock1ms => Clock1ms,
Timer => N60_CY_TIMER_PULSE -- Output from Switches is actually 50Hz
);
core_storage : entity storage port map(
phys_address => sramaddr(16 downto 0),
phys_data => srama(8 downto 0),
phys_CE => sramace,
phys_OE => sramoe,
phys_WE => sramwe,
phys_UB => sramaub,
phys_LB => sramalb,
-- Interface to config ROM
din => din,
reset_prom => reset_prom,
cclk => rclk,
-- Storage interface to CPU
StorageIn => StorageIn,
StorageOut => StorageOut,
-- Debug => Debug,
-- Other inputs
clk => clk
);
sramaddr(17) <= '0';
LED_vector <= (
0 => IND_SALS.SALS_PA,
1 => IND_SALS.SALS_CN(5),
2 => IND_SALS.SALS_CN(4),
3 => IND_SALS.SALS_CN(3),
4 => IND_SALS.SALS_CN(2),
5 => IND_SALS.SALS_CN(1),
6 => IND_SALS.SALS_CN(0),
7 => IND_SALS.SALS_PN,
8 => X_IND_P,
9 => WX_IND(4),
10 => WX_IND(3),
11 => WX_IND(2),
12 => WX_IND(1),
13 => WX_IND(0),
14 => W_IND_P,
15 => IND_LP,
16 => WX_IND(12),
17 => WX_IND(11),
18 => WX_IND(10),
19 => WX_IND(9),
20 => WX_IND(8),
21 => WX_IND(7),
22 => WX_IND(6),
23 => WX_IND(5),
24 => IND_SALS.SALS_CL(2),
25 => IND_SALS.SALS_CL(1),
26 => IND_SALS.SALS_CL(0),
27 => IND_SALS.SALS_CH(3),
28 => IND_SALS.SALS_CH(2),
29 => IND_SALS.SALS_CH(1),
30 => IND_SALS.SALS_CH(0),
31 => IND_SALS.SALS_PS,
32 => IND_SALS.SALS_CB(1),
33 => IND_SALS.SALS_CB(0),
34 => IND_SALS.SALS_CA(3),
35 => IND_SALS.SALS_CA(2),
36 => IND_SALS.SALS_CA(1),
37 => IND_SALS.SALS_CA(0),
38 => IND_SALS.SALS_AA,
39 => IND_SALS.SALS_CL(3),
40 => IND_SALS.SALS_CK(0),
41 => IND_SALS.SALS_PK,
42 => IND_SALS.SALS_AK,
43 => IND_SALS.SALS_CU(1),
44 => IND_SALS.SALS_CU(0),
45 => IND_SALS.SALS_CM(2),
46 => IND_SALS.SALS_CM(1),
47 => IND_SALS.SALS_CM(0),
48 => IND_SALS.SALS_CD(3),
49 => IND_SALS.SALS_CD(2),
50 => IND_SALS.SALS_CD(1),
51 => IND_SALS.SALS_CD(0),
52 => IND_SALS.SALS_PC,
53 => IND_SALS.SALS_CK(3),
54 => IND_SALS.SALS_CK(2),
55 => IND_SALS.SALS_CK(1),
56 => IND_SALS.SALS_CC(0),
57 => IND_SALS.SALS_CV(1),
58 => IND_SALS.SALS_CV(0),
59 => IND_SALS.SALS_CG(1),
60 => IND_SALS.SALS_CG(0),
61 => IND_SALS.SALS_CF(2),
62 => IND_SALS.SALS_CF(1),
63 => IND_SALS.SALS_CF(0),
64 => IND_COUNT_HP, -- Count-P
65 => IND_SALS.SALS_CS(3),
66 => IND_SALS.SALS_CS(2),
67 => IND_SALS.SALS_CS(1),
68 => IND_SALS.SALS_CS(0),
69 => IND_SALS.SALS_SA,
70 => IND_SALS.SALS_CC(2),
71 => IND_SALS.SALS_CC(1),
-- Count 72-87,95
72 => IND_COUNT(8),
73 => IND_COUNT(6),
74 => IND_COUNT(5),
75 => IND_COUNT(4),
76 => IND_COUNT(3),
77 => IND_COUNT(2),
78 => IND_COUNT(1),
79 => IND_COUNT(0),
80 => IND_COUNT(15),
81 => IND_COUNT(14),
82 => IND_COUNT(13),
83 => IND_COUNT(12),
84 => IND_COUNT(11),
85 => IND_COUNT(10),
86 => IND_COUNT(9),
87 => IND_COUNT_LP,
95 => IND_COUNT(0),
-- SX1
88 => IND_SX1_DATA(5),
89 => IND_SX1_DATA(4),
90 => IND_SX1_DATA(3),
91 => IND_SX1_DATA(2),
92 => IND_SX1_DATA(1),
93 => IND_SX1_DATA(0),
94 => IND_SX1_DATAP,
96 => IND_SX1_COMMAND(4),
97 => IND_SX1_KEY(3),
98 => IND_SX1_KEY(2),
99 => IND_SX1_KEY(1),
100 => IND_SX1_KEY(0),
101 => IND_SX1_KEYP,
102 => IND_SX1_DATA(7),
103 => IND_SX1_DATA(6),
104 => IND_SX1_PCI,
105 => IND_SX1_SKIP,
106 => IND_SX1_SLI,
107 => IND_SX1_CD,
108 => IND_SX1_CC,
109 => IND_SX1_COMMAND(7),
110 => IND_SX1_COMMAND(6),
111 => IND_SX1_COMMAND(5),
112 => IND_SX1_DA_CHK,
113 => IND_SX1_PROT_CHK,
114 => IND_SX1_PROG_CHK,
115 => IND_SX1_IL_CHK,
116 => IND_SX1_CHNLDATA_CHK,
117 => IND_SX1_STATIN_TAG,
118 => IND_SX1_ADRIN_TAG,
119 => IND_SX1_OPIN_TAG,
120 => '0', -- LED5
121 => IND_SX1_SUPOUT_TAG,
122 => IND_SX1_SERVOUT_TAG,
123 => IND_SX1_CMMDOUT_TAG,
124 => IND_SX1_ADROUT_TAG,
125 => IND_SX1_SELOUT_TAG,
126 => IND_SX1_IF_CHK,
127 => IND_SX1_CHNLCTRL_CHK,
-- SX2 128-150. 162-167
-- Temporary indicators 152-159
152 => IND_LOAD,
153 => IND_TEST,
154 => IND_WAIT,
155 => IND_MAN,
156 => IND_SYST,
157 => '1', -- Power
158 => '1',
159 => '1',
160 => IND_ADDR_IN,
161 => IND_OPNL_IN,
-- 162-167 in SX2
168 => IND_FO_P,
169 => IND_SUPPR_OUT,
170 => IND_SERV_OUT,
171 => IND_CMMD_OUT,
172 => IND_ADDR_OUT,
173 => IND_SEL_OUT,
174 => IND_SERV_IN,
175 => IND_STATUS_IN,
176 => IND_FO(7),
177 => IND_FO(6),
178 => IND_FO(5),
179 => IND_FO(4),
180 => IND_FO(3),
181 => IND_FO(2),
182 => IND_FO(1),
183 => IND_FO(0),
184 => IND_M(6),
185 => IND_M(5),
186 => IND_M(4),
187 => IND_M(3),
188 => IND_M(2),
189 => IND_M(1),
190 => IND_M(0),
191 => IND_M(8),
192 => IND_N(5),
193 => IND_N(4),
194 => IND_N(3),
195 => IND_N(2),
196 => IND_N(1),
197 => IND_N(0),
198 => IND_N(8),
199 => IND_M(7),
200 => IND_MSDR(2),
201 => IND_MSDR(1),
202 => IND_MSDR(0),
203 => IND_MSDR_P,
204 => IND_LOC_STG,
205 => IND_MAIN_STG,
206 => IND_N(7),
207 => IND_N(6),
208 => IND_ALU(1),
209 => IND_ALU(0),
210 => IND_ALU(8),
211 => IND_MSDR(7),
212 => IND_MSDR(6),
213 => IND_MSDR(5),
214 => IND_MSDR(4),
215 => IND_MSDR(3),
216 => IND_B(0),
217 => IND_B(8),
218 => IND_ALU(7),
219 => IND_ALU(6),
220 => IND_ALU(5),
221 => IND_ALU(4),
222 => IND_ALU(3),
223 => IND_ALU(2),
224 => IND_A(8),
225 => IND_B(7),
226 => IND_B(6),
227 => IND_B(5),
228 => IND_B(4),
229 => IND_B(3),
230 => IND_B(2),
231 => IND_B(1),
232 => IND_A(7),
233 => IND_A(6),
234 => IND_A(5),
235 => IND_A(4),
236 => IND_A(3),
237 => IND_A(2),
238 => IND_A(1),
239 => IND_A(0),
240 => IND_CHK_B_REG,
241 => IND_1050_REQ,
242 => IND_1050_INTRV,
243 => IND_CHK_STOR_DATA,
244 => IND_CHK_STOR_ADDR,
245 => IND_ALLOW_WR,
246 => IND_CY_MATCH,
247 => IND_EX,
248 => IND_CHK_CTRL_REG,
249 => IND_CHK_ROS_SALS,
250 => IND_CHK_ROS_ADDR,
251 => IND_COMP_MODE,
252 => IND_SEL_CHNL,
253 => IND_MPX,
254 => IND_CHK_ALU,
255 => IND_CHK_A_REG,
others => '0');
front_panel_LEDs : entity panel_LEDs
generic map(
clock_divider => 2,
number_LEDs => 256
)
port map(
clk => clk,
LEDs => LED_vector,
-- MAX7219 is standard LED mux (full-size panel)
MAX7219_CLK => MAX7219_CLK,
MAX7219_LOAD => MAX7219_LOAD,
MAX7219_DIN => MAX7219_DIN,
-- MAX6951 is charlieplexed LED mux (miniature panel)
MAX6951_CLK => MAX6951_CLK,
MAX6951_CS0 => MAX6951_CS0,
MAX6951_CS1 => MAX6951_CS1,
MAX6951_CS2 => MAX6951_CS2,
MAX6951_CS3 => MAX6951_CS3,
MAX6951_DIN => MAX6951_DIN
);
number_LEDs : entity segment_LEDs
port map(
clk => clk,
number(15 downto 13) => "000",
number(12 downto 0) => WX_IND(0 to 12),
anodes => ssdan,
cathodes => ssd
);
DEBUG.Selection <= CONV_INTEGER(unsigned(SW_J));
SerialTx <= SO.SerialTx;
-- with DEBUG.Selection select
-- DEBUG.Probe <=
-- SerialBusUngated(0) when 0, SerialBusUngated(1) when 1, SerialBusUngated(2) when 2, SerialBusUngated(3) when 3,
-- SerialBusUngated(4) when 4, SerialBusUngated(5) when 5, SerialBusUngated(6) when 6, SerialBusUngated(7) when 7,
-- RxDataAvailable when others;
end FMD;