Line 1... |
Line 1... |
-- $Id: pdp11.vhd 427 2011-11-19 21:04:11Z mueller $
|
-- $Id: pdp11.vhd 569 2014-07-13 14:36:32Z mueller $
|
--
|
--
|
-- Copyright 2006-2011 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
-- Copyright 2006-2014 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 14... |
Line 14... |
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
-- Package Name: pdp11
|
-- Package Name: pdp11
|
-- Description: Definitions for pdp11 components
|
-- Description: Definitions for pdp11 components
|
--
|
--
|
-- Dependencies: -
|
-- Dependencies: -
|
-- Tool versions: xst 8.2, 9.1, 9.2, 11.4, 12.1, 13.1; ghdl 0.18-0.29
|
-- Tool versions: xst 8.2-14.7; ghdl 0.18-0.31
|
|
--
|
-- Revision History:
|
-- Revision History:
|
-- Date Rev Version Comment
|
-- Date Rev Version Comment
|
|
-- 2014-07-12 569 1.4.9 dpath_stat_type: merge div_zero+div_ovfl to div_quit
|
|
-- dpath_cntl_type: add munit_s_div_sr
|
-- 2011-11-18 427 1.4.8 now numeric_std clean
|
-- 2011-11-18 427 1.4.8 now numeric_std clean
|
-- 2010-12-30 351 1.4.7 rename pdp11_core_rri->pdp11_core_rbus; use rblib
|
-- 2010-12-30 351 1.4.7 rename pdp11_core_rri->pdp11_core_rbus; use rblib
|
-- 2010-10-23 335 1.4.6 rename RRI_LAM->RB_LAM;
|
-- 2010-10-23 335 1.4.6 rename RRI_LAM->RB_LAM;
|
-- 2010-10-16 332 1.4.5 renames of pdp11_du_drv port names
|
-- 2010-10-16 332 1.4.5 renames of pdp11_du_drv port names
|
-- 2010-09-18 330 1.4.4 rename (adlm)box->(oalm)unit
|
-- 2010-09-18 330 1.4.4 rename (adlm)box->(oalm)unit
|
Line 160... |
Line 163... |
lunit_bytop : slbit; -- lunit byte operation
|
lunit_bytop : slbit; -- lunit byte operation
|
munit_func : slv2; -- munit function
|
munit_func : slv2; -- munit function
|
munit_s_div : slbit; -- munit s_opg_div state
|
munit_s_div : slbit; -- munit s_opg_div state
|
munit_s_div_cn : slbit; -- munit s_opg_div_cn state
|
munit_s_div_cn : slbit; -- munit s_opg_div_cn state
|
munit_s_div_cr : slbit; -- munit s_opg_div_cr state
|
munit_s_div_cr : slbit; -- munit s_opg_div_cr state
|
|
munit_s_div_sr : slbit; -- munit s_opg_div_sr state
|
munit_s_ash : slbit; -- munit s_opg_ash state
|
munit_s_ash : slbit; -- munit s_opg_ash state
|
munit_s_ash_cn : slbit; -- munit s_opg_ash_cn state
|
munit_s_ash_cn : slbit; -- munit s_opg_ash_cn state
|
munit_s_ashc : slbit; -- munit s_opg_ashc state
|
munit_s_ashc : slbit; -- munit s_opg_ashc state
|
munit_s_ashc_cn : slbit; -- munit s_opg_ashc_cn state
|
munit_s_ashc_cn : slbit; -- munit s_opg_ashc_cn state
|
ireg_we : slbit; -- ireg register write enable
|
ireg_we : slbit; -- ireg register write enable
|
Line 178... |
Line 182... |
'0','0',"000", -- psr
|
'0','0',"000", -- psr
|
'0','0','0','0',"00",'0', -- dsrc,..,dtmp
|
'0','0','0','0',"00",'0', -- dsrc,..,dtmp
|
"00",'0',"000000000","00",'0', -- ounit
|
"00",'0',"000000000","00",'0', -- ounit
|
"00","00","00",'0',"000",'0', -- aunit
|
"00","00","00",'0',"000",'0', -- aunit
|
"0000",'0', -- lunit
|
"0000",'0', -- lunit
|
"00",'0','0','0','0','0','0','0', -- munit
|
"00",'0','0','0','0','0','0','0','0',-- munit
|
'0',"000","000","00",'0' -- rest
|
'0',"000","000","00",'0' -- rest
|
);
|
);
|
|
|
constant c_dpath_dsrc_src : slbit := '0'; -- DSRC = R(SRC)
|
constant c_dpath_dsrc_src : slbit := '0'; -- DSRC = R(SRC)
|
constant c_dpath_dsrc_res : slbit := '1'; -- DSRC = DRES
|
constant c_dpath_dsrc_res : slbit := '1'; -- DSRC = DRES
|
Line 209... |
Line 213... |
constant c_dpath_vmaddr_dtmp : slv2 := "11"; -- VMADDR = DTMP
|
constant c_dpath_vmaddr_dtmp : slv2 := "11"; -- VMADDR = DTMP
|
|
|
type dpath_stat_type is record -- data path status
|
type dpath_stat_type is record -- data path status
|
ccout_z : slbit; -- current effective Z cc flag
|
ccout_z : slbit; -- current effective Z cc flag
|
shc_tc : slbit; -- last shc cycle (shc==0)
|
shc_tc : slbit; -- last shc cycle (shc==0)
|
div_cr : slbit; -- division: reminder correction needed
|
div_cr : slbit; -- division: remainder correction needed
|
div_cq : slbit; -- division: quotient correction needed
|
div_cq : slbit; -- division: quotient correction needed
|
div_zero : slbit; -- division: divident or divisor zero
|
div_quit : slbit; -- division: abort (0/ or /0 or V=1)
|
div_ovfl : slbit; -- division: overflow
|
|
end record dpath_stat_type;
|
end record dpath_stat_type;
|
|
|
constant dpath_stat_init : dpath_stat_type := (others=>'0');
|
constant dpath_stat_init : dpath_stat_type := (others=>'0');
|
|
|
type decode_stat_type is record -- decode status
|
type decode_stat_type is record -- decode status
|
Line 788... |
Line 791... |
DSRC : in slv16; -- 'src' data in
|
DSRC : in slv16; -- 'src' data in
|
DDST : in slv16; -- 'dst' data in
|
DDST : in slv16; -- 'dst' data in
|
DTMP : in slv16; -- 'tmp' data in
|
DTMP : in slv16; -- 'tmp' data in
|
GPR_DSRC : in slv16; -- 'src' data from GPR
|
GPR_DSRC : in slv16; -- 'src' data from GPR
|
FUNC : in slv2; -- function
|
FUNC : in slv2; -- function
|
S_DIV : in slbit; -- s_opg_div state
|
S_DIV : in slbit; -- s_opg_div state (load dd_low)
|
S_DIV_CN : in slbit; -- s_opg_div_cn state
|
S_DIV_CN : in slbit; -- s_opg_div_cn state (1st..16th cycle)
|
S_DIV_CR : in slbit; -- s_opg_div_cr state
|
S_DIV_CR : in slbit; -- s_opg_div_cr state (remainder corr.)
|
|
S_DIV_SR : in slbit; -- s_opg_div_sr state (store remainder)
|
S_ASH : in slbit; -- s_opg_ash state
|
S_ASH : in slbit; -- s_opg_ash state
|
S_ASH_CN : in slbit; -- s_opg_ash_cn state
|
S_ASH_CN : in slbit; -- s_opg_ash_cn state
|
S_ASHC : in slbit; -- s_opg_ashc state
|
S_ASHC : in slbit; -- s_opg_ashc state
|
S_ASHC_CN : in slbit; -- s_opg_ashc_cn state
|
S_ASHC_CN : in slbit; -- s_opg_ashc_cn state
|
SHC_TC : out slbit; -- last shc cycle (shc==0)
|
SHC_TC : out slbit; -- last shc cycle (shc==0)
|
DIV_CR : out slbit; -- division: reminder correction needed
|
DIV_CR : out slbit; -- division: remainder correction needed
|
DIV_CQ : out slbit; -- division: quotient correction needed
|
DIV_CQ : out slbit; -- division: quotient correction needed
|
DIV_ZERO : out slbit; -- division: divident or divisor zero
|
DIV_QUIT : out slbit; -- division: abort (0/ or /0 or V=1)
|
DIV_OVFL : out slbit; -- division: overflow
|
|
DOUT : out slv16; -- data output
|
DOUT : out slv16; -- data output
|
DOUTE : out slv16; -- data output extra
|
DOUTE : out slv16; -- data output extra
|
CCOUT : out slv4 -- condition codes out
|
CCOUT : out slv4 -- condition codes out
|
);
|
);
|
end component;
|
end component;
|