- added 'page_mode_en' for async_port

Committed on the Free edition of March Hare Software CVSNT Server.
Upgrade to CVS Suite for more features and support:
http://march-hare.com/cvsnt/


git-svn-id: http://moon:8086/svn/vhdl/trunk@551 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
2009-10-28 22:45:36 +00:00
parent 9ea208eaf0
commit a3d54edf64
3 changed files with 452 additions and 435 deletions
+5
View File
@@ -98,6 +98,7 @@ ARCHITECTURE behavior OF tb_mips_top IS
signal sram_d : unsigned(31 downto 0); signal sram_d : unsigned(31 downto 0);
signal flash_a : unsigned(FLASH_ADDR_WIDTH-1 downto 0); signal flash_a : unsigned(FLASH_ADDR_WIDTH-1 downto 0);
signal flash_d : unsigned(31 downto 0); signal flash_d : unsigned(31 downto 0);
signal flash_page_mode_en : std_logic;
signal gpo0 : unsigned(31 downto 0); signal gpo0 : unsigned(31 downto 0);
signal gpo1 : unsigned(31 downto 0); signal gpo1 : unsigned(31 downto 0);
@@ -132,8 +133,10 @@ mem_mux:
process(ADDR_O) process(ADDR_O)
begin begin
mem_area <= mem_dead; mem_area <= mem_dead;
flash_page_mode_en <= '0';
if ADDR_O(31 downto 28) = X"0" then if ADDR_O(31 downto 28) = X"0" then
mem_area <= mem_flash; mem_area <= mem_flash;
flash_page_mode_en <= '1';
elsif ADDR_O(31 downto 28) = X"A" then elsif ADDR_O(31 downto 28) = X"A" then
if ADDR_O(27 downto 26) = "00" then if ADDR_O(27 downto 26) = "00" then
if ADDR_O(18 downto 16) = "000" then if ADDR_O(18 downto 16) = "000" then
@@ -281,6 +284,7 @@ inst_flash_port : entity work.async_port_wb
ADDR_I => ADDR_O, ADDR_I => ADDR_O,
DAT_I => DAT_O, DAT_I => DAT_O,
DAT_O => DAT_O_flash, DAT_O => DAT_O_flash,
page_mode_en => flash_page_mode_en,
async_a => flash_a, async_a => flash_a,
async_d => flash_d, async_d => flash_d,
async_cs => flash_cs_n, async_cs => flash_cs_n,
@@ -312,6 +316,7 @@ inst_sram_port : entity work.async_port_wb
ADDR_I => ADDR_O, ADDR_I => ADDR_O,
DAT_I => DAT_O, DAT_I => DAT_O,
DAT_O => DAT_O_sram, DAT_O => DAT_O_sram,
page_mode_en => '0',
async_a => sram_a, async_a => sram_a,
async_d => sram_d, async_d => sram_d,
async_cs => sram_cs_n, async_cs => sram_cs_n,
+8 -1
View File
@@ -204,6 +204,7 @@ ARCHITECTURE behavior OF mips_sys IS
ADDR_I : in unsigned(31 downto 0); ADDR_I : in unsigned(31 downto 0);
DAT_I : in unsigned(31 downto 0); DAT_I : in unsigned(31 downto 0);
DAT_O : out unsigned(31 downto 0); DAT_O : out unsigned(31 downto 0);
page_mode_en : in STD_LOGIC;
async_a : out unsigned(addr_width-1 downto 0); async_a : out unsigned(addr_width-1 downto 0);
async_d : inout unsigned(data_width-1 downto 0); async_d : inout unsigned(data_width-1 downto 0);
async_cs : out std_logic; async_cs : out std_logic;
@@ -326,7 +327,9 @@ ARCHITECTURE behavior OF mips_sys IS
signal usb_addr : unsigned(31 downto 0); signal usb_addr : unsigned(31 downto 0);
signal flash_addr : unsigned(31 downto 0); signal flash_addr : unsigned(31 downto 0);
signal ac97_rstn : std_logic; signal ac97_rstn : std_logic;
signal mem_mapped_io : std_logic;
signal flash_rstn : std_logic; signal flash_rstn : std_logic;
signal flash_page_mode_en : std_logic;
-- Arbiter -- Arbiter
constant ARB_MAX_MASTER : natural := 2; constant ARB_MAX_MASTER : natural := 2;
@@ -458,6 +461,7 @@ BEGIN
sys_flash_byten <= '1'; sys_flash_byten <= '1';
usb_addr <= X"0000000" & "00" & ADDR_O(3 downto 2); usb_addr <= X"0000000" & "00" & ADDR_O(3 downto 2);
flash_addr <= "0000000" & ADDR_O(25 downto 2) & '0'; flash_addr <= "0000000" & ADDR_O(25 downto 2) & '0';
flash_page_mode_en <= not mem_mapped_io;
SDAT_I_sdram <= MDAT_O & MDAT_O; SDAT_I_sdram <= MDAT_O & MDAT_O;
SEL_I_sdram <= "0000" & SEL_O; SEL_I_sdram <= "0000" & SEL_O;
@@ -519,9 +523,11 @@ mem_mux:
process(ADDR_O) process(ADDR_O)
begin begin
mem_area <= mem_dead; mem_area <= mem_dead;
mem_mapped_io <= '0';
if ADDR_O(31 downto 28) = X"0" then if ADDR_O(31 downto 28) = X"0" then
mem_area <= mem_flash; mem_area <= mem_flash;
elsif ADDR_O(31 downto 28) = X"A" then elsif ADDR_O(31 downto 28) = X"A" then
mem_mapped_io <= '1';
if ADDR_O(27 downto 26) = "00" then if ADDR_O(27 downto 26) = "00" then
if ADDR_O(18 downto 16) = "000" then if ADDR_O(18 downto 16) = "000" then
mem_area <= mem_gpio; mem_area <= mem_gpio;
@@ -543,7 +549,6 @@ mem_mux:
end if; end if;
elsif (ADDR_O(31 downto 28) = X"B" and ADDR_O(15) = '0') then elsif (ADDR_O(31 downto 28) = X"B" and ADDR_O(15) = '0') then
mem_area <= mem_rom; mem_area <= mem_rom;
-- elsif (ADDR_O(31 downto 28) = X"B" and ADDR_O(15) = '1') then
elsif (ADDR_O(31 downto 28) = X"8" or ADDR_O(30) = '1') then elsif (ADDR_O(31 downto 28) = X"8" or ADDR_O(30) = '1') then
mem_area <= mem_sdram; mem_area <= mem_sdram;
end if; end if;
@@ -707,6 +712,7 @@ inst_flash_port : async_port_wb
ADDR_I => flash_addr, ADDR_I => flash_addr,
DAT_I => MDAT_O, DAT_I => MDAT_O,
DAT_O => SDAT_O_flash, DAT_O => SDAT_O_flash,
page_mode_en => flash_page_mode_en,
async_a => sys_flash_a, async_a => sys_flash_a,
async_d => sys_flash_d, async_d => sys_flash_d,
async_cs => sys_flash_ce, async_cs => sys_flash_ce,
@@ -738,6 +744,7 @@ inst_usb_port : async_port_wb
ADDR_I => usb_addr, ADDR_I => usb_addr,
DAT_I => MDAT_O, DAT_I => MDAT_O,
DAT_O => SDAT_O_usb, DAT_O => SDAT_O_usb,
page_mode_en => '0',
async_a => sys_usb_a, async_a => sys_usb_a,
async_d => sys_usb_d, async_d => sys_usb_d,
async_cs => sys_usb_csn, async_cs => sys_usb_csn,
+5
View File
@@ -213,6 +213,7 @@ ARCHITECTURE behavior OF mips_sys IS
ADDR_I : in unsigned(31 downto 0); ADDR_I : in unsigned(31 downto 0);
DAT_I : in unsigned(31 downto 0); DAT_I : in unsigned(31 downto 0);
DAT_O : out unsigned(31 downto 0); DAT_O : out unsigned(31 downto 0);
page_mode_en : in STD_LOGIC;
async_a : out unsigned(addr_width-1 downto 0); async_a : out unsigned(addr_width-1 downto 0);
async_d : inout unsigned(data_width-1 downto 0); async_d : inout unsigned(data_width-1 downto 0);
async_cs : out std_logic; async_cs : out std_logic;
@@ -382,6 +383,7 @@ ARCHITECTURE behavior OF mips_sys IS
signal flash_we_n : std_logic; signal flash_we_n : std_logic;
signal flash_d_drv : std_logic; signal flash_d_drv : std_logic;
signal flash_bsy : std_logic; signal flash_bsy : std_logic;
signal flash_page_mode_en : std_logic;
-- Arbiter -- Arbiter
constant ARB_MAX_MASTER : natural := 2; constant ARB_MAX_MASTER : natural := 2;
@@ -599,8 +601,10 @@ mem_mux:
process(ADDR_O) process(ADDR_O)
begin begin
mem_area <= mem_dead; mem_area <= mem_dead;
flash_page_mode_en <= '0';
if ADDR_O(31 downto 28) = X"0" then if ADDR_O(31 downto 28) = X"0" then
mem_area <= mem_flash; mem_area <= mem_flash;
flash_page_mode_en <= '1';
elsif ADDR_O(31 downto 28) = X"A" then elsif ADDR_O(31 downto 28) = X"A" then
if ADDR_O(27 downto 26) = "00" then if ADDR_O(27 downto 26) = "00" then
if ADDR_O(18 downto 16) = "000" then if ADDR_O(18 downto 16) = "000" then
@@ -834,6 +838,7 @@ inst_usb_port : async_port_wb
ADDR_I => ADDR_I_usb, ADDR_I => ADDR_I_usb,
DAT_I => MDAT_O, DAT_I => MDAT_O,
DAT_O => SDAT_O_usb, DAT_O => SDAT_O_usb,
page_mode_en => '0',
async_a => sys_usb_a, async_a => sys_usb_a,
async_d => sys_usb_d, async_d => sys_usb_d,
async_cs => sys_usb_csn, async_cs => sys_usb_csn,