fifo_mw never got a value assigned - fixed for testbench, but still open for toplevel
This commit is contained in:
@@ -680,7 +680,6 @@ set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SYNC_n
|
|||||||
set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to CLK_DDR_OUT_n
|
set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to CLK_DDR_OUT_n
|
||||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to CLK_DDR_OUT_n
|
set_instance_assignment -name IO_STANDARD "2.5 V" -to CLK_DDR_OUT_n
|
||||||
set_instance_assignment -name GLOBAL_SIGNAL "GLOBAL CLOCK" -to CLK_DDR_OUT_n
|
set_instance_assignment -name GLOBAL_SIGNAL "GLOBAL CLOCK" -to CLK_DDR_OUT_n
|
||||||
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
|
||||||
set_location_assignment PIN_F21 -to IRQ_n[2]
|
set_location_assignment PIN_F21 -to IRQ_n[2]
|
||||||
set_location_assignment PIN_H20 -to IRQ_n[3]
|
set_location_assignment PIN_H20 -to IRQ_n[3]
|
||||||
set_location_assignment PIN_F20 -to IRQ_n[4]
|
set_location_assignment PIN_F20 -to IRQ_n[4]
|
||||||
@@ -689,4 +688,5 @@ set_location_assignment PIN_P7 -to IRQ_n[6]
|
|||||||
set_location_assignment PIN_N7 -to IRQ_n[7]
|
set_location_assignment PIN_N7 -to IRQ_n[7]
|
||||||
set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[2]
|
set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[2]
|
||||||
set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[3]
|
set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[3]
|
||||||
set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[4]
|
set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to IRQ_n[4]
|
||||||
|
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
||||||
@@ -65,7 +65,7 @@ ENTITY DDR_CTRL IS
|
|||||||
|
|
||||||
ddrclk0 : IN STD_LOGIC;
|
ddrclk0 : IN STD_LOGIC;
|
||||||
clk_33m : IN STD_LOGIC;
|
clk_33m : IN STD_LOGIC;
|
||||||
fifo_mw : IN STD_LOGIC_VECTOR (8 DOWNTO 0);
|
fifo_mw : IN UNSIGNED (8 DOWNTO 0);
|
||||||
|
|
||||||
va : OUT STD_LOGIC_VECTOR (12 DOWNTO 0); -- video Adress bus at the DDR chips
|
va : OUT STD_LOGIC_VECTOR (12 DOWNTO 0); -- video Adress bus at the DDR chips
|
||||||
vwe_n : OUT STD_LOGIC; -- video memory write enable
|
vwe_n : OUT STD_LOGIC; -- video memory write enable
|
||||||
@@ -96,19 +96,19 @@ ENTITY DDR_CTRL IS
|
|||||||
END ENTITY DDR_CTRL;
|
END ENTITY DDR_CTRL;
|
||||||
|
|
||||||
ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
|
ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
|
||||||
-- ddr_access_fifo WATER MARK:
|
-- fifo watermark:
|
||||||
CONSTANT fifo_lwm : INTEGER := 0; -- low water mark
|
CONSTANT FIFO_LWM : INTEGER := 0; -- low water mark
|
||||||
CONSTANT fifo_mwM : INTEGER := 200; -- medium water mark
|
CONSTANT FIFO_MWM : INTEGER := 200; -- medium water mark
|
||||||
CONSTANT fifo_hwm : INTEGER := 500; -- high water mark
|
CONSTANT FIFO_HWM : INTEGER := 500; -- high water mark
|
||||||
|
|
||||||
-- constants for bits in video_control_register
|
-- constants for bits in video_control_register
|
||||||
CONSTANT vrcr_vcke : INTEGER := 0;
|
CONSTANT VRCR_VCKE : INTEGER := 0;
|
||||||
CONSTANT vrcr_refresh_on : INTEGER := 2;
|
CONSTANT VRCR_REFRESH_ON : INTEGER := 2;
|
||||||
CONSTANT vrcr_config_on : INTEGER := 3;
|
CONSTANT VRCR_CONFIG_ON : INTEGER := 3;
|
||||||
CONSTANT vrcr_vcs : INTEGER := 1;
|
CONSTANT VRCR_VCS : INTEGER := 1;
|
||||||
--
|
--
|
||||||
CONSTANT vrcr_fifo_on : INTEGER := 24;
|
CONSTANT VRCR_FIFO_ON : INTEGER := 24;
|
||||||
CONSTANT vrcr_border_on : INTEGER := 25;
|
CONSTANT VRCR_BORDER_ON : INTEGER := 25;
|
||||||
|
|
||||||
TYPE access_width_t IS (long_access, word_access, byte_access);
|
TYPE access_width_t IS (long_access, word_access, byte_access);
|
||||||
TYPE ddr_access_t IS (ddr_access_cpu, ddr_access_fifo, ddr_access_blitter, ddr_access_none);
|
TYPE ddr_access_t IS (ddr_access_cpu, ddr_access_fifo, ddr_access_blitter, ddr_access_none);
|
||||||
@@ -160,7 +160,7 @@ ARCHITECTURE BEHAVIOUR of DDR_CTRL IS
|
|||||||
SIGNAL ddr_refresh_cnt : UNSIGNED(10 DOWNTO 0) := "00000000000";
|
SIGNAL ddr_refresh_cnt : UNSIGNED(10 DOWNTO 0) := "00000000000";
|
||||||
SIGNAL ddr_refresh_req : STD_LOGIC;
|
SIGNAL ddr_refresh_req : STD_LOGIC;
|
||||||
SIGNAL ddr_refresh_sig : UNSIGNED(3 DOWNTO 0);
|
SIGNAL ddr_refresh_sig : UNSIGNED(3 DOWNTO 0);
|
||||||
SIGNAL refresh_time : STD_LOGIC;
|
SIGNAL need_refresh : STD_LOGIC;
|
||||||
SIGNAL video_base_l_d : STD_LOGIC_VECTOR (7 DOWNTO 0);
|
SIGNAL video_base_l_d : STD_LOGIC_VECTOR (7 DOWNTO 0);
|
||||||
SIGNAL video_base_l : STD_LOGIC;
|
SIGNAL video_base_l : STD_LOGIC;
|
||||||
SIGNAL video_base_m_d : STD_LOGIC_VECTOR (7 DOWNTO 0);
|
SIGNAL video_base_m_d : STD_LOGIC_VECTOR (7 DOWNTO 0);
|
||||||
@@ -372,7 +372,7 @@ BEGIN
|
|||||||
ddr_next_state <= ds_t7f;
|
ddr_next_state <= ds_t7f;
|
||||||
|
|
||||||
WHEN ds_t7f =>
|
WHEN ds_t7f =>
|
||||||
IF cpu_req = '1' AND fifo_mw > STD_LOGIC_VECTOR (TO_UNSIGNED(fifo_lwm, fifo_mw'LENGTH)) THEN
|
IF cpu_req = '1' AND fifo_mw > FIFO_LWM THEN
|
||||||
ddr_next_state <= ds_cb8; -- Close bank.
|
ddr_next_state <= ds_cb8; -- Close bank.
|
||||||
ELSIF fifo_req = '1' AND video_adr_cnt(7 DOWNTO 0) = x"FF" THEN -- New page?
|
ELSIF fifo_req = '1' AND video_adr_cnt(7 DOWNTO 0) = x"FF" THEN -- New page?
|
||||||
ddr_next_state <= ds_cb8; -- Close bank.
|
ddr_next_state <= ds_cb8; -- Close bank.
|
||||||
@@ -383,7 +383,7 @@ BEGIN
|
|||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
WHEN ds_t8f =>
|
WHEN ds_t8f =>
|
||||||
IF fifo_mw < STD_LOGIC_VECTOR (TO_UNSIGNED(fifo_lwm, fifo_mw'LENGTH)) THEN -- Emergency?
|
IF fifo_mw < FIFO_LWM THEN -- Emergency?
|
||||||
ddr_next_state <= ds_t5f; -- Yes!
|
ddr_next_state <= ds_t5f; -- Yes!
|
||||||
ELSE
|
ELSE
|
||||||
ddr_next_state <= ds_t9f;
|
ddr_next_state <= ds_t9f;
|
||||||
@@ -484,24 +484,24 @@ BEGIN
|
|||||||
mcs <= mcs(0) & clk_33m; -- sync on clk_33m
|
mcs <= mcs(0) & clk_33m; -- sync on clk_33m
|
||||||
|
|
||||||
blitter_req <= blitter_sig AND NOT
|
blitter_req <= blitter_sig AND NOT
|
||||||
video_control_register(vrcr_config_on) AND
|
video_control_register(VRCR_CONFIG_ON) AND
|
||||||
video_control_register(vrcr_vcke) AND
|
video_control_register(VRCR_VCKE) AND
|
||||||
video_control_register(vrcr_vcs);
|
video_control_register(VRCR_VCS);
|
||||||
|
|
||||||
fifo_clr_sync <= fifo_clr;
|
fifo_clr_sync <= fifo_clr;
|
||||||
clear_fifo_cnt <= fifo_clr_sync OR NOT fifo_active;
|
clear_fifo_cnt <= fifo_clr_sync OR NOT fifo_active;
|
||||||
stop <= fifo_clr_sync OR clear_fifo_cnt;
|
stop <= fifo_clr_sync OR clear_fifo_cnt;
|
||||||
|
|
||||||
IF fifo_mw < STD_LOGIC_VECTOR (TO_UNSIGNED(fifo_mwm, fifo_mw'LENGTH)) THEN
|
IF fifo_mw < fifo_mwm THEN
|
||||||
fifo_req <= '1';
|
fifo_req <= '1';
|
||||||
ELSIF fifo_mw < STD_LOGIC_VECTOR (TO_UNSIGNED(fifo_hwm, fifo_mw'LENGTH)) AND fifo_req = '1' THEN
|
ELSIF fifo_mw < FIFO_HWM AND fifo_req = '1' THEN
|
||||||
fifo_req <= '1';
|
fifo_req <= '1';
|
||||||
ELSIF fifo_active = '1' AND
|
ELSIF fifo_active = '1' AND
|
||||||
clear_fifo_cnt = '0' AND
|
clear_fifo_cnt = '0' AND
|
||||||
stop = '0' AND
|
stop = '0' AND
|
||||||
ddr_config = '0' AND
|
ddr_config = '0' AND
|
||||||
video_control_register(vrcr_vcke) = '1' AND
|
video_control_register(VRCR_VCKE) = '1' AND
|
||||||
video_control_register(vrcr_vcs) = '1' THEN
|
video_control_register(VRCR_VCS) = '1' THEN
|
||||||
fifo_req <= '1';
|
fifo_req <= '1';
|
||||||
ELSE
|
ELSE
|
||||||
fifo_req <= '1';
|
fifo_req <= '1';
|
||||||
@@ -513,27 +513,27 @@ BEGIN
|
|||||||
video_adr_cnt <= video_adr_cnt + 1;
|
video_adr_cnt <= video_adr_cnt + 1;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF mcs = "10" AND video_control_register(vrcr_vcke) = '1' AND video_control_register(vrcr_vcs) = '1' THEN
|
IF mcs = "10" AND video_control_register(VRCR_VCKE) = '1' AND video_control_register(VRCR_VCS) = '1' THEN
|
||||||
cpu_ddr_sync <= '1';
|
cpu_ddr_sync <= '1';
|
||||||
ELSE
|
ELSE
|
||||||
cpu_ddr_sync <= '0';
|
cpu_ddr_sync <= '0';
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF ddr_refresh_sig /= x"0" AND video_control_register(vrcr_refresh_on) = '1' AND ddr_config = '0' AND refresh_time = '1' THEN
|
IF ddr_refresh_sig /= x"0" AND video_control_register(VRCR_REFRESH_ON) = '1' AND ddr_config = '0' AND need_refresh = '1' THEN
|
||||||
ddr_refresh_req <= '1';
|
ddr_refresh_req <= '1';
|
||||||
ELSE
|
ELSE
|
||||||
ddr_refresh_req <= '0';
|
ddr_refresh_req <= '0';
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF ddr_refresh_cnt = 0 AND clk_33m = '0' THEN
|
IF ddr_refresh_cnt = 0 AND clk_33m = '0' THEN
|
||||||
refresh_time <= '1';
|
need_refresh <= '1';
|
||||||
ELSE
|
ELSE
|
||||||
refresh_time <= '0';
|
need_refresh <= '0';
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF refresh_time = '1' AND video_control_register(vrcr_refresh_on) = '1' AND ddr_config = '0' THEN
|
IF need_refresh = '1' AND video_control_register(VRCR_REFRESH_ON) = '1' AND ddr_config = '0' THEN
|
||||||
ddr_refresh_sig <= x"9";
|
ddr_refresh_sig <= x"9";
|
||||||
ELSIF ddr_state = ds_r6 AND video_control_register(vrcr_refresh_on) = '1' AND ddr_config = '0' THEN
|
ELSIF ddr_state = ds_r6 AND video_control_register(VRCR_REFRESH_ON) = '1' AND ddr_config = '0' THEN
|
||||||
ddr_refresh_sig <= ddr_refresh_sig - 1;
|
ddr_refresh_sig <= ddr_refresh_sig - 1;
|
||||||
ELSE
|
ELSE
|
||||||
ddr_refresh_sig <= x"0";
|
ddr_refresh_sig <= x"0";
|
||||||
@@ -662,7 +662,7 @@ BEGIN
|
|||||||
va_s(10) <= '0';
|
va_s(10) <= '0';
|
||||||
ELSIF ddr_state = ds_t6f THEN
|
ELSIF ddr_state = ds_t6f THEN
|
||||||
sr_fifo_wre_i <= '1';
|
sr_fifo_wre_i <= '1';
|
||||||
ELSIF ddr_state = ds_t7f AND cpu_req = '1' AND fifo_mw > STD_LOGIC_VECTOR (TO_UNSIGNED(fifo_lwm, fifo_mw'LENGTH)) THEN
|
ELSIF ddr_state = ds_t7f AND cpu_req = '1' AND fifo_mw > FIFO_LWM THEN
|
||||||
va_s(10) <= '1';
|
va_s(10) <= '1';
|
||||||
ELSIF ddr_state = ds_t7f AND fifo_req = '1' AND video_adr_cnt(7 DOWNTO 0) = x"FF" THEN
|
ELSIF ddr_state = ds_t7f AND fifo_req = '1' AND video_adr_cnt(7 DOWNTO 0) = x"FF" THEN
|
||||||
va_s(10) <= '1';
|
va_s(10) <= '1';
|
||||||
@@ -717,13 +717,13 @@ BEGIN
|
|||||||
|
|
||||||
IF ddr_sel = '1' AND fb_wr_n = '1' AND ddr_config = '0' THEN
|
IF ddr_sel = '1' AND fb_wr_n = '1' AND ddr_config = '0' THEN
|
||||||
cpu_req <= '1';
|
cpu_req <= '1';
|
||||||
ELSIF ddr_sel = '1' AND access_width /= long_access AND ddr_config = '0' THEN -- Start WHEN NOT config AND NOT long_access word_access access.
|
ELSIF ddr_sel = '1' AND access_width /= long_access AND ddr_config = '0' THEN -- Start when not config and not longword access.
|
||||||
cpu_req <= '1';
|
cpu_req <= '1';
|
||||||
ELSIF ddr_sel = '1' AND ddr_config = '1' THEN -- Config, start immediately.
|
ELSIF ddr_sel = '1' AND ddr_config = '1' THEN -- Config, start immediately.
|
||||||
cpu_req <= '1';
|
cpu_req <= '1';
|
||||||
ELSIF fb_regddr = fr_s1 AND fb_wr_n = '0' THEN -- Long word_access write later.
|
ELSIF fb_regddr = fr_s1 AND fb_wr_n = '0' THEN -- Longword write later.
|
||||||
cpu_req <= '1';
|
cpu_req <= '1';
|
||||||
ELSIF fb_regddr /= fr_s1 AND fb_regddr /= fr_s3 AND bus_cyc_end = '0' AND bus_cyc = '0' THEN -- Halt, bus cycle IN progress OR ready.
|
ELSIF fb_regddr /= fr_s1 AND fb_regddr /= fr_s3 AND bus_cyc_end = '0' AND bus_cyc = '0' THEN -- Halt, bus cycle in progress or ready.
|
||||||
cpu_req <= '0';
|
cpu_req <= '0';
|
||||||
END IF;
|
END IF;
|
||||||
END PROCESS p_cpu_req;
|
END PROCESS p_cpu_req;
|
||||||
@@ -784,7 +784,7 @@ BEGIN
|
|||||||
-- VIDEO RAM CONTROL REGISTER (IS IN VIDEO_MUX_CTR)
|
-- VIDEO RAM CONTROL REGISTER (IS IN VIDEO_MUX_CTR)
|
||||||
-- $F0000400: BIT 0: vcke; 1: NOT nVCS ;2:REFRESH ON , (0=ddr_access_fifo AND CNT CLEAR);
|
-- $F0000400: BIT 0: vcke; 1: NOT nVCS ;2:REFRESH ON , (0=ddr_access_fifo AND CNT CLEAR);
|
||||||
-- 3: CONFIG; 8: fifo_active;
|
-- 3: CONFIG; 8: fifo_active;
|
||||||
vcs_n <= NOT(video_control_register(vrcr_refresh_on));
|
vcs_n <= NOT(video_control_register(VRCR_REFRESH_ON));
|
||||||
ddr_config <= video_control_register(3);
|
ddr_config <= video_control_register(3);
|
||||||
fifo_active <= video_control_register(8);
|
fifo_active <= video_control_register(8);
|
||||||
|
|
||||||
@@ -814,7 +814,7 @@ BEGIN
|
|||||||
vdm_sel_i <= video_base_l_d(3 DOWNTO 0);
|
vdm_sel_i <= video_base_l_d(3 DOWNTO 0);
|
||||||
|
|
||||||
-- Current video address:
|
-- Current video address:
|
||||||
video_act_adr(26 DOWNTO 4) <= STD_LOGIC_VECTOR (video_adr_cnt - UNSIGNED(fifo_mw));
|
video_act_adr(26 DOWNTO 4) <= STD_LOGIC_VECTOR (video_adr_cnt - fifo_mw);
|
||||||
video_act_adr(3 DOWNTO 0) <= vdm_sel_i;
|
video_act_adr(3 DOWNTO 0) <= vdm_sel_i;
|
||||||
|
|
||||||
p_video_regs : PROCESS
|
p_video_regs : PROCESS
|
||||||
|
|||||||
@@ -407,7 +407,7 @@ ARCHITECTURE Structure of firebee is
|
|||||||
SIGNAL fdc_cs_n : STD_LOGIC;
|
SIGNAL fdc_cs_n : STD_LOGIC;
|
||||||
SIGNAL fdc_wr_n : STD_LOGIC;
|
SIGNAL fdc_wr_n : STD_LOGIC;
|
||||||
SIGNAL fifo_clr : STD_LOGIC;
|
SIGNAL fifo_clr : STD_LOGIC;
|
||||||
SIGNAL fifo_mw : STD_LOGIC_VECTOR (8 DOWNTO 0);
|
SIGNAL fifo_mw : UNSIGNED (8 DOWNTO 0);
|
||||||
SIGNAL hd_dd_out : STD_LOGIC;
|
SIGNAL hd_dd_out : STD_LOGIC;
|
||||||
SIGNAL hsync_i : STD_LOGIC;
|
SIGNAL hsync_i : STD_LOGIC;
|
||||||
SIGNAL ide_cf_ta : STD_LOGIC;
|
SIGNAL ide_cf_ta : STD_LOGIC;
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
-- Initial Release of the second edition.
|
-- Initial Release of the second edition.
|
||||||
LIBRARY IEEE;
|
LIBRARY IEEE;
|
||||||
USE IEEE.std_logic_1164.ALL;
|
USE IEEE.std_logic_1164.ALL;
|
||||||
|
USE IEEE.numeric_std.ALL;
|
||||||
|
|
||||||
PACKAGE firebee_pkg IS
|
PACKAGE firebee_pkg IS
|
||||||
COMPONENT VIDEO_SYSTEM
|
COMPONENT VIDEO_SYSTEM
|
||||||
@@ -91,7 +92,7 @@ PACKAGE firebee_pkg IS
|
|||||||
VD_VZ : OUT STD_LOGIC_VECTOR(127 DOWNTO 0);
|
VD_VZ : OUT STD_LOGIC_VECTOR(127 DOWNTO 0);
|
||||||
SR_FIFO_WRE : IN STD_LOGIC;
|
SR_FIFO_WRE : IN STD_LOGIC;
|
||||||
SR_VDMP : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
|
SR_VDMP : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||||
FIFO_MW : OUT STD_LOGIC_VECTOR(8 DOWNTO 0);
|
FIFO_MW : OUT UNSIGNED (8 DOWNTO 0);
|
||||||
VDM_SEL : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
|
VDM_SEL : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
|
||||||
VIDEO_RAM_CTR : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
|
VIDEO_RAM_CTR : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
|
||||||
FIFO_CLR : OUT STD_LOGIC;
|
FIFO_CLR : OUT STD_LOGIC;
|
||||||
@@ -173,7 +174,7 @@ PACKAGE firebee_pkg IS
|
|||||||
BLITTER_WR : IN STD_LOGIC;
|
BLITTER_WR : IN STD_LOGIC;
|
||||||
DDRCLK0 : IN STD_LOGIC;
|
DDRCLK0 : IN STD_LOGIC;
|
||||||
CLK_33M : IN STD_LOGIC;
|
CLK_33M : IN STD_LOGIC;
|
||||||
FIFO_MW : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
|
FIFO_MW : IN UNSIGNED (8 DOWNTO 0);
|
||||||
VA : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
|
VA : OUT STD_LOGIC_VECTOR(12 DOWNTO 0);
|
||||||
vwe_n : OUT STD_LOGIC;
|
vwe_n : OUT STD_LOGIC;
|
||||||
vras_n : OUT STD_LOGIC;
|
vras_n : OUT STD_LOGIC;
|
||||||
|
|||||||
@@ -306,7 +306,7 @@ begin
|
|||||||
when "010" => PRESCALE := x"09"; -- Prescaler = 10.
|
when "010" => PRESCALE := x"09"; -- Prescaler = 10.
|
||||||
when "001" => PRESCALE := x"03"; -- Prescaler = 4.
|
when "001" => PRESCALE := x"03"; -- Prescaler = 4.
|
||||||
when "000" => PRESCALE := x"00"; -- Timer stopped or event count mode.
|
when "000" => PRESCALE := x"00"; -- Timer stopped or event count mode.
|
||||||
when others => PRESCALE := x"00";
|
when others => NULL;
|
||||||
end case;
|
end case;
|
||||||
A_CNTSTRB <= '1';
|
A_CNTSTRB <= '1';
|
||||||
end if;
|
end if;
|
||||||
@@ -330,7 +330,7 @@ begin
|
|||||||
when "010" => PRESCALE := x"09"; -- Prescaler = 10.
|
when "010" => PRESCALE := x"09"; -- Prescaler = 10.
|
||||||
when "001" => PRESCALE := x"03"; -- Prescaler = 4.
|
when "001" => PRESCALE := x"03"; -- Prescaler = 4.
|
||||||
when "000" => PRESCALE := x"00"; -- Timer stopped or event count mode.
|
when "000" => PRESCALE := x"00"; -- Timer stopped or event count mode.
|
||||||
when others => PRESCALE := x"00";
|
when others => NULL;
|
||||||
end case;
|
end case;
|
||||||
B_CNTSTRB <= '1';
|
B_CNTSTRB <= '1';
|
||||||
end if;
|
end if;
|
||||||
@@ -354,7 +354,7 @@ begin
|
|||||||
when "010" => PRESCALE := x"09"; -- Prescaler = 10.
|
when "010" => PRESCALE := x"09"; -- Prescaler = 10.
|
||||||
when "001" => PRESCALE := x"03"; -- Prescaler = 4.
|
when "001" => PRESCALE := x"03"; -- Prescaler = 4.
|
||||||
when "000" => PRESCALE := x"00"; -- Timer stopped.
|
when "000" => PRESCALE := x"00"; -- Timer stopped.
|
||||||
when others => PRESCALE := x"00";
|
when others => NULL;
|
||||||
end case;
|
end case;
|
||||||
C_CNTSTRB <= '1';
|
C_CNTSTRB <= '1';
|
||||||
end if;
|
end if;
|
||||||
@@ -378,7 +378,7 @@ begin
|
|||||||
when "010" => PRESCALE := x"09"; -- Prescaler = 10.
|
when "010" => PRESCALE := x"09"; -- Prescaler = 10.
|
||||||
when "001" => PRESCALE := x"03"; -- Prescaler = 4.
|
when "001" => PRESCALE := x"03"; -- Prescaler = 4.
|
||||||
when "000" => PRESCALE := x"00"; -- Timer stopped.
|
when "000" => PRESCALE := x"00"; -- Timer stopped.
|
||||||
when others => PRESCALE := x"00";
|
when others => NULL;
|
||||||
end case;
|
end case;
|
||||||
D_CNTSTRB <= '1';
|
D_CNTSTRB <= '1';
|
||||||
end if;
|
end if;
|
||||||
@@ -424,7 +424,7 @@ begin
|
|||||||
TAO_I <= not TAO_I; -- Toggle the timer A output pin.
|
TAO_I <= not TAO_I; -- Toggle the timer A output pin.
|
||||||
TIMER_A_INT <= '1';
|
TIMER_A_INT <= '1';
|
||||||
end if;
|
end if;
|
||||||
when others => TAO_I <= '0';
|
when others => NULL;
|
||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
@@ -470,7 +470,7 @@ begin
|
|||||||
TBO_I <= not TBO_I; -- Toggle the timer B output pin.
|
TBO_I <= not TBO_I; -- Toggle the timer B output pin.
|
||||||
TIMER_B_INT <= '1';
|
TIMER_B_INT <= '1';
|
||||||
end if;
|
end if;
|
||||||
when others => TBO_I <= '0';
|
when others => NULL;
|
||||||
end case;
|
end case;
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
|
|||||||
@@ -674,7 +674,7 @@ BEGIN
|
|||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
WHEN "0" & cmd_type_encoding(REFRESH) & cmd_type_encoding(PWR_DOWN) =>
|
WHEN "0" & cmd_type_encoding(REFRESH) & cmd_type_encoding(PWR_DOWN) =>
|
||||||
-- 1 tCK_avg
|
NULL; -- 1 tCK_avg
|
||||||
|
|
||||||
WHEN "0" & cmd_type_encoding(REFRESH) & cmd_type_encoding(SELF_REF) =>
|
WHEN "0" & cmd_type_encoding(REFRESH) & cmd_type_encoding(SELF_REF) =>
|
||||||
IF NOW - tm_refresh < TRFC_MIN THEN
|
IF NOW - tm_refresh < TRFC_MIN THEN
|
||||||
@@ -745,10 +745,10 @@ BEGIN
|
|||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
WHEN "1" & cmd_type_encoding(ACTIVATE) & "010-" =>
|
WHEN "1" & cmd_type_encoding(ACTIVATE) & "010-" =>
|
||||||
-- tRCD is checked outside this task
|
NULL; -- tRCD is checked outside this task
|
||||||
|
|
||||||
WHEN "1" & cmd_type_encoding(ACTIVATE) & cmd_type_encoding(PWR_DOWN) =>
|
WHEN "1" & cmd_type_encoding(ACTIVATE) & cmd_type_encoding(PWR_DOWN) =>
|
||||||
-- 1 tCK
|
NULL; -- 1 tCK
|
||||||
|
|
||||||
WHEN "1" & cmd_type_encoding(WRITE_CMD) & cmd_type_encoding(PRECHARGE) =>
|
WHEN "1" & cmd_type_encoding(WRITE_CMD) & cmd_type_encoding(PRECHARGE) =>
|
||||||
IF ck_cntr - ck_bank_write(TO_INTEGER(UNSIGNED(bank)))
|
IF ck_cntr - ck_bank_write(TO_INTEGER(UNSIGNED(bank)))
|
||||||
@@ -773,7 +773,8 @@ BEGIN
|
|||||||
WHEN "0" & cmd_type_encoding(WRITE_CMD) & cmd_type_encoding(PWR_DOWN) =>
|
WHEN "0" & cmd_type_encoding(WRITE_CMD) & cmd_type_encoding(PWR_DOWN) =>
|
||||||
|
|
||||||
|
|
||||||
WHEN OTHERS => -- do nothing
|
WHEN OTHERS =>
|
||||||
|
NULL; -- do nothing
|
||||||
|
|
||||||
END CASE?;
|
END CASE?;
|
||||||
END;
|
END;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ ARCHITECTURE beh OF ddr_ctlr_tb IS
|
|||||||
SIGNAL blitter_wr : STD_LOGIC;
|
SIGNAL blitter_wr : STD_LOGIC;
|
||||||
SIGNAL ddrclk0 : STD_LOGIC;
|
SIGNAL ddrclk0 : STD_LOGIC;
|
||||||
SIGNAL clk_33m : STD_LOGIC := '0';
|
SIGNAL clk_33m : STD_LOGIC := '0';
|
||||||
SIGNAL fifo_mw : STD_LOGIC_VECTOR(8 DOWNTO 0);
|
SIGNAL fifo_mw : UNSIGNED (8 DOWNTO 0) := TO_UNSIGNED(300, 9);
|
||||||
SIGNAL va : STD_LOGIC_VECTOR(12 DOWNTO 0);
|
SIGNAL va : STD_LOGIC_VECTOR(12 DOWNTO 0);
|
||||||
SIGNAL vwe_n : STD_LOGIC;
|
SIGNAL vwe_n : STD_LOGIC;
|
||||||
SIGNAL vras_n : STD_LOGIC;
|
SIGNAL vras_n : STD_LOGIC;
|
||||||
@@ -60,7 +60,7 @@ ARCHITECTURE beh OF ddr_ctlr_tb IS
|
|||||||
SIGNAL bus_state : bus_state_t := S0;
|
SIGNAL bus_state : bus_state_t := S0;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
t : DDR_CTRL
|
i_ddr_ctrl : DDR_CTRL
|
||||||
PORT map
|
PORT map
|
||||||
(
|
(
|
||||||
clk_main => clock,
|
clk_main => clock,
|
||||||
@@ -104,7 +104,39 @@ BEGIN
|
|||||||
data_en_l => data_en_l
|
data_en_l => data_en_l
|
||||||
);
|
);
|
||||||
|
|
||||||
d1 : ddr2_ram_model
|
i_ddr2_ram_1 : ddr2_ram_model
|
||||||
|
GENERIC MAP
|
||||||
|
(
|
||||||
|
VERBOSE => TRUE, -- define if you want additional debug output
|
||||||
|
|
||||||
|
CLOCK_TICK => (1000000 / 132000) * 1 ps, -- time for one clock tick
|
||||||
|
|
||||||
|
BA_BITS => 2, -- number of banks
|
||||||
|
ADDR_BITS => 13, -- number of address bits
|
||||||
|
DM_BITS => 2, -- number of data mask bits
|
||||||
|
DQ_BITS => 8, -- number of data bits
|
||||||
|
DQS_BITS => 2 -- number of data strobes
|
||||||
|
)
|
||||||
|
PORT map
|
||||||
|
(
|
||||||
|
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,
|
||||||
|
dq => sr_vdmp,
|
||||||
|
dqs(0) => data_en_l,
|
||||||
|
dqs(1) => data_en_h,
|
||||||
|
odt => '0'
|
||||||
|
);
|
||||||
|
|
||||||
|
i_ddr2_ram_2 : ddr2_ram_model
|
||||||
GENERIC MAP
|
GENERIC MAP
|
||||||
(
|
(
|
||||||
VERBOSE => TRUE, -- define if you want additional debug output
|
VERBOSE => TRUE, -- define if you want additional debug output
|
||||||
|
|||||||
Reference in New Issue
Block a user