⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csr.vhd

📁 PAL decoder, spartan 3 FPGA
💻 VHD
字号:
---------------------------------------------------------------------------------	MiniGA--  Author: Thomas Pototschnig (thomas.pototschnig@gmx.de)----  License: Creative Commons Attribution-NonCommercial-ShareAlike 2.0 License--           http://creativecommons.org/licenses/by-nc-sa/2.0/de/----  If you want to use MiniGA for commercial purposes please contact the author--------------------------------------------------------------------------------- Cycle-Shared-RAM-- clk4x = 60MHz-- Effektiv ergeben sich 30MB/sec pro Buslibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity csr is	generic (		ADR_WIDTH : integer := 19; -- A0 bis A18		DATA_WIDTH : integer := 16 -- D0 bis D15	);	port (		clk4x : in std_logic;		reset : in std_logic;		clk : in std_logic;		sync : in std_logic;-- ram		ram_adr : out std_logic_vector ((ADR_WIDTH-1) downto 0);		ram_data: inout std_logic_vector ((DATA_WIDTH-1) downto 0);		ram_rd : out std_logic;		ram_wr : out std_logic;		ram_cs : out std_logic;			adr1 : in std_logic_vector ((ADR_WIDTH-1) downto 0);		data1_in : in std_logic_vector ((DATA_WIDTH-1) downto 0);		data1_out : out std_logic_vector ((DATA_WIDTH-1) downto 0);		rd1 : in std_logic;		wr1 : in std_logic;				adr2 : in std_logic_vector ((ADR_WIDTH-1) downto 0);		data2_in : in std_logic_vector ((DATA_WIDTH-1) downto 0);		data2_out : out std_logic_vector ((DATA_WIDTH-1) downto 0);		rd2 : in std_logic;		wr2 : in std_logic	);end csr;architecture behaviour of csr isbegin-- immer 16bit zugriffe!	process (clk4x, reset) 	variable state : integer := -1;	begin		if reset='0' then			ram_data <= (others => 'Z');			ram_rd <= '1';			ram_wr <= '1';			ram_adr <= (others => '0');				data1_out <= (others => '0');			data2_out <= (others => '0');			ram_cs <= '1';			state := 4;		elsif clk4x'event and clk4x='0' then			case state is				when 0 =>					if rd2='0' and wr2='1' then						data2_out <= ram_data;					end if;										ram_rd <= '1';					ram_wr <= '1';					ram_adr <= adr1;					ram_cs <= '0';					-- auf Datenbussen rausschreiben					if wr1='0' and rd1='1' then						ram_data <= data1_in;					else						ram_data <= (others => 'Z');					end if;										state := 1;				when 1 =>-- beim lesen nur vom selektierten SRAM lesen									ram_rd <= rd1;					ram_wr <= wr1;									state := 2;				when 2 => 					if rd2='0' and wr2='1' then						data1_out <= ram_data;					end if;					ram_rd <= '1';					ram_wr <= '1';					ram_adr <= adr2;					ram_cs <= '0';-- auf Datenbussen rausschreiben					if wr2='0' and rd2='1' then						ram_data <= data2_in;					else						ram_data <= (others => 'Z');					end if;										state := 3;				when 3 =>					ram_rd <= rd2;					ram_wr <= wr2;									state := 0;-- statemachine mit dem 15MHz clock synchronisieren									when 4 =>					if sync='1' then						state := 5;					end if;				when 5 =>				    state := 6;				when 6 =>				    state := 0;				when 7 => 				    state := 0;				when others => 					state:=0;			end case;		end if;		end process;end architecture;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -