- added AC-97 controller
git-svn-id: http://moon:8086/svn/vhdl/trunk@132 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
@@ -104,8 +104,14 @@ PORT
|
||||
sys_flash_ce : out std_logic;
|
||||
sys_flash_wrn : out std_logic;
|
||||
sys_flash_rdn : out std_logic;
|
||||
sys_flash_rstn : out std_logic;
|
||||
sys_flash_ac97_rstn : out std_logic;
|
||||
sys_flash_byten : out std_logic;
|
||||
|
||||
sys_ac97_sdata_in : in std_logic;
|
||||
sys_ac97_bit_clk : in std_logic;
|
||||
sys_ac97_sdata_out : out std_logic;
|
||||
sys_ac97_ssync : out std_logic;
|
||||
|
||||
sys_error : out unsigned(1 downto 0) -- indicates Errors
|
||||
|
||||
);
|
||||
@@ -320,6 +326,8 @@ ARCHITECTURE behavior OF mips_sys IS
|
||||
signal locked : std_logic;
|
||||
signal usb_addr : unsigned(31 downto 0);
|
||||
signal flash_addr : unsigned(31 downto 0);
|
||||
signal ac97_rstn : std_logic;
|
||||
signal flash_rstn : std_logic;
|
||||
|
||||
-- Arbiter
|
||||
constant ARB_MAX_MASTER : natural := 2;
|
||||
@@ -406,6 +414,12 @@ ARCHITECTURE behavior OF mips_sys IS
|
||||
signal SRDY_O_vga : std_logic;
|
||||
signal SDAT_O_vga : unsigned(31 downto 0);
|
||||
|
||||
signal INT_O_ac97 : std_logic;
|
||||
signal CYC_I_ac97 : std_logic;
|
||||
signal ACK_O_ac97 : std_logic;
|
||||
signal SRDY_O_ac97 : std_logic;
|
||||
signal SDAT_O_ac97 : unsigned(31 downto 0);
|
||||
|
||||
signal gpo0 : unsigned(31 downto 0);
|
||||
signal gpo1 : unsigned(31 downto 0);
|
||||
signal gpi0 : unsigned(31 downto 0);
|
||||
@@ -422,7 +436,7 @@ ARCHITECTURE behavior OF mips_sys IS
|
||||
-- attribute rom_style of cpu_cpu_write_fifo_dout: signal is "DISTRIBUTED";
|
||||
-- attribute rom_style of cpu_read_fifo_dout: signal is "DISTRIBUTED";
|
||||
|
||||
type mem_area_t is (mem_dead, mem_flash, mem_usb, mem_rom, mem_ram, mem_gpio, mem_uart, mem_sdram, mem_vga);
|
||||
type mem_area_t is (mem_dead, mem_flash, mem_usb, mem_rom, mem_ram, mem_gpio, mem_uart, mem_sdram, mem_vga, mem_ac97);
|
||||
signal mem_area : mem_area_t;
|
||||
|
||||
BEGIN
|
||||
@@ -441,6 +455,7 @@ BEGIN
|
||||
SDAT_I_sdram <= MDAT_O & MDAT_O;
|
||||
SEL_I_sdram <= "0000" & SEL_O;
|
||||
|
||||
sys_flash_ac97_rstn <= ac97_rstn and flash_rstn;
|
||||
---------------------------------------------------------------
|
||||
-- Arbiter
|
||||
MRDY_O <= MRDY_O_cpu when arb_gnt(0) = '1' else MRDY_O_vga when arb_gnt(1) = '1' else '0';
|
||||
@@ -484,7 +499,7 @@ int_sample:
|
||||
process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
int <= "000" & sys_usb_int & int_uart_rx & sys_btn(4);
|
||||
int <= "00" & INT_O_ac97 & sys_usb_int & int_uart_rx & sys_btn(4);
|
||||
end if;
|
||||
end process;
|
||||
|
||||
@@ -496,18 +511,20 @@ mem_mux:
|
||||
-- mem_area <= mem_flash;
|
||||
if ADDR_O(31 downto 28) = X"A" then
|
||||
if ADDR_O(27 downto 26) = "00" then
|
||||
if ADDR_O(17 downto 16) = "00" then
|
||||
if ADDR_O(18 downto 16) = "000" then
|
||||
mem_area <= mem_gpio;
|
||||
elsif ADDR_O(17 downto 16) = "01" then
|
||||
elsif ADDR_O(18 downto 16) = "001" then
|
||||
mem_area <= mem_uart;
|
||||
elsif ADDR_O(17 downto 16) = "10" then
|
||||
elsif ADDR_O(18 downto 16) = "010" then
|
||||
mem_area <= mem_usb;
|
||||
elsif ADDR_O(17 downto 16) = "11" then
|
||||
elsif ADDR_O(18 downto 16) = "011" then
|
||||
mem_area <= mem_vga;
|
||||
elsif ADDR_O(18 downto 16) = "100" then
|
||||
mem_area <= mem_ac97;
|
||||
end if;
|
||||
elsif ADDR_O(27 downto 26) = "01" then
|
||||
mem_area <= mem_flash;
|
||||
end if;
|
||||
elsif ADDR_O(27 downto 26) = "01" then
|
||||
mem_area <= mem_flash;
|
||||
end if;
|
||||
elsif (ADDR_O(31 downto 28) = X"B" and ADDR_O(15) = '0') then
|
||||
mem_area <= mem_rom;
|
||||
elsif (ADDR_O(31 downto 28) = X"B" and ADDR_O(15) = '1') then
|
||||
@@ -529,6 +546,7 @@ signal_mux:
|
||||
CYC_I_ram <= '0';
|
||||
CYC_I_sdram <= '0';
|
||||
CYC_I_vga <= '0';
|
||||
CYC_I_ac97 <= '0';
|
||||
|
||||
case mem_area is
|
||||
|
||||
@@ -556,6 +574,9 @@ signal_mux:
|
||||
when mem_vga =>
|
||||
CYC_I_vga <= CYC_O;
|
||||
|
||||
when mem_ac97 =>
|
||||
CYC_I_ac97 <= CYC_O;
|
||||
|
||||
when others => null;
|
||||
|
||||
end case;
|
||||
@@ -563,8 +584,8 @@ signal_mux:
|
||||
end process;
|
||||
|
||||
------------------------------------------------------------------
|
||||
SRDY_I <= SRDY_O_flash or SRDY_O_usb or SRDY_O_sdram or SRDY_O_ram or SRDY_O_rom or SRDY_O_uart or SRDY_O_gpio or SRDY_O_vga;
|
||||
ACK_I <= ACK_O_flash or ACK_O_usb or ACK_O_sdram or ACK_O_ram or ACK_O_rom or ACK_O_uart or ACK_O_gpio or ACK_O_vga;
|
||||
SRDY_I <= SRDY_O_flash or SRDY_O_usb or SRDY_O_sdram or SRDY_O_ram or SRDY_O_rom or SRDY_O_uart or SRDY_O_gpio or SRDY_O_vga or SRDY_O_ac97;
|
||||
ACK_I <= ACK_O_flash or ACK_O_usb or ACK_O_sdram or ACK_O_ram or ACK_O_rom or ACK_O_uart or ACK_O_gpio or ACK_O_vga or ACK_O_ac97;
|
||||
MDAT_I <= SDAT_O_sdram(31 downto 0) when CYC_I_sdram = '1' else
|
||||
SDAT_O_ram when CYC_I_ram = '1' else
|
||||
SDAT_O_rom when CYC_I_rom = '1' else
|
||||
@@ -572,6 +593,7 @@ signal_mux:
|
||||
SDAT_O_usb when CYC_I_usb = '1' else
|
||||
SDAT_O_uart when CYC_I_uart = '1' else
|
||||
SDAT_O_vga when CYC_I_vga = '1' else
|
||||
SDAT_O_ac97 when CYC_I_ac97 = '1' else
|
||||
SDAT_O_gpio when CYC_I_gpio = '1' else X"DEADBEEF";
|
||||
|
||||
------------------------------------------------------------------
|
||||
@@ -687,7 +709,7 @@ inst_flash_port : async_port_wb
|
||||
async_cs => sys_flash_ce,
|
||||
async_wr => sys_flash_wrn,
|
||||
async_rd => sys_flash_rdn,
|
||||
async_rst => sys_flash_rstn
|
||||
async_rst => flash_rstn
|
||||
);
|
||||
|
||||
inst_usb_port : async_port_wb
|
||||
@@ -851,5 +873,34 @@ inst_vga_frontend : vga_frontend64
|
||||
vga_vsync => sys_vga_vsync
|
||||
);
|
||||
|
||||
inst_ac97_wb : entity work.ac97_wb
|
||||
GENERIC MAP
|
||||
(
|
||||
fifo_depth => 4
|
||||
)
|
||||
PORT MAP
|
||||
(
|
||||
-- J-Bus domain
|
||||
CLK_I => clk,
|
||||
RST_I => rst,
|
||||
CYC_I => CYC_I_ac97,
|
||||
STB_I => STB_O,
|
||||
WE_I => WE_O,
|
||||
ACK_O => ACK_O_ac97,
|
||||
SRDY_O => SRDY_O_ac97,
|
||||
MRDY_I => MRDY_O,
|
||||
ADDR_I => ADDR_O,
|
||||
DAT_I => MDAT_O,
|
||||
DAT_O => SDAT_O_ac97,
|
||||
INT_O => INT_O_ac97,
|
||||
|
||||
-- AC97 domain
|
||||
ac97_sdata_in => sys_ac97_sdata_in,
|
||||
ac97_bit_clk => sys_ac97_bit_clk,
|
||||
ac97_reset_n => ac97_rstn,
|
||||
ac97_sdata_out => sys_ac97_sdata_out,
|
||||
ac97_ssync => sys_ac97_ssync
|
||||
);
|
||||
|
||||
------------------------------------------------------------------
|
||||
END;
|
||||
|
||||
Reference in New Issue
Block a user