Re-indent and reformat soc.vhdl

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
nia-debug
Benjamin Herrenschmidt 5 years ago
parent a69a93b466
commit 310a56c076

@ -9,181 +9,185 @@ use work.wishbone_types.all;
-- 0x00000000: Main memory (1 MB) -- 0x00000000: Main memory (1 MB)
-- 0xc0002000: UART0 (for host communication) -- 0xc0002000: UART0 (for host communication)
entity soc is entity soc is
generic ( generic (
MEMORY_SIZE : positive; MEMORY_SIZE : positive;
RAM_INIT_FILE : string; RAM_INIT_FILE : string;
RESET_LOW : boolean RESET_LOW : boolean
); );
port( port(
rst : in std_ulogic; rst : in std_ulogic;
system_clk : in std_logic; system_clk : in std_logic;


-- UART0 signals: -- UART0 signals:
uart0_txd : out std_logic; uart0_txd : out std_logic;
uart0_rxd : in std_logic uart0_rxd : in std_logic
); );
end entity soc; end entity soc;


architecture behaviour of soc is architecture behaviour of soc is


-- wishbone signals: -- wishbone signals:
signal wishbone_proc_out: wishbone_master_out; signal wishbone_proc_out: wishbone_master_out;
signal wishbone_proc_in: wishbone_slave_out; signal wishbone_proc_in: wishbone_slave_out;


-- Processor signals: -- Processor signals:
signal processor_adr_out : std_logic_vector(63 downto 0); signal processor_adr_out : std_logic_vector(63 downto 0);
signal processor_sel_out : std_logic_vector(7 downto 0); signal processor_sel_out : std_logic_vector(7 downto 0);
signal processor_cyc_out : std_logic; signal processor_cyc_out : std_logic;
signal processor_stb_out : std_logic; signal processor_stb_out : std_logic;
signal processor_we_out : std_logic; signal processor_we_out : std_logic;
signal processor_dat_out : std_logic_vector(63 downto 0); signal processor_dat_out : std_logic_vector(63 downto 0);
signal processor_dat_in : std_logic_vector(63 downto 0); signal processor_dat_in : std_logic_vector(63 downto 0);
signal processor_ack_in : std_logic; signal processor_ack_in : std_logic;

-- UART0 signals: -- UART0 signals:
signal uart0_adr_in : std_logic_vector(11 downto 0); signal uart0_adr_in : std_logic_vector(11 downto 0);
signal uart0_dat_in : std_logic_vector( 7 downto 0); signal uart0_dat_in : std_logic_vector( 7 downto 0);
signal uart0_dat_out : std_logic_vector( 7 downto 0); signal uart0_dat_out : std_logic_vector( 7 downto 0);
signal uart0_cyc_in : std_logic; signal uart0_cyc_in : std_logic;
signal uart0_stb_in : std_logic; signal uart0_stb_in : std_logic;
signal uart0_we_in : std_logic; signal uart0_we_in : std_logic;
signal uart0_ack_out : std_logic; signal uart0_ack_out : std_logic;


-- Main memory signals: -- Main memory signals:
signal main_memory_adr_in : std_logic_vector(positive(ceil(log2(real(MEMORY_SIZE))))-1 downto 0); signal main_memory_adr_in : std_logic_vector(positive(ceil(log2(real(MEMORY_SIZE))))-1 downto 0);
signal main_memory_dat_in : std_logic_vector(63 downto 0); signal main_memory_dat_in : std_logic_vector(63 downto 0);
signal main_memory_dat_out : std_logic_vector(63 downto 0); signal main_memory_dat_out : std_logic_vector(63 downto 0);
signal main_memory_cyc_in : std_logic; signal main_memory_cyc_in : std_logic;
signal main_memory_stb_in : std_logic; signal main_memory_stb_in : std_logic;
signal main_memory_sel_in : std_logic_vector(7 downto 0); signal main_memory_sel_in : std_logic_vector(7 downto 0);
signal main_memory_we_in : std_logic; signal main_memory_we_in : std_logic;
signal main_memory_ack_out : std_logic; signal main_memory_ack_out : std_logic;


-- Selected peripheral on the interconnect: -- Selected peripheral on the interconnect:
type intercon_peripheral_type is ( type intercon_peripheral_type is (
PERIPHERAL_UART0, PERIPHERAL_MAIN_MEMORY, PERIPHERAL_ERROR, PERIPHERAL_UART0, PERIPHERAL_MAIN_MEMORY, PERIPHERAL_ERROR,
PERIPHERAL_NONE); PERIPHERAL_NONE);
signal intercon_peripheral : intercon_peripheral_type := PERIPHERAL_NONE; signal intercon_peripheral : intercon_peripheral_type := PERIPHERAL_NONE;


