mirror of
https://github.com/antonblanchard/microwatt.git
synced 2026-04-03 03:59:22 +00:00
Add DMI address decoder
And prepare signals for core DMI support Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
60
soc.vhdl
60
soc.vhdl
@@ -64,6 +64,13 @@ architecture behaviour of soc is
|
||||
signal dmi_wr : std_ulogic;
|
||||
signal dmi_ack : std_ulogic;
|
||||
|
||||
-- Per slave DMI signals
|
||||
signal dmi_wb_dout : std_ulogic_vector(63 downto 0);
|
||||
signal dmi_wb_req : std_ulogic;
|
||||
signal dmi_wb_ack : std_ulogic;
|
||||
signal dmi_core_dout : std_ulogic_vector(63 downto 0);
|
||||
signal dmi_core_req : std_ulogic;
|
||||
signal dmi_core_ack : std_ulogic;
|
||||
begin
|
||||
|
||||
-- Processor core
|
||||
@@ -198,15 +205,62 @@ begin
|
||||
dmi_ack => dmi_ack
|
||||
);
|
||||
|
||||
-- DMI interconnect
|
||||
dmi_intercon: process(dmi_addr, dmi_req,
|
||||
dmi_wb_ack, dmi_wb_dout,
|
||||
dmi_core_ack, dmi_core_dout)
|
||||
|
||||
-- DMI address map (each address is a full 64-bit register)
|
||||
--
|
||||
-- Offset: Size: Slave:
|
||||
-- 0 4 Wishbone
|
||||
-- 10 16 Core
|
||||
|
||||
type slave_type is (SLAVE_WB,
|
||||
SLAVE_CORE,
|
||||
SLAVE_NONE);
|
||||
variable slave : slave_type;
|
||||
begin
|
||||
-- Simple address decoder
|
||||
if dmi_addr(7 downto 0) = "000000--" then
|
||||
slave := SLAVE_WB;
|
||||
elsif dmi_addr(7 downto 0) = "0001----" then
|
||||
slave := SLAVE_CORE;
|
||||
else
|
||||
slave := SLAVE_NONE;
|
||||
end if;
|
||||
|
||||
-- DMI muxing
|
||||
dmi_wb_req <= '0';
|
||||
dmi_core_req <= '0';
|
||||
case slave is
|
||||
when SLAVE_WB =>
|
||||
dmi_wb_req <= dmi_req;
|
||||
dmi_ack <= dmi_wb_ack;
|
||||
dmi_din <= dmi_wb_dout;
|
||||
when SLAVE_CORE =>
|
||||
dmi_core_req <= dmi_req;
|
||||
dmi_ack <= dmi_core_ack;
|
||||
dmi_din <= dmi_core_dout;
|
||||
when others =>
|
||||
dmi_ack <= dmi_req;
|
||||
dmi_din <= (others => '1');
|
||||
end case;
|
||||
end process;
|
||||
|
||||
-- Core dummy
|
||||
dmi_core_ack <= dmi_core_req;
|
||||
dmi_core_dout <= x"0000000000000000";
|
||||
|
||||
-- Wishbone debug master (TODO: Add a DMI address decoder)
|
||||
wishbone_debug: entity work.wishbone_debug_master
|
||||
port map(clk => system_clk, rst => rst,
|
||||
dmi_addr => dmi_addr(1 downto 0),
|
||||
dmi_dout => dmi_din,
|
||||
dmi_dout => dmi_wb_dout,
|
||||
dmi_din => dmi_dout,
|
||||
dmi_wr => dmi_wr,
|
||||
dmi_ack => dmi_ack,
|
||||
dmi_req => dmi_req,
|
||||
dmi_ack => dmi_wb_ack,
|
||||
dmi_req => dmi_wb_req,
|
||||
wb_in => wishbone_debug_in,
|
||||
wb_out => wishbone_debug_out);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user