📄 kxram.vhd
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity KXRAM is
port(rst : in std_logic;
clk1 : in std_logic;
d : in std_logic_vector(7 downto 0);
ramrden : in std_logic;
ramrdck : in std_logic;
rstaddr : in std_logic;
we : out std_logic;
ioclk : out std_logic;
data : out std_logic_vector(7 downto 0);
address : out std_logic_vector(9 downto 0)
);
end KXRAM;
architecture testmod of KXRAM is
type states is (st0,st1,st2);
signal current1,next1 : states;
type adsstates is (sta0,sta1);
signal ads_state,next_ads_state : adsstates;
signal clkaddr : std_logic;
signal addr : std_logic_vector(9 downto 0);
signal clk0 : std_logic;
signal dis : std_logic_vector(7 downto 0);
begin
ioclk <= clkaddr;
addres: process(clkaddr,rst,rstaddr)
begin
if(rst = '0' or rstaddr = '1') then addr <= (others => '0');
elsif clkaddr'event and clkaddr = '1' then addr <= addr + 1;
end if;
end process;
clkaddr <= clk0 when ramrden = '0' else
ramrdck when ramrden = '1' else
ramrdck;
process(clk1)
begin
if(clk1'event and clk1 = '1') then address <= addr;
end if;
end process;
process(clk1,rst)
begin
if rst = '0' then current1 <= st0;
elsif clk1'event and clk1='1' then current1<=next1;
end if;
end process;
ram_wr_rd : process(current1,ramrden)
begin
case current1 is
when st0 => we <= '1'; clk0 <= '0';
if(ramrden = '0') then next1 <= st2;
elsif(ramrden = '1') then next1 <= st1;
else next1 <= st0;
end if;
when st1 => we <= '0'; clk0 <= '0';
if(ramrden = '0') then next1 <= st0;
else next1 <= st1;
end if;
when st2 => we <= '1'; clk0 <= '1'; next1 <= st0;
when others => next1 <= st0;
end case;
end process;
PROCESS (clk1)
BEGIN
IF clk1'EVENT AND clk1='1' THEN data <= D ;
END IF;
END PROCESS ;
end testmod;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -