Skip to content
Snippets Groups Projects
Commit 2467ad67 authored by Job van Wee's avatar Job van Wee
Browse files

pause

parent 0bb1c6f5
No related branches found
No related tags found
1 merge request!232Resolve L2SDP-667
...@@ -9,6 +9,7 @@ synth_files = ...@@ -9,6 +9,7 @@ synth_files =
src/vhdl/ddrctrl_input_pack.vhd src/vhdl/ddrctrl_input_pack.vhd
src/vhdl/ddrctrl_input_repack.vhd src/vhdl/ddrctrl_input_repack.vhd
src/vhdl/ddrctrl_input.vhd src/vhdl/ddrctrl_input.vhd
src/vhdl/ddrctrl_controller.vhd
src/vhdl/ddrctrl.vhd src/vhdl/ddrctrl.vhd
test_bench_files = test_bench_files =
......
...@@ -59,8 +59,7 @@ ENTITY ddrctrl IS ...@@ -59,8 +59,7 @@ ENTITY ddrctrl IS
mm_rst : IN STD_LOGIC := '0'; mm_rst : IN STD_LOGIC := '0';
in_sosi_arr : IN t_dp_sosi_arr; -- input data in_sosi_arr : IN t_dp_sosi_arr; -- input data
wr_not_rd : IN STD_LOGIC := '0'; wr_not_rd : IN STD_LOGIC := '0';
out_of : OUT NATURAL; -- amount of internal overflow this output stop_in : IN STD_LOGIC := '0';
out_adr : OUT NATURAL;
term_ctrl_out : OUT t_tech_ddr3_phy_terminationcontrol; term_ctrl_out : OUT t_tech_ddr3_phy_terminationcontrol;
...@@ -87,12 +86,14 @@ ARCHITECTURE str OF ddrctrl IS ...@@ -87,12 +86,14 @@ ARCHITECTURE str OF ddrctrl IS
CONSTANT c_rd_fifo_depth : NATURAL := 256; -- defined at DDR side of the FIFO, >=16 AND > max number of rd burst sizes (so > c_rd_fifo_af_margin), default >= 256 because 32b*256 fits in 1 M9K so c_ctlr_data_w=256b will require 8 M9K CONSTANT c_rd_fifo_depth : NATURAL := 256; -- defined at DDR side of the FIFO, >=16 AND > max number of rd burst sizes (so > c_rd_fifo_af_margin), default >= 256 because 32b*256 fits in 1 M9K so c_ctlr_data_w=256b will require 8 M9K
-- signals for connecting the components -- signals for connecting the components
SIGNAL adr : NATURAL := 0;
SIGNAL ctrl_clk : STD_LOGIC; SIGNAL ctrl_clk : STD_LOGIC;
SIGNAL ctrl_rst : STD_LOGIC; SIGNAL ctrl_rst : STD_LOGIC;
SIGNAL out_of : NATURAL := 0;
SIGNAL out_sosi : t_dp_sosi := c_dp_sosi_init;
SIGNAL out_adr : NATURAL := 0;
SIGNAL dvr_mosi : t_mem_ctlr_mosi := c_mem_ctlr_mosi_rst;
SIGNAL wr_sosi : t_dp_sosi := c_dp_sosi_init; SIGNAL wr_sosi : t_dp_sosi := c_dp_sosi_init;
SIGNAL rd_siso : t_dp_siso := c_dp_siso_rst; SIGNAL rd_siso : t_dp_siso := c_dp_siso_rst;
SIGNAL dvr_mosi : t_mem_ctlr_mosi;
BEGIN BEGIN
...@@ -111,8 +112,8 @@ BEGIN ...@@ -111,8 +112,8 @@ BEGIN
rst => rst, rst => rst,
in_sosi_arr => in_sosi_arr, in_sosi_arr => in_sosi_arr,
out_of => out_of, out_of => out_of,
out_sosi => wr_sosi, out_sosi => out_sosi,
out_adr => adr out_adr => out_adr
); );
-- functions as a fifo buffer for input data into the sdram stick. also manages input to sdram stick. -- functions as a fifo buffer for input data into the sdram stick. also manages input to sdram stick.
...@@ -189,4 +190,24 @@ BEGIN ...@@ -189,4 +190,24 @@ BEGIN
phy4_ou => phy4_ou phy4_ou => phy4_ou
); );
-- controller of ddrctrl
u_ddrctrl_controller : ENTITY work.ddrctrl_controller
GENERIC MAP(
g_tech_ddr => g_tech_ddr
)
PORT MAP(
clk => clk,
rst => rst,
out_of => out_of,
out_sosi => out_sosi,
out_adr => out_adr,
dvr_mosi => dvr_mosi,
wr_sosi => wr_sosi,
rd_siso => rd_siso,
stop_in => stop_in
);
END str; END str;
...@@ -27,15 +27,18 @@ ...@@ -27,15 +27,18 @@
-- https://support.astron.nl/confluence/display/SBe/VHDL+design+patterns+for+RTL+coding -- https://support.astron.nl/confluence/display/SBe/VHDL+design+patterns+for+RTL+coding
-- --
LIBRARY IEEE, dp_lib; LIBRARY IEEE, dp_lib, common_lib, tech_ddr_lib;
USE IEEE.std_logic_1164.ALL; USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL; USE IEEE.numeric_std.ALL;
USE dp_lib.dp_stream_pkg.ALL; USE dp_lib.dp_stream_pkg.ALL;
USE common_lib.common_mem_pkg.ALL;
USE common_lib.common_pkg.ALL;
USE tech_ddr_lib.tech_ddr_pkg.ALL;
ENTITY ddrctrl_controller IS ENTITY ddrctrl_controller IS
GENERIC ( GENERIC (
g_max_adr : NATURAL; g_tech_ddr : t_c_tech_ddr
); );
PORT ( PORT (
clk : IN STD_LOGIC; clk : IN STD_LOGIC;
...@@ -52,7 +55,7 @@ ENTITY ddrctrl_controller IS ...@@ -52,7 +55,7 @@ ENTITY ddrctrl_controller IS
rd_siso : OUT t_dp_siso; rd_siso : OUT t_dp_siso;
-- ddrctrl -- ddrctrl
stop_in : IN STD_LOGIC; stop_in : IN STD_LOGIC
); );
END ddrctrl_controller; END ddrctrl_controller;
...@@ -69,13 +72,20 @@ ARCHITECTURE rtl OF ddrctrl_controller IS ...@@ -69,13 +72,20 @@ ARCHITECTURE rtl OF ddrctrl_controller IS
-- record for readability -- record for readability
TYPE t_reg IS RECORD TYPE t_reg IS RECORD
state : t_state; -- the state the process is currently in; -- state of program
state : t_state;
-- signals
stop_adr : NATURAL;
stopped : STD_LOGIC;
-- output
dvr_mosi : t_mem_ctlr_mosi; dvr_mosi : t_mem_ctlr_mosi;
wr_sosi : t_dp_sosi; wr_sosi : t_dp_sosi;
rd_siso : t_dp_siso; rd_siso : t_dp_siso;
END RECORD; END RECORD;
CONSTANT c_t_reg_init : t_reg := (RESET, c_mem_ctlr_mosi_init, c_dp_sosi_init, c_dp_siso_rst); CONSTANT c_t_reg_init : t_reg := (RESET, 0, '0', c_mem_ctlr_mosi_rst, c_dp_sosi_init, c_dp_siso_rst);
-- signals for readability -- signals for readability
...@@ -87,77 +97,67 @@ BEGIN ...@@ -87,77 +97,67 @@ BEGIN
q_reg <= d_reg WHEN rising_edge(clk); q_reg <= d_reg WHEN rising_edge(clk);
-- put the input data into c_v and fill the output vector from c_v -- put the input data into c_v and fill the output vector from c_v
p_state : PROCESS(q_reg, rst) p_state : PROCESS(q_reg, rst, out_of, out_sosi, out_adr)
VARIABLE v : t_reg; VARIABLE v : t_reg;
BEGIN BEGIN
v := q_reg; v := q_reg;
CASE q_reg.state IS CASE q_reg.state IS
WHEN RESET =>
v := c_t_reg_init;
WHEN
END CASE;
WHEN RESET =>
v := c_t_reg_init;
p_burst : PROCESS(adr) WHEN WRITING =>
BEGIN IF TO_UVEC(out_adr, c_adr_w)(c_bitshift_adr-1 DOWNTO 0) = c_zeros THEN -- if adr mod 64 = 0
IF TO_UVEC(adr, c_adr_w)(c_bitshift_adr-1 DOWNTO 0) = c_zeros THEN v.dvr_mosi.burstbegin := '1';
dvr_mosi.burstbegin <= '1'; IF out_adr = 0 THEN
IF adr = 0 THEN v.dvr_mosi.address := TO_UVEC(c_max_adr-c_burstsize, dvr_mosi.address'length);
dvr_mosi.address <= TO_UVEC(c_max_adr-c_burstsize, dvr_mosi.address'length);
ELSE ELSE
dvr_mosi.address <= TO_UVEC(adr-c_burstsize, dvr_mosi.address'length); v.dvr_mosi.address := TO_UVEC(out_adr-c_burstsize, dvr_mosi.address'length);
END IF; END IF;
ELSE ELSE
dvr_mosi.burstbegin <= '0'; v.dvr_mosi.burstbegin := '0';
END IF; END IF;
END PROCESS; v.dvr_mosi.burstsize := TO_UVEC(c_burstsize, dvr_mosi.burstsize'length);
v.dvr_mosi.wr := '1';
dvr_mosi.burstsize <= TO_UVEC(c_burstsize, dvr_mosi.burstsize'length); v.dvr_mosi.rd := '0';
dvr_mosi.wr <= wr_not_rd;
dvr_mosi.rd <= NOT wr_not_rd;
WHEN STOP_WRITING =>
IF (out_adr + (c_max_adr / 2) >= c_max_adr) THEN
v.stop_adr := out_adr - (c_max_adr / 2);
ELSE
v.stop_adr := out_adr + (c_max_adr / 2);
END IF;
IF (stop_in = '1' AND out_adr = v.stop_adr) THEN
--stop_out <= '1';
v.dvr_mosi.address := TO_UVEC(out_adr, dvr_mosi.address'length);
ELSE
--stop_out <= '0';
END IF;
WHEN OTHERS =>
v := c_t_reg_init;
IF rising_edge(stop_in) THEN
IF (current_adr + (g_max_adr / 2) >= g_max_adr)
adr <= current_adr - (g_max_adr / 2);
ELSE
adr <= current_adr + (g_max_adr / 2);
current_adr : PROCESS(current_adr) END CASE;
BEGIN
IF (stop_in = '1' AND current_adr = adr) THEN IF rst = '1' THEN
stop_out <= '1'; v.state := RESET;
adr_out = current_adr; ELSIF stop_in = '1' THEN
v.state := STOP_WRITING;
ELSE ELSE
stop_out <= '0'; v.state := WRITING;
END IF; END IF;
END PROCESS; END PROCESS;
END rtl; END rtl;
...@@ -170,8 +170,6 @@ BEGIN ...@@ -170,8 +170,6 @@ BEGIN
mm_rst => mm_rst, mm_rst => mm_rst,
in_sosi_arr => in_sosi_arr, in_sosi_arr => in_sosi_arr,
wr_not_rd => wr_not_rd, wr_not_rd => wr_not_rd,
out_of => open,
out_adr => open,
--PHY --PHY
phy3_io => phy3_io, phy3_io => phy3_io,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment