Line 1... |
Line 1... |
-- $Id: pdp11_mmu_ssr12.vhd 314 2010-07-09 17:38:41Z mueller $
|
-- $Id: pdp11_mmu_ssr12.vhd 335 2010-10-24 22:24:23Z mueller $
|
--
|
--
|
-- Copyright 2006-2009 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
-- Copyright 2006-2010 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 13... |
Line 13... |
--
|
--
|
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
-- Module Name: pdp11_mmu_ssr12 - syn
|
-- Module Name: pdp11_mmu_ssr12 - syn
|
-- Description: pdp11: mmu register ssr1 and ssr2
|
-- Description: pdp11: mmu register ssr1 and ssr2
|
--
|
--
|
-- Dependencies: -
|
-- Dependencies: ib_sel
|
-- Test bench: tb/tb_pdp11_core (implicit)
|
-- Test bench: tb/tb_pdp11_core (implicit)
|
-- Target Devices: generic
|
-- Target Devices: generic
|
-- Tool versions: xst 8.1, 8.2, 9.1, 9.2; ghdl 0.18-0.25
|
-- Tool versions: xst 8.1, 8.2, 9.1, 9.2, 12.1; ghdl 0.18-0.29
|
-- Revision History:
|
--
|
-- Revision History:
|
-- Revision History:
|
-- Date Rev Version Comment
|
-- Date Rev Version Comment
|
|
-- 2010-10-23 335 1.2.1 use ib_sel
|
|
-- 2010-10-17 333 1.2 use ibus V2 interface
|
-- 2009-05-30 220 1.1.4 final removal of snoopers (were already commented)
|
-- 2009-05-30 220 1.1.4 final removal of snoopers (were already commented)
|
-- 2008-08-22 161 1.1.3 rename ubf_ -> ibf_; use iblib
|
-- 2008-08-22 161 1.1.3 rename ubf_ -> ibf_; use iblib
|
-- 2008-03-02 121 1.1.2 remove snoopers
|
-- 2008-03-02 121 1.1.2 remove snoopers
|
-- 2008-01-05 110 1.1.1 rename IB_MREQ(ena->req) SRES(sel->ack, hold->busy)
|
-- 2008-01-05 110 1.1.1 rename IB_MREQ(ena->req) SRES(sel->ack, hold->busy)
|
-- 2007-12-30 107 1.1 use IB_MREQ/IB_SRES interface now
|
-- 2007-12-30 107 1.1 use IB_MREQ/IB_SRES interface now
|
Line 64... |
Line 66... |
|
|
signal IBSEL_SSR1 : slbit := '0';
|
signal IBSEL_SSR1 : slbit := '0';
|
signal IBSEL_SSR2 : slbit := '0';
|
signal IBSEL_SSR2 : slbit := '0';
|
signal R_SSR1 : mmu_ssr1_type := mmu_ssr1_init;
|
signal R_SSR1 : mmu_ssr1_type := mmu_ssr1_init;
|
signal R_SSR2 : slv16 := (others=>'0');
|
signal R_SSR2 : slv16 := (others=>'0');
|
signal NEXT_SSR1 : mmu_ssr1_type := mmu_ssr1_init;
|
signal N_SSR1 : mmu_ssr1_type := mmu_ssr1_init;
|
signal NEXT_SSR2 : slv16 := (others=>'0');
|
signal N_SSR2 : slv16 := (others=>'0');
|
|
|
begin
|
begin
|
|
|
proc_ibsel: process (IB_MREQ)
|
SEL_SSR1 : ib_sel
|
variable issr1 : slbit := '0';
|
generic map (
|
variable issr2 : slbit := '0';
|
IB_ADDR => ibaddr_ssr1)
|
begin
|
port map (
|
issr1 := '0';
|
CLK => CLK,
|
issr2 := '0';
|
IB_MREQ => IB_MREQ,
|
if IB_MREQ.req = '1' then
|
SEL => IBSEL_SSR1
|
if IB_MREQ.addr = ibaddr_ssr1(12 downto 1) then issr1 := '1'; end if;
|
);
|
if IB_MREQ.addr = ibaddr_ssr2(12 downto 1) then issr2 := '1'; end if;
|
SEL_SSR2 : ib_sel
|
end if;
|
generic map (
|
IBSEL_SSR1 <= issr1;
|
IB_ADDR => ibaddr_ssr2)
|
IBSEL_SSR2 <= issr2;
|
port map (
|
IB_SRES.ack <= issr1 or issr2;
|
CLK => CLK,
|
IB_SRES.busy <= '0';
|
IB_MREQ => IB_MREQ,
|
end process proc_ibsel;
|
SEL => IBSEL_SSR2
|
|
);
|
|
|
proc_ubdout : process (IBSEL_SSR1, IBSEL_SSR2, R_SSR1, R_SSR2)
|
proc_ibres : process (IBSEL_SSR1, IBSEL_SSR2, IB_MREQ, R_SSR1, R_SSR2)
|
variable ssr1out : slv16 := (others=>'0');
|
variable ssr1out : slv16 := (others=>'0');
|
variable ssr2out : slv16 := (others=>'0');
|
variable ssr2out : slv16 := (others=>'0');
|
begin
|
begin
|
|
|
ssr1out := (others=>'0');
|
ssr1out := (others=>'0');
|
Line 104... |
Line 107... |
if IBSEL_SSR2 = '1' then
|
if IBSEL_SSR2 = '1' then
|
ssr2out := R_SSR2;
|
ssr2out := R_SSR2;
|
end if;
|
end if;
|
|
|
IB_SRES.dout <= ssr1out or ssr2out;
|
IB_SRES.dout <= ssr1out or ssr2out;
|
|
IB_SRES.ack <= (IBSEL_SSR1 or IBSEL_SSR2) and
|
|
(IB_MREQ.re or IB_MREQ.we); -- ack all
|
|
IB_SRES.busy <= '0';
|
|
|
end process proc_ubdout;
|
end process proc_ibres;
|
|
|
proc_regs : process (CLK)
|
proc_regs : process (CLK)
|
begin
|
begin
|
if CLK'event and CLK='1' then
|
if CLK'event and CLK='1' then
|
R_SSR1 <= NEXT_SSR1;
|
R_SSR1 <= N_SSR1;
|
R_SSR2 <= NEXT_SSR2;
|
R_SSR2 <= N_SSR2;
|
end if;
|
end if;
|
end process proc_regs;
|
end process proc_regs;
|
|
|
proc_comb : process (CRESET, IBSEL_SSR1, IB_MREQ,
|
proc_comb : process (CRESET, IBSEL_SSR1, IB_MREQ,
|
R_SSR1, R_SSR2, TRACE, MONI)
|
R_SSR1, R_SSR2, TRACE, MONI)
|
Line 175... |
Line 181... |
end if;
|
end if;
|
end if;
|
end if;
|
|
|
end if;
|
end if;
|
|
|
NEXT_SSR1 <= nssr1;
|
N_SSR1 <= nssr1;
|
NEXT_SSR2 <= nssr2;
|
N_SSR2 <= nssr2;
|
|
|
end process proc_comb;
|
end process proc_comb;
|
|
|
end syn;
|
end syn;
|
|
|
No newline at end of file
|
No newline at end of file
|