Line 1... |
Line 1... |
-- $Id: pdp11.vhd 649 2015-02-21 21:10:16Z mueller $
|
-- $Id: pdp11.vhd 677 2015-05-09 21:52:32Z mueller $
|
--
|
--
|
-- Copyright 2006-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
-- Copyright 2006-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
--
|
--
|
-- This program is free software; you may redistribute and/or modify it under
|
-- This program is free software; you may redistribute and/or modify it under
|
-- the terms of the GNU General Public License as published by the Free
|
-- the terms of the GNU General Public License as published by the Free
|
-- Software Foundation, either version 2, or at your option any later version.
|
-- Software Foundation, either version 2, or at your option any later version.
|
--
|
--
|
Line 18... |
Line 18... |
-- Dependencies: -
|
-- Dependencies: -
|
-- Tool versions: ise 8.2-14.7; viv 2014.4; ghdl 0.18-0.31
|
-- Tool versions: ise 8.2-14.7; viv 2014.4; ghdl 0.18-0.31
|
--
|
--
|
-- Revision History:
|
-- Revision History:
|
-- Date Rev Version Comment
|
-- Date Rev Version Comment
|
|
-- 2015-05-09 677 1.6 start/stop/suspend overhaul; reset overhaul
|
|
-- 2015-05-01 672 1.5.5 add pdp11_sys70, sys_hio70
|
|
-- 2015-04-30 670 1.5.4 rename pdp11_sys70 -> pdp11_reg70
|
-- 2015-02-20 649 1.5.3 add pdp11_statleds
|
-- 2015-02-20 649 1.5.3 add pdp11_statleds
|
-- 2015-02-08 644 1.5.2 add pdp11_bram_memctl
|
-- 2015-02-08 644 1.5.2 add pdp11_bram_memctl
|
-- 2014-08-28 588 1.5.1 use new rlink v4 iface and 4 bit STAT
|
-- 2014-08-28 588 1.5.1 use new rlink v4 iface and 4 bit STAT
|
-- 2014-08-15 583 1.5 rb_mreq addr now 16 bit
|
-- 2014-08-15 583 1.5 rb_mreq addr now 16 bit
|
-- 2014-08-10: 581 1.4.10 add c_cc_f_* field defs for condition code array
|
-- 2014-08-10: 581 1.4.10 add c_cc_f_* field defs for condition code array
|
Line 341... |
Line 344... |
cmdack : slbit; -- command acknowledge
|
cmdack : slbit; -- command acknowledge
|
cmderr : slbit; -- command error
|
cmderr : slbit; -- command error
|
cmdmerr : slbit; -- command memory access error
|
cmdmerr : slbit; -- command memory access error
|
cpugo : slbit; -- CPU go state
|
cpugo : slbit; -- CPU go state
|
cpustep : slbit; -- CPU step flag
|
cpustep : slbit; -- CPU step flag
|
cpuhalt : slbit; -- CPU halt flag
|
cpususp : slbit; -- CPU susp flag
|
cpuwait : slbit; -- CPU wait flag
|
cpuwait : slbit; -- CPU wait flag
|
cpurust : slv4; -- CPU run status
|
cpurust : slv4; -- CPU run status
|
|
suspint : slbit; -- internal suspend flag
|
|
suspext : slbit; -- external suspend flag
|
cpfunc : slv5; -- current control port function
|
cpfunc : slv5; -- current control port function
|
cprnum : slv3; -- current control port register number
|
cprnum : slv3; -- current control port register number
|
waitsusp : slbit; -- WAIT instruction suspended
|
waitsusp : slbit; -- WAIT instruction suspended
|
|
itimer : slbit; -- ITIMER pulse
|
|
creset : slbit; -- CRESET pulse
|
|
breset : slbit; -- BRESET pulse
|
|
intack : slbit; -- INT_ACK pulse
|
intvect : slv9_2; -- current interrupt vector
|
intvect : slv9_2; -- current interrupt vector
|
trap_mmu : slbit; -- mmu trace trap pending
|
trap_mmu : slbit; -- mmu trace trap pending
|
trap_ysv : slbit; -- ysv trap pending
|
trap_ysv : slbit; -- ysv trap pending
|
prefdone : slbit; -- prefetch done
|
prefdone : slbit; -- prefetch done
|
do_gprwe : slbit; -- pending gpr_we
|
do_gprwe : slbit; -- pending gpr_we
|
do_intrsv : slbit; -- active rsv interrupt sequence
|
do_intrsv : slbit; -- active rsv interrupt sequence
|
end record cpustat_type;
|
end record cpustat_type;
|
|
|
constant cpustat_init : cpustat_type := (
|
constant cpustat_init : cpustat_type := (
|
'0','0','0','0', -- cmd..
|
'0','0','0','0', -- cmdbusy,cmdack,cmderr,cmdmerr
|
'0','0','0','0', -- cpu..
|
'0','0','0','0', -- cpugo,cpustep,cpususp,cpuwait
|
c_cpurust_init, -- cpurust
|
c_cpurust_init, -- cpurust
|
|
'0','0', -- suspint,suspext
|
"00000","000", -- cpfunc, cprnum
|
"00000","000", -- cpfunc, cprnum
|
'0', -- waitsusp
|
'0', -- waitsusp
|
|
'0','0','0','0', -- itimer,creset,breset,intack
|
(others=>'0'), -- intvect
|
(others=>'0'), -- intvect
|
'0','0','0', -- trap_(mmu|ysv), prefdone
|
'0','0','0', -- trap_(mmu|ysv), prefdone
|
'0','0' -- do_gprwe, do_intrsv
|
'0','0' -- do_gprwe, do_intrsv
|
);
|
);
|
|
|
Line 528... |
Line 539... |
func : slv5; -- function
|
func : slv5; -- function
|
rnum : slv3; -- register number
|
rnum : slv3; -- register number
|
end record cp_cntl_type;
|
end record cp_cntl_type;
|
|
|
constant c_cpfunc_noop : slv5 := "00000"; -- noop : no operation
|
constant c_cpfunc_noop : slv5 := "00000"; -- noop : no operation
|
constant c_cpfunc_sta : slv5 := "00001"; -- sta : cpu start
|
constant c_cpfunc_start : slv5 := "00001"; -- sta : cpu start
|
constant c_cpfunc_sto : slv5 := "00010"; -- sto : cpu stop
|
constant c_cpfunc_stop : slv5 := "00010"; -- sto : cpu stop
|
constant c_cpfunc_cont : slv5 := "00011"; -- cont : cpu continue
|
constant c_cpfunc_step : slv5 := "00011"; -- cont : cpu step
|
constant c_cpfunc_step : slv5 := "00100"; -- step : cpu step
|
constant c_cpfunc_creset : slv5 := "00100"; -- step : cpu cpu reset
|
constant c_cpfunc_rst : slv5 := "01111"; -- rst : cpu reset (soft)
|
constant c_cpfunc_breset : slv5 := "00101"; -- rst : cpu bus reset
|
|
constant c_cpfunc_suspend : slv5 := "00110"; -- rst : cpu suspend
|
|
constant c_cpfunc_resume : slv5 := "00111"; -- rst : cpu resume
|
|
|
constant c_cpfunc_rreg : slv5 := "10000"; -- rreg : read register
|
constant c_cpfunc_rreg : slv5 := "10000"; -- rreg : read register
|
constant c_cpfunc_wreg : slv5 := "10001"; -- wreg : write register
|
constant c_cpfunc_wreg : slv5 := "10001"; -- wreg : write register
|
constant c_cpfunc_rpsw : slv5 := "10010"; -- rpsw : read psw
|
constant c_cpfunc_rpsw : slv5 := "10010"; -- rpsw : read psw
|
constant c_cpfunc_wpsw : slv5 := "10011"; -- wpsw : write psw
|
constant c_cpfunc_wpsw : slv5 := "10011"; -- wpsw : write psw
|
constant c_cpfunc_rmem : slv5 := "10100"; -- rmem : read memory
|
constant c_cpfunc_rmem : slv5 := "10100"; -- rmem : read memory
|
Line 549... |
Line 563... |
cmdack : slbit; -- command acknowledge
|
cmdack : slbit; -- command acknowledge
|
cmderr : slbit; -- command error
|
cmderr : slbit; -- command error
|
cmdmerr : slbit; -- command memory access error
|
cmdmerr : slbit; -- command memory access error
|
cpugo : slbit; -- CPU go state
|
cpugo : slbit; -- CPU go state
|
cpustep : slbit; -- CPU step flag
|
cpustep : slbit; -- CPU step flag
|
cpuhalt : slbit; -- CPU halt flag
|
|
cpuwait : slbit; -- CPU wait flag
|
cpuwait : slbit; -- CPU wait flag
|
|
cpususp : slbit; -- CPU susp flag
|
cpurust : slv4; -- CPU run status
|
cpurust : slv4; -- CPU run status
|
|
suspint : slbit; -- internal suspend
|
|
suspext : slbit; -- external suspend
|
end record cp_stat_type;
|
end record cp_stat_type;
|
|
|
constant cp_stat_init : cp_stat_type := (
|
constant cp_stat_init : cp_stat_type := (
|
'0','0','0','0', -- cmd...
|
'0','0','0','0', -- cmd...
|
'0','0','0','0', -- cpu...
|
'0','0','0','0', -- cpu...
|
(others=>'0') -- cpurust
|
(others=>'0'), -- cpurust
|
|
'0','0' -- susp...
|
);
|
);
|
|
|
type cp_addr_type is record -- control port address
|
type cp_addr_type is record -- control port address
|
addr : slv22_1; -- address
|
addr : slv22_1; -- address
|
racc : slbit; -- ibus remote access
|
racc : slbit; -- ibus remote access
|
Line 617... |
Line 634... |
|
|
constant dm_stat_vm_init : dm_stat_vm_type := (ib_mreq_init,ib_sres_init);
|
constant dm_stat_vm_init : dm_stat_vm_type := (ib_mreq_init,ib_sres_init);
|
|
|
type dm_stat_co_type is record -- debug and monitor status - core
|
type dm_stat_co_type is record -- debug and monitor status - core
|
cpugo : slbit; -- cpugo state flag
|
cpugo : slbit; -- cpugo state flag
|
cpuhalt : slbit; -- cpuhalt state flag
|
cpususp : slbit; -- cpususp state flag
|
|
suspint : slbit; -- suspint state flag
|
|
suspext : slbit; -- suspext state flag
|
end record dm_stat_co_type;
|
end record dm_stat_co_type;
|
|
|
constant dm_stat_co_init : dm_stat_co_type := ('0','0');
|
constant dm_stat_co_init : dm_stat_co_type := (
|
|
'0','0', -- cpu...
|
|
'0','0' -- susp...
|
|
);
|
|
|
type dm_stat_sy_type is record -- debug and monitor status - system
|
type dm_stat_sy_type is record -- debug and monitor status - system
|
emmreq : em_mreq_type; -- external memory: request
|
emmreq : em_mreq_type; -- external memory: request
|
emsres : em_sres_type; -- external memory: response
|
emsres : em_sres_type; -- external memory: response
|
chit : slbit; -- cache hit
|
chit : slbit; -- cache hit
|
end record dm_stat_sy_type;
|
end record dm_stat_sy_type;
|
|
|
constant dm_stat_sy_init : dm_stat_sy_type := (em_mreq_init,em_sres_init,'0');
|
constant dm_stat_sy_init : dm_stat_sy_type := (
|
|
em_mreq_init, -- emmreq
|
|
em_sres_init, -- emsres
|
|
'0' -- chit
|
|
);
|
|
|
-- rbus interface definitions ------------------------------------------------
|
-- rbus interface definitions ------------------------------------------------
|
|
|
constant c_rbaddr_conf : slv5 := "00000"; -- R/W configuration reg
|
constant c_rbaddr_conf : slv5 := "00000"; -- R/W configuration reg
|
constant c_rbaddr_cntl : slv5 := "00001"; -- -/F control reg
|
constant c_rbaddr_cntl : slv5 := "00001"; -- -/F control reg
|
Line 657... |
Line 683... |
subtype c_al_rbf_addr is integer range 15 downto 1; -- al: address
|
subtype c_al_rbf_addr is integer range 15 downto 1; -- al: address
|
constant c_ah_rbf_ena_ubmap: integer := 7; -- ah: ubmap
|
constant c_ah_rbf_ena_ubmap: integer := 7; -- ah: ubmap
|
constant c_ah_rbf_ena_22bit: integer := 6; -- ah: 22bit
|
constant c_ah_rbf_ena_22bit: integer := 6; -- ah: 22bit
|
subtype c_ah_rbf_addr is integer range 5 downto 0; -- ah: address
|
subtype c_ah_rbf_addr is integer range 5 downto 0; -- ah: address
|
|
|
constant c_stat_rbf_cmderr: integer := 0; -- stat field: cmderr
|
constant c_stat_rbf_suspext: integer := 9; -- stat field: suspext
|
constant c_stat_rbf_cmdmerr: integer := 1; -- stat field: cmdmerr
|
constant c_stat_rbf_suspint: integer := 8; -- stat field: suspint
|
constant c_stat_rbf_cpugo: integer := 2; -- stat field: cpugo
|
|
constant c_stat_rbf_cpuhalt: integer := 3; -- stat field: cpuhalt
|
|
subtype c_stat_rbf_cpurust is integer range 7 downto 4; -- cpurust
|
subtype c_stat_rbf_cpurust is integer range 7 downto 4; -- cpurust
|
|
constant c_stat_rbf_cpususp: integer := 3; -- stat field: cpususp
|
|
constant c_stat_rbf_cpugo: integer := 2; -- stat field: cpugo
|
|
constant c_stat_rbf_cmdmerr: integer := 1; -- stat field: cmdmerr
|
|
constant c_stat_rbf_cmderr: integer := 0; -- stat field: cmderr
|
|
|
subtype c_membe_rbf_be is integer range 1 downto 0; -- membe: be's
|
subtype c_membe_rbf_be is integer range 1 downto 0; -- membe: be's
|
constant c_membe_rbf_stick: integer := 2; -- membe: sticky flag
|
constant c_membe_rbf_stick: integer := 2; -- membe: sticky flag
|
|
|
-- -------------------------------------
|
-- -------------------------------------
|
Line 692... |
Line 720... |
constant c_gpr_pc : slv3 := "111"; -- register number of PC
|
constant c_gpr_pc : slv3 := "111"; -- register number of PC
|
|
|
component pdp11_psr is -- processor status word register
|
component pdp11_psr is -- processor status word register
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
CRESET : in slbit; -- console reset
|
CRESET : in slbit; -- cpu reset
|
DIN : in slv16; -- input data
|
DIN : in slv16; -- input data
|
CCIN : in slv4; -- cc input
|
CCIN : in slv4; -- cc input
|
CCWE : in slbit; -- enable update cc
|
CCWE : in slbit; -- enable update cc
|
WE : in slbit; -- write enable (from DIN)
|
WE : in slbit; -- write enable (from DIN)
|
FUNC : in slv3; -- write function (from DIN)
|
FUNC : in slv3; -- write function (from DIN)
|
Line 841... |
Line 869... |
end component;
|
end component;
|
|
|
component pdp11_mmu_ssr12 is -- mmu register ssr1 and ssr2
|
component pdp11_mmu_ssr12 is -- mmu register ssr1 and ssr2
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
CRESET : in slbit; -- console reset
|
CRESET : in slbit; -- cpu reset
|
TRACE : in slbit; -- trace enable
|
TRACE : in slbit; -- trace enable
|
MONI : in mmu_moni_type; -- MMU monitor port data
|
MONI : in mmu_moni_type; -- MMU monitor port data
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_SRES : out ib_sres_type -- ibus response
|
IB_SRES : out ib_sres_type -- ibus response
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_mmu is -- mmu - memory management unit
|
component pdp11_mmu is -- mmu - memory management unit
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
CRESET : in slbit; -- console reset
|
CRESET : in slbit; -- cpu reset
|
BRESET : in slbit; -- ibus reset
|
BRESET : in slbit; -- bus reset
|
CNTL : in mmu_cntl_type; -- control port
|
CNTL : in mmu_cntl_type; -- control port
|
VADDR : in slv16; -- virtual address
|
VADDR : in slv16; -- virtual address
|
MONI : in mmu_moni_type; -- monitor port
|
MONI : in mmu_moni_type; -- monitor port
|
STAT : out mmu_stat_type; -- status port
|
STAT : out mmu_stat_type; -- status port
|
PADDRH : out slv16; -- physical address (upper 16 bit)
|
PADDRH : out slv16; -- physical address (upper 16 bit)
|
Line 867... |
Line 895... |
end component;
|
end component;
|
|
|
component pdp11_vmbox is -- virtual memory
|
component pdp11_vmbox is -- virtual memory
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
GRESET : in slbit; -- global reset
|
GRESET : in slbit; -- general reset
|
CRESET : in slbit; -- console reset
|
CRESET : in slbit; -- cpu reset
|
BRESET : in slbit; -- ibus reset
|
BRESET : in slbit; -- bus reset
|
CP_ADDR : in cp_addr_type; -- console port address
|
CP_ADDR : in cp_addr_type; -- console port address
|
VM_CNTL : in vm_cntl_type; -- vm control port
|
VM_CNTL : in vm_cntl_type; -- vm control port
|
VM_ADDR : in slv16; -- vm address
|
VM_ADDR : in slv16; -- vm address
|
VM_DIN : in slv16; -- vm data in
|
VM_DIN : in slv16; -- vm data in
|
VM_STAT : out vm_stat_type; -- vm status port
|
VM_STAT : out vm_stat_type; -- vm status port
|
Line 889... |
Line 917... |
end component;
|
end component;
|
|
|
component pdp11_dpath is -- CPU datapath
|
component pdp11_dpath is -- CPU datapath
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
CRESET : in slbit; -- console reset
|
CRESET : in slbit; -- cpu reset
|
CNTL : in dpath_cntl_type; -- control interface
|
CNTL : in dpath_cntl_type; -- control interface
|
STAT : out dpath_stat_type; -- status interface
|
STAT : out dpath_stat_type; -- status interface
|
CP_DIN : in slv16; -- console port data in
|
CP_DIN : in slv16; -- console port data in
|
CP_DOUT : out slv16; -- console port data out
|
CP_DOUT : out slv16; -- console port data out
|
PSWOUT : out psw_type; -- current psw
|
PSWOUT : out psw_type; -- current psw
|
Line 902... |
Line 930... |
VM_ADDR : out slv16; -- virt. memory address
|
VM_ADDR : out slv16; -- virt. memory address
|
VM_DOUT : in slv16; -- virt. memory data out
|
VM_DOUT : in slv16; -- virt. memory data out
|
VM_DIN : out slv16; -- virt. memory data in
|
VM_DIN : out slv16; -- virt. memory data in
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_SRES : out ib_sres_type; -- ibus response
|
IB_SRES : out ib_sres_type; -- ibus response
|
DM_STAT_DP : out dm_stat_dp_type -- debug and monitor status
|
DM_STAT_DP : out dm_stat_dp_type -- debug and monitor status - dpath
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_decode is -- instruction decoder
|
component pdp11_decode is -- instruction decoder
|
port (
|
port (
|
Line 916... |
Line 944... |
end component;
|
end component;
|
|
|
component pdp11_sequencer is -- cpu sequencer
|
component pdp11_sequencer is -- cpu sequencer
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
GRESET : in slbit; -- global reset
|
GRESET : in slbit; -- general reset
|
PSW : in psw_type; -- processor status
|
PSW : in psw_type; -- processor status
|
PC : in slv16; -- program counter
|
PC : in slv16; -- program counter
|
IREG : in slv16; -- IREG
|
IREG : in slv16; -- IREG
|
ID_STAT : in decode_stat_type; -- instr. decoder status
|
ID_STAT : in decode_stat_type; -- instr. decoder status
|
DP_STAT : in dpath_stat_type; -- data path status
|
DP_STAT : in dpath_stat_type; -- data path status
|
CP_CNTL : in cp_cntl_type; -- console port control
|
CP_CNTL : in cp_cntl_type; -- console port control
|
VM_STAT : in vm_stat_type; -- virtual memory status port
|
VM_STAT : in vm_stat_type; -- virtual memory status port
|
INT_PRI : in slv3; -- interrupt priority
|
INT_PRI : in slv3; -- interrupt priority
|
INT_VECT : in slv9_2; -- interrupt vector
|
INT_VECT : in slv9_2; -- interrupt vector
|
CRESET : out slbit; -- console reset
|
INT_ACK : out slbit; -- interrupt acknowledge
|
BRESET : out slbit; -- ibus reset
|
CRESET : out slbit; -- cpu reset
|
|
BRESET : out slbit; -- bus reset
|
MMU_MONI : out mmu_moni_type; -- mmu monitor port
|
MMU_MONI : out mmu_moni_type; -- mmu monitor port
|
DP_CNTL : out dpath_cntl_type; -- data path control
|
DP_CNTL : out dpath_cntl_type; -- data path control
|
VM_CNTL : out vm_cntl_type; -- virtual memory control port
|
VM_CNTL : out vm_cntl_type; -- virtual memory control port
|
CP_STAT : out cp_stat_type; -- console port status
|
CP_STAT : out cp_stat_type; -- console port status
|
INT_ACK : out slbit; -- interrupt acknowledge
|
ESUSP_O : out slbit; -- external suspend output
|
|
ESUSP_I : in slbit; -- external suspend input
|
|
ITIMER : out slbit; -- instruction timer
|
|
EBREAK : in slbit; -- execution break
|
|
DBREAK : in slbit; -- data break
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_SRES : out ib_sres_type -- ibus response
|
IB_SRES : out ib_sres_type -- ibus response
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_irq is -- interrupt requester
|
component pdp11_irq is -- interrupt requester
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
BRESET : in slbit; -- ibus reset
|
BRESET : in slbit; -- bus reset
|
INT_ACK : in slbit; -- interrupt acknowledge from CPU
|
INT_ACK : in slbit; -- interrupt acknowledge from CPU
|
EI_PRI : in slv3; -- external interrupt priority
|
EI_PRI : in slv3; -- external interrupt priority
|
EI_VECT : in slv9_2; -- external interrupt vector
|
EI_VECT : in slv9_2; -- external interrupt vector
|
EI_ACKM : out slbit; -- external interrupt acknowledge
|
EI_ACKM : out slbit; -- external interrupt acknowledge
|
PRI : out slv3; -- interrupt priority
|
PRI : out slv3; -- interrupt priority
|
Line 964... |
Line 997... |
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_SRES : out ib_sres_type -- ibus response
|
IB_SRES : out ib_sres_type -- ibus response
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_sys70 is -- 11/70 memory system registers
|
component pdp11_reg70 is -- 11/70 memory system registers
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
CRESET : in slbit; -- console reset
|
CRESET : in slbit; -- cpu reset
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_SRES : out ib_sres_type -- ibus response
|
IB_SRES : out ib_sres_type -- ibus response
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_mem70 is -- 11/70 memory system registers
|
component pdp11_mem70 is -- 11/70 memory system registers
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
CRESET : in slbit; -- console reset
|
CRESET : in slbit; -- cpu reset
|
HM_ENA : in slbit; -- hit/miss enable
|
HM_ENA : in slbit; -- hit/miss enable
|
HM_VAL : in slbit; -- hit/miss value
|
HM_VAL : in slbit; -- hit/miss value
|
CACHE_FMISS : out slbit; -- cache force miss
|
CACHE_FMISS : out slbit; -- cache force miss
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_MREQ : in ib_mreq_type; -- ibus request
|
IB_SRES : out ib_sres_type -- ibus response
|
IB_SRES : out ib_sres_type -- ibus response
|
Line 988... |
Line 1021... |
end component;
|
end component;
|
|
|
component pdp11_cache is -- cache
|
component pdp11_cache is -- cache
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
GRESET : in slbit; -- global reset
|
GRESET : in slbit; -- general reset
|
EM_MREQ : in em_mreq_type; -- em request
|
EM_MREQ : in em_mreq_type; -- em request
|
EM_SRES : out em_sres_type; -- em response
|
EM_SRES : out em_sres_type; -- em response
|
FMISS : in slbit; -- force miss
|
FMISS : in slbit; -- force miss
|
CHIT : out slbit; -- cache hit flag
|
CHIT : out slbit; -- cache hit flag
|
MEM_REQ : out slbit; -- memory: request
|
MEM_REQ : out slbit; -- memory: request
|
Line 1013... |
Line 1046... |
CP_CNTL : in cp_cntl_type; -- console control port
|
CP_CNTL : in cp_cntl_type; -- console control port
|
CP_ADDR : in cp_addr_type; -- console address port
|
CP_ADDR : in cp_addr_type; -- console address port
|
CP_DIN : in slv16; -- console data in
|
CP_DIN : in slv16; -- console data in
|
CP_STAT : out cp_stat_type; -- console status port
|
CP_STAT : out cp_stat_type; -- console status port
|
CP_DOUT : out slv16; -- console data out
|
CP_DOUT : out slv16; -- console data out
|
|
ESUSP_O : out slbit; -- external suspend output
|
|
ESUSP_I : in slbit; -- external suspend input
|
|
ITIMER : out slbit; -- instruction timer
|
|
EBREAK : in slbit; -- execution break
|
|
DBREAK : in slbit; -- data break
|
EI_PRI : in slv3; -- external interrupt priority
|
EI_PRI : in slv3; -- external interrupt priority
|
EI_VECT : in slv9_2; -- external interrupt vector
|
EI_VECT : in slv9_2; -- external interrupt vector
|
EI_ACKM : out slbit; -- external interrupt acknowledge
|
EI_ACKM : out slbit; -- external interrupt acknowledge
|
EM_MREQ : out em_mreq_type; -- external memory: request
|
EM_MREQ : out em_mreq_type; -- external memory: request
|
EM_SRES : in em_sres_type; -- external memory: response
|
EM_SRES : in em_sres_type; -- external memory: response
|
BRESET : out slbit; -- ibus reset
|
CRESET : out slbit; -- cpu reset
|
|
BRESET : out slbit; -- bus reset
|
IB_MREQ_M : out ib_mreq_type; -- ibus master request (master)
|
IB_MREQ_M : out ib_mreq_type; -- ibus master request (master)
|
IB_SRES_M : in ib_sres_type; -- ibus slave response (master)
|
IB_SRES_M : in ib_sres_type; -- ibus slave response (master)
|
DM_STAT_DP : out dm_stat_dp_type; -- debug and monitor status - dpath
|
DM_STAT_DP : out dm_stat_dp_type; -- debug and monitor status - dpath
|
DM_STAT_VM : out dm_stat_vm_type; -- debug and monitor status - vmbox
|
DM_STAT_VM : out dm_stat_vm_type; -- debug and monitor status - vmbox
|
DM_STAT_CO : out dm_stat_co_type -- debug and monitor status - core
|
DM_STAT_CO : out dm_stat_co_type -- debug and monitor status - core
|
Line 1031... |
Line 1070... |
|
|
component pdp11_tmu is -- trace and monitor unit
|
component pdp11_tmu is -- trace and monitor unit
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
ENA : in slbit := '0'; -- enable trace output
|
ENA : in slbit := '0'; -- enable trace output
|
DM_STAT_DP : in dm_stat_dp_type; -- DM dpath
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
|
DM_STAT_VM : in dm_stat_vm_type; -- DM vmbox
|
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
|
DM_STAT_CO : in dm_stat_co_type; -- DM core
|
DM_STAT_CO : in dm_stat_co_type; -- debug and monitor status - core
|
DM_STAT_SY : in dm_stat_sy_type -- DM system
|
DM_STAT_SY : in dm_stat_sy_type -- debug and monitor status - system
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_tmu_sb is -- trace and mon. unit; simbus wrapper
|
component pdp11_tmu_sb is -- trace and mon. unit; simbus wrapper
|
generic (
|
generic (
|
ENAPIN : integer := 13); -- SB_CNTL signal to use for enable
|
ENAPIN : integer := 13); -- SB_CNTL signal to use for enable
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
DM_STAT_DP : in dm_stat_dp_type; -- DM dpath
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
|
DM_STAT_VM : in dm_stat_vm_type; -- DM vmbox
|
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
|
DM_STAT_CO : in dm_stat_co_type; -- DM core
|
DM_STAT_CO : in dm_stat_co_type; -- debug and monitor status - core
|
DM_STAT_SY : in dm_stat_sy_type -- DM system
|
DM_STAT_SY : in dm_stat_sy_type -- debug and monitor status - system
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_du_drv is -- display unit low level driver
|
component pdp11_du_drv is -- display unit low level driver
|
generic (
|
generic (
|
CDWIDTH : positive := 3); -- clock divider width
|
CDWIDTH : positive := 3); -- clock divider width
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
GRESET : in slbit; -- global reset
|
GRESET : in slbit; -- general reset
|
ROW0 : in slv22; -- led row 0 (22 leds, top)
|
ROW0 : in slv22; -- led row 0 (22 leds, top)
|
ROW1 : in slv16; -- led row 1 (16 leds)
|
ROW1 : in slv16; -- led row 1 (16 leds)
|
ROW2 : in slv16; -- led row 2 (16 leds)
|
ROW2 : in slv16; -- led row 2 (16 leds)
|
ROW3 : in slv10; -- led row 3 (10 leds, bottom)
|
ROW3 : in slv10; -- led row 3 (10 leds, bottom)
|
SWOPT : out slv8; -- option pattern from du
|
SWOPT : out slv8; -- option pattern from du
|
Line 1074... |
Line 1113... |
component pdp11_bram is -- BRAM based ext. memory dummy
|
component pdp11_bram is -- BRAM based ext. memory dummy
|
generic (
|
generic (
|
AWIDTH : positive := 14); -- address width
|
AWIDTH : positive := 14); -- address width
|
port (
|
port (
|
CLK : in slbit; -- clock
|
CLK : in slbit; -- clock
|
GRESET : in slbit; -- global reset
|
GRESET : in slbit; -- general reset
|
EM_MREQ : in em_mreq_type; -- em request
|
EM_MREQ : in em_mreq_type; -- em request
|
EM_SRES : out em_sres_type -- em response
|
EM_SRES : out em_sres_type -- em response
|
);
|
);
|
end component;
|
end component;
|
|
|
Line 1106... |
Line 1145... |
component pdp11_statleds is -- status leds
|
component pdp11_statleds is -- status leds
|
port (
|
port (
|
MEM_ACT_R : in slbit; -- memory active read
|
MEM_ACT_R : in slbit; -- memory active read
|
MEM_ACT_W : in slbit; -- memory active write
|
MEM_ACT_W : in slbit; -- memory active write
|
CP_STAT : in cp_stat_type; -- console port status
|
CP_STAT : in cp_stat_type; -- console port status
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
|
STATLEDS : out slv8 -- 8 bit CPU status
|
STATLEDS : out slv8 -- 8 bit CPU status
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_ledmux is -- hio led mux
|
component pdp11_ledmux is -- hio led mux
|
generic (
|
generic (
|
LWIDTH : positive := 8); -- led width
|
LWIDTH : positive := 8); -- led width
|
port (
|
port (
|
SEL : in slbit; -- select (0=stat;1=dr)
|
SEL : in slbit; -- select (0=stat;1=dr)
|
STATLEDS : in slv8; -- 8 bit CPU status
|
STATLEDS : in slv8; -- 8 bit CPU status
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
|
LED : out slv(LWIDTH-1 downto 0) -- hio leds
|
LED : out slv(LWIDTH-1 downto 0) -- hio leds
|
);
|
);
|
end component;
|
end component;
|
|
|
component pdp11_dspmux is -- hio dsp mux
|
component pdp11_dspmux is -- hio dsp mux
|
generic (
|
generic (
|
DCWIDTH : positive := 2); -- digit counter width (2 or 3)
|
DCWIDTH : positive := 2); -- digit counter width (2 or 3)
|
port (
|
port (
|
SEL : in slv2; -- select
|
SEL : in slv2; -- select
|
ABCLKDIV : in slv16; -- serport clock divider
|
ABCLKDIV : in slv16; -- serport clock divider
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
|
DISPREG : in slv16; -- display register
|
DISPREG : in slv16; -- display register
|
DSP_DAT : out slv(4*(2**DCWIDTH)-1 downto 0) -- display data
|
DSP_DAT : out slv(4*(2**DCWIDTH)-1 downto 0) -- display data
|
);
|
);
|
end component;
|
end component;
|
|
|
Line 1145... |
Line 1184... |
RESET : in slbit; -- reset
|
RESET : in slbit; -- reset
|
RB_MREQ : in rb_mreq_type; -- rbus: request
|
RB_MREQ : in rb_mreq_type; -- rbus: request
|
RB_SRES : out rb_sres_type; -- rbus: response
|
RB_SRES : out rb_sres_type; -- rbus: response
|
RB_STAT : out slv4; -- rbus: status flags
|
RB_STAT : out slv4; -- rbus: status flags
|
RB_LAM : out slbit; -- remote attention
|
RB_LAM : out slbit; -- remote attention
|
CPU_RESET : out slbit; -- cpu master reset
|
GRESET : out slbit; -- general reset
|
CP_CNTL : out cp_cntl_type; -- console control port
|
CP_CNTL : out cp_cntl_type; -- console control port
|
CP_ADDR : out cp_addr_type; -- console address port
|
CP_ADDR : out cp_addr_type; -- console address port
|
CP_DIN : out slv16; -- console data in
|
CP_DIN : out slv16; -- console data in
|
CP_STAT : in cp_stat_type; -- console status port
|
CP_STAT : in cp_stat_type; -- console status port
|
CP_DOUT : in slv16 -- console data out
|
CP_DOUT : in slv16 -- console data out
|
);
|
);
|
end component;
|
end component;
|
|
|
|
component pdp11_sys70 is -- 11/70 system 1 core +rbus,debug,cache
|
|
port (
|
|
CLK : in slbit; -- clock
|
|
RESET : in slbit; -- reset
|
|
RB_MREQ : in rb_mreq_type; -- rbus request (slave)
|
|
RB_SRES : out rb_sres_type; -- rbus response
|
|
RB_STAT : out slv4; -- rbus status flags
|
|
RB_LAM_CPU : out slbit; -- rbus lam (cpu)
|
|
GRESET : out slbit; -- general reset (from rbus)
|
|
CRESET : out slbit; -- cpu reset (from cp)
|
|
BRESET : out slbit; -- bus reset (from cp or cpu)
|
|
CP_STAT : out cp_stat_type; -- console port status
|
|
EI_PRI : in slv3; -- external interrupt priority
|
|
EI_VECT : in slv9_2; -- external interrupt vector
|
|
EI_ACKM : out slbit; -- external interrupt acknowledge
|
|
ITIMER : out slbit; -- instruction timer
|
|
IB_MREQ : out ib_mreq_type; -- ibus request (master)
|
|
IB_SRES : in ib_sres_type; -- ibus response (from IO system)
|
|
MEM_REQ : out slbit; -- memory: request
|
|
MEM_WE : out slbit; -- memory: write enable
|
|
MEM_BUSY : in slbit; -- memory: controller busy
|
|
MEM_ACK_R : in slbit; -- memory: acknowledge read
|
|
MEM_ADDR : out slv20; -- memory: address
|
|
MEM_BE : out slv4; -- memory: byte enable
|
|
MEM_DI : out slv32; -- memory: data in (memory view)
|
|
MEM_DO : in slv32; -- memory: data out (memory view)
|
|
DM_STAT_DP : out dm_stat_dp_type -- debug and monitor status - dpath
|
|
);
|
|
end component;
|
|
|
|
component pdp11_hio70 is -- hio led and dsp for sys70
|
|
generic (
|
|
LWIDTH : positive := 8; -- led width
|
|
DCWIDTH : positive := 2); -- digit counter width (2 or 3)
|
|
port (
|
|
SEL_LED : in slbit; -- led select (0=stat;1=dr)
|
|
SEL_DSP : in slv2; -- dsp select
|
|
MEM_ACT_R : in slbit; -- memory active read
|
|
MEM_ACT_W : in slbit; -- memory active write
|
|
CP_STAT : in cp_stat_type; -- console port status
|
|
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status
|
|
ABCLKDIV : in slv16; -- serport clock divider
|
|
DISPREG : in slv16; -- display register
|
|
LED : out slv(LWIDTH-1 downto 0); -- hio leds
|
|
DSP_DAT : out slv(4*(2**DCWIDTH)-1 downto 0) -- display data
|
|
);
|
|
end component;
|
|
|
-- ----- move later to pdp11_conf --------------------------------------------
|
-- ----- move later to pdp11_conf --------------------------------------------
|
|
|
constant conf_vect_pirq : integer := 8#240#;
|
constant conf_vect_pirq : integer := 8#240#;
|
constant conf_pri_pirq_1 : integer := 1;
|
constant conf_pri_pirq_1 : integer := 1;
|
constant conf_pri_pirq_2 : integer := 2;
|
constant conf_pri_pirq_2 : integer := 2;
|