updated testbench (not functional yet)
This commit is contained in:
@@ -1,235 +1,176 @@
|
||||
library work;
|
||||
use work.firebee_pkg.all;
|
||||
LIBRARY work;
|
||||
USE work.firebee_pkg.ALL;
|
||||
USE work.ddr2_ram_model_pkg.ALL;
|
||||
|
||||
LIBRARY IEEE;
|
||||
USE IEEE.std_logic_1164.ALL;
|
||||
USE IEEE.numeric_std.ALL;
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
use std.textio.all;
|
||||
USE std.textio.ALL;
|
||||
|
||||
|
||||
entity ddr_ctlr_tb is
|
||||
end ddr_ctlr_tb;
|
||||
ENTITY ddr_ctlr_tb IS
|
||||
END ddr_ctlr_tb;
|
||||
|
||||
|
||||
architecture beh of ddr_ctlr_tb is
|
||||
signal clock : std_logic := '0'; -- main clock
|
||||
signal ddr_clk : std_logic := '0'; -- ddr clock
|
||||
ARCHITECTURE beh OF ddr_ctlr_tb IS
|
||||
SIGNAL clock : STD_LOGIC := '0'; -- main clock
|
||||
SIGNAL ddr_clk : STD_LOGIC := '0'; -- ddr clock
|
||||
|
||||
signal FB_ADR : std_logic_vector(31 downto 0);
|
||||
signal DDR_SYNC_66M : std_logic := '0';
|
||||
signal FB_CS1n : std_logic;
|
||||
signal FB_OEn : std_logic := '1'; -- only write cycles for now
|
||||
signal FB_SIZE0 : std_logic := '1';
|
||||
signal FB_SIZE1 : std_logic := '1'; -- long word access
|
||||
signal FB_ALE : std_logic := 'Z'; -- defined reset state
|
||||
signal FB_WRn : std_logic;
|
||||
signal FIFO_CLR : std_logic;
|
||||
signal VIDEO_RAM_CTR : std_logic_vector(15 downto 0);
|
||||
signal BLITTER_ADR : std_logic_vector(31 downto 0);
|
||||
signal BLITTER_SIG : std_logic;
|
||||
signal BLITTER_WR : std_logic;
|
||||
signal DDRCLK0 : std_logic;
|
||||
signal CLK_33M : std_logic := '0';
|
||||
signal FIFO_MW : std_logic_vector(8 downto 0);
|
||||
signal VA : std_logic_vector(12 downto 0);
|
||||
signal VWEn : std_logic;
|
||||
signal VRASn : std_logic;
|
||||
signal VCSn : std_logic;
|
||||
signal VCKE : std_logic;
|
||||
signal VCASn : std_logic;
|
||||
signal FB_LE : std_logic_vector(3 downto 0);
|
||||
signal FB_VDOE : std_logic_vector(3 downto 0);
|
||||
signal SR_FIFO_WRE : std_logic;
|
||||
signal SR_DDR_FB : std_logic;
|
||||
signal SR_DDR_WR : std_logic;
|
||||
signal SR_DDRWR_D_SEL: std_logic;
|
||||
signal SR_VDMP : std_logic_vector(7 downto 0);
|
||||
signal VIDEO_DDR_TA : std_logic;
|
||||
signal SR_BLITTER_DACK : std_logic;
|
||||
signal BA : std_logic_vector(1 downto 0);
|
||||
signal DDRWR_D_SEL1 : std_logic;
|
||||
signal VDM_SEL : std_logic_vector(3 downto 0);
|
||||
signal DATA_IN : std_logic_vector(31 downto 0);
|
||||
signal DATA_OUT : std_logic_vector(31 downto 16);
|
||||
signal DATA_EN_H : std_logic;
|
||||
signal DATA_EN_L : std_logic;
|
||||
SIGNAL FB_ADR : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
SIGNAL DDR_SYNC_66M : STD_LOGIC := '0';
|
||||
SIGNAL FB_CS1_n : STD_LOGIC;
|
||||
SIGNAL FB_OE_n : STD_LOGIC := '1'; -- only write cycles for now
|
||||
SIGNAL FB_SIZE0 : STD_LOGIC := '1';
|
||||
SIGNAL FB_SIZE1 : STD_LOGIC := '1'; -- long word access
|
||||
SIGNAL FB_ALE : STD_LOGIC := 'Z'; -- defined reset state
|
||||
SIGNAL FB_WRn : STD_LOGIC;
|
||||
SIGNAL FIFO_CLR : STD_LOGIC;
|
||||
SIGNAL VIDEO_RAM_CTR : STD_LOGIC_VECTOR(15 DOWNTO 0);
|
||||
SIGNAL BLITTER_ADR : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
SIGNAL BLITTER_SIG : STD_LOGIC;
|
||||
SIGNAL BLITTER_WR : STD_LOGIC;
|
||||
SIGNAL ddrclk0 : STD_LOGIC;
|
||||
SIGNAL CLK_33M : STD_LOGIC := '0';
|
||||
SIGNAL FIFO_MW : STD_LOGIC_VECTOR(8 DOWNTO 0);
|
||||
SIGNAL va : STD_LOGIC_VECTOR(12 DOWNTO 0);
|
||||
SIGNAL vwe_n : STD_LOGIC;
|
||||
SIGNAL vras_n : STD_LOGIC;
|
||||
SIGNAL vcs_n : STD_LOGIC;
|
||||
SIGNAL vcke : STD_LOGIC;
|
||||
SIGNAL vcas_n : STD_LOGIC;
|
||||
SIGNAL FB_LE : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||
SIGNAL FB_VDOE : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||
SIGNAL SR_FIFO_WRE : STD_LOGIC;
|
||||
SIGNAL SR_DDR_FB : STD_LOGIC;
|
||||
SIGNAL SR_DDR_WR : STD_LOGIC;
|
||||
SIGNAL SR_DDRWR_D_SEL : STD_LOGIC;
|
||||
SIGNAL sr_vdmp : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||
SIGNAL VIDEO_DDR_TA : STD_LOGIC;
|
||||
SIGNAL SR_BLITTER_DACK : STD_LOGIC;
|
||||
SIGNAL ba : STD_LOGIC_VECTOR(1 DOWNTO 0);
|
||||
SIGNAL DDRWR_D_SEL1 : STD_LOGIC;
|
||||
SIGNAL VDM_SEL : STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||
SIGNAL DATA_IN : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||||
SIGNAL DATA_OUT : STD_LOGIC_VECTOR(31 DOWNTO 16);
|
||||
SIGNAL data_en_h : STD_LOGIC;
|
||||
SIGNAL data_en_l : STD_LOGIC;
|
||||
|
||||
type bus_state_type is (S0, S1, S2, S3); -- according to state machine description on p 17-14 of the MCF ref manual
|
||||
signal bus_state : bus_state_type := S0;
|
||||
|
||||
component DDR_CTRL_V1
|
||||
port(
|
||||
CLK_MAIN : in std_logic;
|
||||
DDR_SYNC_66M : in std_logic;
|
||||
FB_ADR : in std_logic_vector(31 downto 0);
|
||||
FB_CS1n : in std_logic;
|
||||
FB_OEn : in std_logic;
|
||||
FB_SIZE0 : in std_logic;
|
||||
FB_SIZE1 : in std_logic;
|
||||
FB_ALE : in std_logic;
|
||||
FB_WRn : in std_logic;
|
||||
FIFO_CLR : in std_logic;
|
||||
VIDEO_RAM_CTR : in std_logic_vector(15 downto 0);
|
||||
BLITTER_ADR : in std_logic_vector(31 downto 0);
|
||||
BLITTER_SIG : in std_logic;
|
||||
BLITTER_WR : in std_logic;
|
||||
DDRCLK0 : in std_logic;
|
||||
CLK_33M : in std_logic;
|
||||
FIFO_MW : in std_logic_vector(8 downto 0);
|
||||
VA : out std_logic_vector(12 downto 0);
|
||||
VWEn : out std_logic;
|
||||
VRASn : out std_logic;
|
||||
VCSn : out std_logic;
|
||||
VCKE : out std_logic;
|
||||
VCASn : out std_logic;
|
||||
FB_LE : out std_logic_vector(3 downto 0);
|
||||
FB_VDOE : out std_logic_vector(3 downto 0);
|
||||
SR_FIFO_WRE : out std_logic;
|
||||
SR_DDR_FB : out std_logic;
|
||||
SR_DDR_WR : out std_logic;
|
||||
SR_DDRWR_D_SEL : out std_logic;
|
||||
SR_VDMP : out std_logic_vector(7 downto 0);
|
||||
VIDEO_DDR_TA : out std_logic;
|
||||
SR_BLITTER_DACK : out std_logic;
|
||||
BA : out std_logic_vector(1 downto 0);
|
||||
DDRWR_D_SEL1 : out std_logic;
|
||||
VDM_SEL : out std_logic_vector(3 downto 0);
|
||||
DATA_IN : in std_logic_vector(31 downto 0);
|
||||
DATA_OUT : out std_logic_vector(31 downto 16);
|
||||
DATA_EN_H : out std_logic;
|
||||
DATA_EN_L : out std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
component ddr_ram_model
|
||||
port (
|
||||
signal CK : in std_logic;
|
||||
signal CKE : in std_logic;
|
||||
signal CSn : in std_logic;
|
||||
signal RASn : in std_logic;
|
||||
signal CASn : in std_logic;
|
||||
signal WEn : in std_logic;
|
||||
signal LDM : in std_logic;
|
||||
signal UDM : in std_logic;
|
||||
signal BA : in std_logic_vector(1 downto 0);
|
||||
signal A : in std_logic_vector(12 downto 0);
|
||||
signal DQ : inout std_logic_vector(7 downto 0);
|
||||
signal LDQS : inout std_logic;
|
||||
signal UDQS : inout std_logic
|
||||
);
|
||||
end component;
|
||||
begin
|
||||
t : DDR_CTRL_V1
|
||||
port map
|
||||
TYPE bus_state_t IS (S0, S1, S2, S3); -- according to state machine description on p 17-14 of the MCF ref manual
|
||||
SIGNAL bus_state : bus_state_t := S0;
|
||||
|
||||
BEGIN
|
||||
t : DDR_CTRL
|
||||
PORT map
|
||||
(
|
||||
CLK_MAIN => clock,
|
||||
DDR_SYNC_66M => DDR_SYNC_66M,
|
||||
FB_ADR => FB_ADR,
|
||||
FB_CS1n => FB_CS1n,
|
||||
FB_OEn => FB_OEn,
|
||||
FB_CS1_n => fb_cs1_n,
|
||||
FB_OE_n => FB_OE_n,
|
||||
FB_SIZE0 => FB_SIZE0,
|
||||
FB_SIZE1 => FB_SIZE1,
|
||||
FB_ALE => FB_ALE,
|
||||
FB_WRn => FB_WRn,
|
||||
FB_WR_n => FB_WRn,
|
||||
FIFO_CLR => FIFO_CLR,
|
||||
VIDEO_RAM_CTR => VIDEO_RAM_CTR,
|
||||
video_control_register => VIDEO_RAM_CTR,
|
||||
BLITTER_ADR => BLITTER_ADR,
|
||||
BLITTER_SIG => BLITTER_SIG,
|
||||
BLITTER_WR => BLITTER_WR,
|
||||
DDRCLK0 => DDRCLK0,
|
||||
ddrclk0 => ddrclk0,
|
||||
CLK_33M => CLK_33M,
|
||||
FIFO_MW => FIFO_MW,
|
||||
VA => VA,
|
||||
VWEn => VWEn,
|
||||
VRASn => VRASn,
|
||||
VCSn => VCSn,
|
||||
VCKE => VCKE,
|
||||
VCASn => VCASn,
|
||||
va => va,
|
||||
vwe_n => vwe_n,
|
||||
vras_n => vras_n,
|
||||
vcs_n => vcs_n,
|
||||
vcke => vcke,
|
||||
vcas_n => vcas_n,
|
||||
FB_LE => FB_LE,
|
||||
FB_VDOE => FB_VDOE,
|
||||
SR_FIFO_WRE => SR_FIFO_WRE,
|
||||
SR_DDR_FB => SR_DDR_FB,
|
||||
SR_DDR_WR => SR_DDR_WR,
|
||||
SR_DDRWR_D_SEL => SR_DDRWR_D_SEL,
|
||||
SR_VDMP => SR_VDMP,
|
||||
sr_vdmp => sr_vdmp,
|
||||
VIDEO_DDR_TA => VIDEO_DDR_TA,
|
||||
SR_BLITTER_DACK => SR_BLITTER_DACK,
|
||||
BA => BA,
|
||||
ba => ba,
|
||||
DDRWR_D_SEL1 => DDRWR_D_SEL1,
|
||||
VDM_SEL => VDM_SEL,
|
||||
DATA_IN => DATA_IN,
|
||||
DATA_OUT => DATA_OUT,
|
||||
DATA_EN_H => DATA_EN_H,
|
||||
DATA_EN_L => DATA_EN_L
|
||||
data_en_h => data_en_h,
|
||||
data_en_l => data_en_l
|
||||
);
|
||||
|
||||
d : ddr_ram_model
|
||||
port map
|
||||
d1 : ddr2_ram_model
|
||||
PORT map
|
||||
(
|
||||
CK => DDRCLK0,
|
||||
CKE => VCKE,
|
||||
CSn => VCSn,
|
||||
RASn => VRASn,
|
||||
CASn => VCASn,
|
||||
WEn => VWEn,
|
||||
LDM => DATA_EN_L,
|
||||
UDM => DATA_EN_H,
|
||||
BA => BA,
|
||||
A => VA,
|
||||
DQ => SR_VDMP,
|
||||
LDQS => DATA_EN_L,
|
||||
UDQS => DATA_EN_H
|
||||
ck => ddrclk0,
|
||||
ck_n => NOT ddrclk0,
|
||||
cke => vcke,
|
||||
cs_n => vcs_n,
|
||||
ras_n => vras_n,
|
||||
cas_n => vcas_n,
|
||||
we_n => vwe_n,
|
||||
dm_rdqs(0) => data_en_l,
|
||||
dm_rdqs(1) => data_en_h,
|
||||
ba => ba,
|
||||
addr => va (25 DOWNTO 13),
|
||||
DQ => sr_vdmp,
|
||||
LDQS => data_en_l,
|
||||
UDQS => data_en_h
|
||||
);
|
||||
|
||||
stimulate_main_clock : process
|
||||
begin
|
||||
wait for 4.31 ns;
|
||||
clock <= not clock;
|
||||
end process;
|
||||
BEGIN
|
||||
WAIT FOR 4.31 ns;
|
||||
clock <= NOT clock;
|
||||
END process;
|
||||
|
||||
stimulate_33mHz_clock : process
|
||||
begin
|
||||
wait for 30.3 ns;
|
||||
CLK_33M <= not CLK_33M;
|
||||
end process;
|
||||
BEGIN
|
||||
WAIT FOR 30.3 ns;
|
||||
CLK_33M <= NOT CLK_33M;
|
||||
END process;
|
||||
|
||||
stimulate_66MHz_clock : process
|
||||
begin
|
||||
wait for 66.6 ns;
|
||||
DDR_SYNC_66M <= not DDR_SYNC_66M;
|
||||
DDRCLK0 <= DDR_SYNC_66M;
|
||||
end process;
|
||||
BEGIN
|
||||
WAIT FOR 66.6 ns;
|
||||
DDR_SYNC_66M <= NOT DDR_SYNC_66M;
|
||||
ddrclk0 <= DDR_SYNC_66M;
|
||||
END process;
|
||||
|
||||
stimulate : process
|
||||
variable adr : std_logic_vector(31 downto 0) := x"00000000";
|
||||
begin
|
||||
wait until rising_edge(clock) and clock = '1';
|
||||
case bus_state is
|
||||
when S0 =>
|
||||
VARIABLE adr : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"00000000";
|
||||
BEGIN
|
||||
WAIT UNTIL RISING_EDGE(clock);
|
||||
CASE bus_state IS
|
||||
WHEN S0 =>
|
||||
-- address phase
|
||||
FB_ADR <= adr;
|
||||
FB_ALE <= '1';
|
||||
FB_WRn <= '0';
|
||||
bus_state <= S1;
|
||||
when S1 =>
|
||||
WHEN S1 =>
|
||||
-- data phase
|
||||
FB_ALE <= '0';
|
||||
FB_CS1n <= '0';
|
||||
FB_ADR <= x"47114711";
|
||||
if (VIDEO_DDR_TA = '1') then
|
||||
bus_state <= S2;
|
||||
end if;
|
||||
when S2 =>
|
||||
END if;
|
||||
WHEN S2 =>
|
||||
FB_CS1n <= '0';
|
||||
bus_state <= S3;
|
||||
when S3 =>
|
||||
FB_ADR <= std_logic_vector(unsigned(FB_ADR) + 4);
|
||||
WHEN S3 =>
|
||||
FB_ADR <= STD_LOGIC_VECTOR(UNSIGNED(FB_ADR) + 4);
|
||||
bus_state <= S0;
|
||||
FB_WRn <= 'Z';
|
||||
when others =>
|
||||
report("bus_state: ");
|
||||
end case;
|
||||
end process;
|
||||
end beh;
|
||||
WHEN others =>
|
||||
REPORT("bus_state: ");
|
||||
END CASE;
|
||||
END process;
|
||||
END beh;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user