-- Interconnect address decoder state: -- Interconnect address decoder state:
signal intercon_busy : boolean := false; signal intercon_busy : boolean := false;


begin begin


address_decoder: process(system_clk) address_decoder: process(system_clk)
begin begin
if rising_edge(system_clk) then if rising_edge(system_clk) then
if rst = '1' then if rst = '1' then
intercon_peripheral <= PERIPHERAL_NONE; intercon_peripheral <= PERIPHERAL_NONE;
intercon_busy <= false; intercon_busy <= false;
else
if not intercon_busy then
if processor_cyc_out = '1' then
intercon_busy <= true;

if processor_adr_out(31 downto 24) = x"00" then -- Main memory space
intercon_peripheral <= PERIPHERAL_MAIN_MEMORY;
elsif processor_adr_out(31 downto 24) = x"c0" then -- Peripheral memory space
case processor_adr_out(15 downto 12) is
when x"2" =>
intercon_peripheral <= PERIPHERAL_UART0;
when others => -- Invalid address - delegated to the error peripheral
intercon_peripheral <= PERIPHERAL_ERROR;
end case;
else else
if not intercon_busy then intercon_peripheral <= PERIPHERAL_ERROR;
if processor_cyc_out = '1' then
intercon_busy <= true;

if processor_adr_out(31 downto 24) = x"00" then -- Main memory space
intercon_peripheral <= PERIPHERAL_MAIN_MEMORY;
elsif processor_adr_out(31 downto 24) = x"c0" then -- Peripheral memory space
case processor_adr_out(15 downto 12) is
when x"2" =>
intercon_peripheral <= PERIPHERAL_UART0;
when others => -- Invalid address - delegated to the error peripheral
intercon_peripheral <= PERIPHERAL_ERROR;
end case;
else
intercon_peripheral <= PERIPHERAL_ERROR;
end if;
else
intercon_peripheral <= PERIPHERAL_NONE;
end if;
else
if processor_cyc_out = '0' then
intercon_busy <= false;
intercon_peripheral <= PERIPHERAL_NONE;
end if;
end if;
end if; end if;
else
intercon_peripheral <= PERIPHERAL_NONE;
end if;
else
if processor_cyc_out = '0' then
intercon_busy <= false;
intercon_peripheral <= PERIPHERAL_NONE;
end if;
end if; end if;
end process address_decoder; end if;

end if;
processor_intercon: process(all) end process address_decoder;
begin
case intercon_peripheral is processor_intercon: process(all)
when PERIPHERAL_UART0 => begin
processor_ack_in <= uart0_ack_out; case intercon_peripheral is
processor_dat_in <= x"00000000000000" & uart0_dat_out; when PERIPHERAL_UART0 =>
when PERIPHERAL_MAIN_MEMORY => processor_ack_in <= uart0_ack_out;
processor_ack_in <= main_memory_ack_out; processor_dat_in <= x"00000000000000" & uart0_dat_out;
processor_dat_in <= main_memory_dat_out; when PERIPHERAL_MAIN_MEMORY =>
when PERIPHERAL_NONE => processor_ack_in <= main_memory_ack_out;
processor_ack_in <= '0'; processor_dat_in <= main_memory_dat_out;
processor_dat_in <= (others => '0'); when PERIPHERAL_NONE =>
when others => processor_ack_in <= '0';
processor_ack_in <= '0'; processor_dat_in <= (others => '0');
processor_dat_in <= (others => '0'); when others =>
end case; processor_ack_in <= '0';
end process processor_intercon; processor_dat_in <= (others => '0');

end case;
processor: entity work.core end process processor_intercon;
port map(
clk => system_clk, processor: entity work.core
rst => rst, port map(

clk => system_clk,
wishbone_out => wishbone_proc_out, rst => rst,
wishbone_in => wishbone_proc_in
); wishbone_out => wishbone_proc_out,
processor_adr_out <= wishbone_proc_out.adr; wishbone_in => wishbone_proc_in
processor_dat_out <= wishbone_proc_out.dat; );
processor_sel_out <= wishbone_proc_out.sel; processor_adr_out <= wishbone_proc_out.adr;
processor_cyc_out <= wishbone_proc_out.cyc; processor_dat_out <= wishbone_proc_out.dat;
processor_stb_out <= wishbone_proc_out.stb; processor_sel_out <= wishbone_proc_out.sel;
processor_we_out <= wishbone_proc_out.we; processor_cyc_out <= wishbone_proc_out.cyc;
wishbone_proc_in.dat <= processor_dat_in; processor_stb_out <= wishbone_proc_out.stb;
wishbone_proc_in.ack <= processor_ack_in; processor_we_out <= wishbone_proc_out.we;

wishbone_proc_in.dat <= processor_dat_in;
uart0: entity work.pp_soc_uart wishbone_proc_in.ack <= processor_ack_in;
generic map(
FIFO_DEPTH => 32 uart0: entity work.pp_soc_uart
) port map( generic map(
clk => system_clk, FIFO_DEPTH => 32
reset => rst, )
txd => uart0_txd, port map(
rxd => uart0_rxd, clk => system_clk,
wb_adr_in => uart0_adr_in, reset => rst,
wb_dat_in => uart0_dat_in, txd => uart0_txd,
wb_dat_out => uart0_dat_out, rxd => uart0_rxd,
wb_cyc_in => uart0_cyc_in, wb_adr_in => uart0_adr_in,
wb_stb_in => uart0_stb_in, wb_dat_in => uart0_dat_in,
wb_we_in => uart0_we_in, wb_dat_out => uart0_dat_out,
wb_ack_out => uart0_ack_out wb_cyc_in => uart0_cyc_in,
); wb_stb_in => uart0_stb_in,
uart0_adr_in <= processor_adr_out(uart0_adr_in'range); wb_we_in => uart0_we_in,
uart0_dat_in <= processor_dat_out(7 downto 0); wb_ack_out => uart0_ack_out
uart0_we_in <= processor_we_out; );
uart0_cyc_in <= processor_cyc_out when intercon_peripheral = PERIPHERAL_UART0 else '0'; uart0_adr_in <= processor_adr_out(uart0_adr_in'range);
uart0_stb_in <= processor_stb_out when intercon_peripheral = PERIPHERAL_UART0 else '0'; uart0_dat_in <= processor_dat_out(7 downto 0);

uart0_we_in <= processor_we_out;
main_memory: entity work.pp_soc_memory uart0_cyc_in <= processor_cyc_out when intercon_peripheral = PERIPHERAL_UART0 else '0';
generic map( uart0_stb_in <= processor_stb_out when intercon_peripheral = PERIPHERAL_UART0 else '0';
MEMORY_SIZE => MEMORY_SIZE,
RAM_INIT_FILE => RAM_INIT_FILE main_memory: entity work.pp_soc_memory
) port map( generic map(
clk => system_clk, MEMORY_SIZE => MEMORY_SIZE,
reset => rst, RAM_INIT_FILE => RAM_INIT_FILE
wb_adr_in => main_memory_adr_in, )
wb_dat_in => main_memory_dat_in, port map(
wb_dat_out => main_memory_dat_out, clk => system_clk,
wb_cyc_in => main_memory_cyc_in, reset => rst,
wb_stb_in => main_memory_stb_in, wb_adr_in => main_memory_adr_in,
wb_sel_in => main_memory_sel_in, wb_dat_in => main_memory_dat_in,
wb_we_in => main_memory_we_in, wb_dat_out => main_memory_dat_out,
wb_ack_out => main_memory_ack_out wb_cyc_in => main_memory_cyc_in,
); wb_stb_in => main_memory_stb_in,
main_memory_adr_in <= processor_adr_out(main_memory_adr_in'range); wb_sel_in => main_memory_sel_in,
main_memory_dat_in <= processor_dat_out; wb_we_in => main_memory_we_in,
main_memory_we_in <= processor_we_out; wb_ack_out => main_memory_ack_out
main_memory_sel_in <= processor_sel_out; );
main_memory_cyc_in <= processor_cyc_out when intercon_peripheral = PERIPHERAL_MAIN_MEMORY else '0'; main_memory_adr_in <= processor_adr_out(main_memory_adr_in'range);
main_memory_stb_in <= processor_stb_out when intercon_peripheral = PERIPHERAL_MAIN_MEMORY else '0'; main_memory_dat_in <= processor_dat_out;
main_memory_we_in <= processor_we_out;
main_memory_sel_in <= processor_sel_out;
main_memory_cyc_in <= processor_cyc_out when
intercon_peripheral = PERIPHERAL_MAIN_MEMORY else '0';
main_memory_stb_in <= processor_stb_out when
intercon_peripheral = PERIPHERAL_MAIN_MEMORY else '0';

end architecture behaviour; end architecture behaviour;

Loading…
Cancel
Save