litedram: Test bench

The test bench test simple access forms for now, it's a starting point
but it already helped find/fix a bug.

Includes a litedram update to be able to operate the sim model without
inits.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
pull/190/head
Benjamin Herrenschmidt 4 years ago
parent a3857aac94
commit 6828e93113

@ -1,5 +1,5 @@
GHDL ?= ghdl
GHDLFLAGS=--std=08 --work=unisim
GHDLFLAGS=--std=08 --work=unisim -frelaxed
CFLAGS=-O3 -Wall

GHDLSYNTH ?= ghdl.so
@ -66,7 +66,7 @@ soc_sim_link=$(patsubst %,-Wl$(comma)%,$(soc_sim_obj_files))

core_tbs = multiply_tb divider_tb rotator_tb countzero_tb
soc_tbs = core_tb icache_tb dcache_tb dmi_dtm_tb wishbone_bram_tb
soc_dram_tbs = core_dram_tb
soc_dram_tbs = dram_tb core_dram_tb

$(soc_tbs): %: $(core_files) $(soc_files) $(soc_sim_files) $(soc_sim_obj_files) %.vhdl
$(GHDL) -c $(GHDLFLAGS) $(soc_sim_link) $(core_files) $(soc_files) $(soc_sim_files) $@.vhdl -e $@

@ -0,0 +1,301 @@
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

library work;
use work.common.all;
use work.wishbone_types.all;

entity dram_tb is
generic (
DRAM_INIT_FILE : string := "";
DRAM_INIT_SIZE : natural := 0
);
end dram_tb;

architecture behave of dram_tb is
signal clk, rst: std_logic;
signal clk_in, soc_rst : std_ulogic;

-- testbench signals
constant clk_period : time := 10 ns;

-- Sim DRAM
signal wb_in : wishbone_master_out;
signal wb_out : wishbone_slave_out;
signal wb_ctrl_in : wb_io_master_out;

subtype addr_t is std_ulogic_vector(wb_in.adr'left downto 0);
subtype data_t is std_ulogic_vector(wb_in.dat'left downto 0);
subtype sel_t is std_ulogic_vector(wb_in.sel'left downto 0);

-- Counter for acks
signal acks : integer := 0;
signal reset_acks : std_ulogic;

-- Read data fifo
signal rd_ready : std_ulogic := '0';
signal rd_valid : std_ulogic;
signal rd_data : data_t;
begin

dram: entity work.litedram_wrapper
generic map(
DRAM_ABITS => 24,
DRAM_ALINES => 1,
PAYLOAD_FILE => DRAM_INIT_FILE,
PAYLOAD_SIZE => DRAM_INIT_SIZE
)
port map(
clk_in => clk_in,
rst => rst,
system_clk => clk,
system_reset => soc_rst,
core_alt_reset => open,
pll_locked => open,

wb_in => wb_in,
wb_out => wb_out,
wb_ctrl_in => wb_ctrl_in,
wb_ctrl_out => open,
wb_ctrl_is_csr => '0',
wb_ctrl_is_init => '0',

serial_tx => open,
serial_rx => '1',

init_done => open,
init_error => open,

ddram_a => open,
ddram_ba => open,
ddram_ras_n => open,
ddram_cas_n => open,
ddram_we_n => open,
ddram_cs_n => open,
ddram_dm => open,
ddram_dq => open,
ddram_dqs_p => open,
ddram_dqs_n => open,
ddram_clk_p => open,
ddram_clk_n => open,
ddram_cke => open,
ddram_odt => open,
ddram_reset_n => open
);

clk_process: process
begin
clk_in <= '0';
wait for clk_period/2;
clk_in <= '1';
wait for clk_period/2;
end process;

rst_process: process
begin
rst <= '1';
wait for 10*clk_period;
rst <= '0';
wait;
end process;

wb_ctrl_in.cyc <= '0';
wb_ctrl_in.stb <= '0';

-- Read data receive queue
data_queue: entity work.sync_fifo
generic map (
DEPTH => 16,
WIDTH => rd_data'length
)
port map (
clk => clk,
reset => soc_rst or reset_acks,
rd_ready => rd_ready,
rd_valid => rd_valid,
rd_data => rd_data,
wr_ready => open,
wr_valid => wb_out.ack,
wr_data => wb_out.dat
);

recv_acks: process(clk)
begin
if rising_edge(clk) then
if rst = '1' or reset_acks = '1' then
acks <= 0;
elsif wb_out.ack = '1' then
acks <= acks + 1;
-- report "WB ACK ! DATA=" & to_hstring(wb_out.dat);
end if;
end if;
end process;

sim: process
procedure wb_write(addr: addr_t; data: data_t; sel: sel_t) is
begin
wb_in.adr <= addr;
wb_in.sel <= sel;
wb_in.dat <= data;
wb_in.we <= '1';
wb_in.stb <= '1';
wb_in.cyc <= '1';
loop
wait until rising_edge(clk);
if wb_out.stall = '0' then
wb_in.stb <= '0';
exit;
end if;
end loop;
end procedure;

procedure wb_read(addr: addr_t) is
begin
wb_in.adr <= addr;
wb_in.sel <= x"ff";
wb_in.we <= '0';
wb_in.stb <= '1';
wb_in.cyc <= '1';
loop
wait until rising_edge(clk);
if wb_out.stall = '0' then
wb_in.stb <= '0';
exit;
end if;
end loop;
end procedure;

procedure wait_acks(count: integer) is
begin
wait until acks = count;
wait until rising_edge(clk);
end procedure;

procedure clr_acks is
begin
reset_acks <= '1';
wait until rising_edge(clk);
reset_acks <= '0';
end procedure;

procedure read_data(data: out data_t) is
begin
assert rd_valid = '1' report "No data to read" severity failure;
rd_ready <= '1';
wait until rising_edge(clk);
rd_ready <= '0';
data := rd_data;
end procedure;

function add_off(a: addr_t; off: integer) return addr_t is
begin
return addr_t(unsigned(a) + off);
end function;

function make_pattern(num : integer) return data_t is
variable r : data_t;
variable t,b : integer;
begin
for i in 0 to (data_t'length/8)-1 loop
t := (i+1)*8-1;
b := i*8;
r(t downto b) := std_ulogic_vector(to_unsigned(num+1, 8));
end loop;
return r;
end function;

procedure check_data(p: data_t) is
variable d : data_t;
begin
read_data(d);
assert d = p report "bad data, want " & to_hstring(p) &
" got " & to_hstring(d) severity failure;
end procedure;

variable a : addr_t := (others => '0');
variable d : data_t := (others => '0');
variable d1 : data_t := (others => '0');
begin
reset_acks <= '0';
rst <= '1';
wait until rising_edge(clk_in);
wait until rising_edge(clk_in);
wait until rising_edge(clk_in);
wait until rising_edge(clk_in);
wait until rising_edge(clk_in);
rst <= '0';
wait until rising_edge(clk_in);
wait until soc_rst = '0';
wait until rising_edge(clk);

report "Simple write miss...";
clr_acks;
wb_write(a, x"0123456789abcdef", x"ff");
wait_acks(1);

report "Simple read miss...";
clr_acks;
wb_read(a);
wait_acks(1);
read_data(d);
assert d = x"0123456789abcdef" report "bad data" severity failure;

report "Simple read hit...";
clr_acks;
wb_read(a);
wait_acks(1);
read_data(d);
assert d = x"0123456789abcdef" report "bad data" severity failure;

report "Back to back 4 stores 4 reads on hit...";
clr_acks;
for i in 0 to 3 loop
wb_write(add_off(a, i*8), make_pattern(i), x"ff");
end loop;
for i in 0 to 3 loop
wb_read(add_off(a, i*8));
end loop;
wait_acks(8);
for i in 0 to 7 loop
if i < 4 then
read_data(d);
else
check_data(make_pattern(i-4));
end if;
end loop;

report "Back to back 4 stores 4 reads on miss...";
a(10) := '1';
clr_acks;
for i in 0 to 3 loop
wb_write(add_off(a, i*8), make_pattern(i), x"ff");
end loop;
for i in 0 to 3 loop
wb_read(add_off(a, i*8));
end loop;
wait_acks(8);
for i in 0 to 7 loop
if i < 4 then
read_data(d);
else
check_data(make_pattern(i-4));
end if;
end loop;

report "Back to back interleaved 4 stores 4 reads on hit...";
a(10) := '1';
clr_acks;
for i in 0 to 3 loop
wb_write(add_off(a, i*8), make_pattern(i), x"ff");
wb_read(add_off(a, i*8));
end loop;
wait_acks(8);
for i in 0 to 3 loop
read_data(d);
check_data(make_pattern(i));
end loop;

std.env.finish;
end process;
end architecture;

@ -0,0 +1,80 @@
[*]
[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI
[*] Sun May 31 12:53:52 2020
[*]
[dumpfile] "/home/ANT.AMAZON.COM/benh/hackplace/microwatt/foo.ghw"
[dumpfile_mtime] "Sun May 31 12:50:15 2020"
[dumpfile_size] 1134118
[savefile] "/home/ANT.AMAZON.COM/benh/hackplace/microwatt/litedram/extras/wave_tb.gtkw"
[timestart] 1312950000
[size] 2509 1371
[pos] -1 -1
*-24.248457 1386890000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[treeopen] top.
[treeopen] top.dram_tb.
[sst_width] 301
[signals_width] 433
[sst_expanded] 1
[sst_vpaned_height] 410
@28
top.dram_tb.reset_acks
@420
top.dram_tb.acks
@28
top.dram_tb.rst
top.dram_tb.clk
@22
#{top.dram_tb.wb_in.dat[63:0]} top.dram_tb.wb_in.dat[63] top.dram_tb.wb_in.dat[62] top.dram_tb.wb_in.dat[61] top.dram_tb.wb_in.dat[60] top.dram_tb.wb_in.dat[59] top.dram_tb.wb_in.dat[58] top.dram_tb.wb_in.dat[57] top.dram_tb.wb_in.dat[56] top.dram_tb.wb_in.dat[55] top.dram_tb.wb_in.dat[54] top.dram_tb.wb_in.dat[53] top.dram_tb.wb_in.dat[52] top.dram_tb.wb_in.dat[51] top.dram_tb.wb_in.dat[50] top.dram_tb.wb_in.dat[49] top.dram_tb.wb_in.dat[48] top.dram_tb.wb_in.dat[47] top.dram_tb.wb_in.dat[46] top.dram_tb.wb_in.dat[45] top.dram_tb.wb_in.dat[44] top.dram_tb.wb_in.dat[43] top.dram_tb.wb_in.dat[42] top.dram_tb.wb_in.dat[41] top.dram_tb.wb_in.dat[40] top.dram_tb.wb_in.dat[39] top.dram_tb.wb_in.dat[38] top.dram_tb.wb_in.dat[37] top.dram_tb.wb_in.dat[36] top.dram_tb.wb_in.dat[35] top.dram_tb.wb_in.dat[34] top.dram_tb.wb_in.dat[33] top.dram_tb.wb_in.dat[32] top.dram_tb.wb_in.dat[31] top.dram_tb.wb_in.dat[30] top.dram_tb.wb_in.dat[29] top.dram_tb.wb_in.dat[28] top.dram_tb.wb_in.dat[27] top.dram_tb.wb_in.dat[26] top.dram_tb.wb_in.dat[25] top.dram_tb.wb_in.dat[24] top.dram_tb.wb_in.dat[23] top.dram_tb.wb_in.dat[22] top.dram_tb.wb_in.dat[21] top.dram_tb.wb_in.dat[20] top.dram_tb.wb_in.dat[19] top.dram_tb.wb_in.dat[18] top.dram_tb.wb_in.dat[17] top.dram_tb.wb_in.dat[16] top.dram_tb.wb_in.dat[15] top.dram_tb.wb_in.dat[14] top.dram_tb.wb_in.dat[13] top.dram_tb.wb_in.dat[12] top.dram_tb.wb_in.dat[11] top.dram_tb.wb_in.dat[10] top.dram_tb.wb_in.dat[9] top.dram_tb.wb_in.dat[8] top.dram_tb.wb_in.dat[7] top.dram_tb.wb_in.dat[6] top.dram_tb.wb_in.dat[5] top.dram_tb.wb_in.dat[4] top.dram_tb.wb_in.dat[3] top.dram_tb.wb_in.dat[2] top.dram_tb.wb_in.dat[1] top.dram_tb.wb_in.dat[0]
#{top.dram_tb.wb_in.adr[31:0]} top.dram_tb.wb_in.adr[31] top.dram_tb.wb_in.adr[30] top.dram_tb.wb_in.adr[29] top.dram_tb.wb_in.adr[28] top.dram_tb.wb_in.adr[27] top.dram_tb.wb_in.adr[26] top.dram_tb.wb_in.adr[25] top.dram_tb.wb_in.adr[24] top.dram_tb.wb_in.adr[23] top.dram_tb.wb_in.adr[22] top.dram_tb.wb_in.adr[21] top.dram_tb.wb_in.adr[20] top.dram_tb.wb_in.adr[19] top.dram_tb.wb_in.adr[18] top.dram_tb.wb_in.adr[17] top.dram_tb.wb_in.adr[16] top.dram_tb.wb_in.adr[15] top.dram_tb.wb_in.adr[14] top.dram_tb.wb_in.adr[13] top.dram_tb.wb_in.adr[12] top.dram_tb.wb_in.adr[11] top.dram_tb.wb_in.adr[10] top.dram_tb.wb_in.adr[9] top.dram_tb.wb_in.adr[8] top.dram_tb.wb_in.adr[7] top.dram_tb.wb_in.adr[6] top.dram_tb.wb_in.adr[5] top.dram_tb.wb_in.adr[4] top.dram_tb.wb_in.adr[3] top.dram_tb.wb_in.adr[2] top.dram_tb.wb_in.adr[1] top.dram_tb.wb_in.adr[0]
@23
#{top.dram_tb.wb_in.sel[7:0]} top.dram_tb.wb_in.sel[7] top.dram_tb.wb_in.sel[6] top.dram_tb.wb_in.sel[5] top.dram_tb.wb_in.sel[4] top.dram_tb.wb_in.sel[3] top.dram_tb.wb_in.sel[2] top.dram_tb.wb_in.sel[1] top.dram_tb.wb_in.sel[0]
@28
top.dram_tb.wb_in.cyc
top.dram_tb.wb_in.stb
top.dram_tb.wb_in.we
top.dram_tb.wb_out.ack
top.dram_tb.wb_out.stall
@22
#{top.dram_tb.wb_out.dat[63:0]} top.dram_tb.wb_out.dat[63] top.dram_tb.wb_out.dat[62] top.dram_tb.wb_out.dat[61] top.dram_tb.wb_out.dat[60] top.dram_tb.wb_out.dat[59] top.dram_tb.wb_out.dat[58] top.dram_tb.wb_out.dat[57] top.dram_tb.wb_out.dat[56] top.dram_tb.wb_out.dat[55] top.dram_tb.wb_out.dat[54] top.dram_tb.wb_out.dat[53] top.dram_tb.wb_out.dat[52] top.dram_tb.wb_out.dat[51] top.dram_tb.wb_out.dat[50] top.dram_tb.wb_out.dat[49] top.dram_tb.wb_out.dat[48] top.dram_tb.wb_out.dat[47] top.dram_tb.wb_out.dat[46] top.dram_tb.wb_out.dat[45] top.dram_tb.wb_out.dat[44] top.dram_tb.wb_out.dat[43] top.dram_tb.wb_out.dat[42] top.dram_tb.wb_out.dat[41] top.dram_tb.wb_out.dat[40] top.dram_tb.wb_out.dat[39] top.dram_tb.wb_out.dat[38] top.dram_tb.wb_out.dat[37] top.dram_tb.wb_out.dat[36] top.dram_tb.wb_out.dat[35] top.dram_tb.wb_out.dat[34] top.dram_tb.wb_out.dat[33] top.dram_tb.wb_out.dat[32] top.dram_tb.wb_out.dat[31] top.dram_tb.wb_out.dat[30] top.dram_tb.wb_out.dat[29] top.dram_tb.wb_out.dat[28] top.dram_tb.wb_out.dat[27] top.dram_tb.wb_out.dat[26] top.dram_tb.wb_out.dat[25] top.dram_tb.wb_out.dat[24] top.dram_tb.wb_out.dat[23] top.dram_tb.wb_out.dat[22] top.dram_tb.wb_out.dat[21] top.dram_tb.wb_out.dat[20] top.dram_tb.wb_out.dat[19] top.dram_tb.wb_out.dat[18] top.dram_tb.wb_out.dat[17] top.dram_tb.wb_out.dat[16] top.dram_tb.wb_out.dat[15] top.dram_tb.wb_out.dat[14] top.dram_tb.wb_out.dat[13] top.dram_tb.wb_out.dat[12] top.dram_tb.wb_out.dat[11] top.dram_tb.wb_out.dat[10] top.dram_tb.wb_out.dat[9] top.dram_tb.wb_out.dat[8] top.dram_tb.wb_out.dat[7] top.dram_tb.wb_out.dat[6] top.dram_tb.wb_out.dat[5] top.dram_tb.wb_out.dat[4] top.dram_tb.wb_out.dat[3] top.dram_tb.wb_out.dat[2] top.dram_tb.wb_out.dat[1] top.dram_tb.wb_out.dat[0]
@28
top.dram_tb.rd_valid
top.dram_tb.rd_ready
@22
#{top.dram_tb.rd_data[63:0]} top.dram_tb.rd_data[63] top.dram_tb.rd_data[62] top.dram_tb.rd_data[61] top.dram_tb.rd_data[60] top.dram_tb.rd_data[59] top.dram_tb.rd_data[58] top.dram_tb.rd_data[57] top.dram_tb.rd_data[56] top.dram_tb.rd_data[55] top.dram_tb.rd_data[54] top.dram_tb.rd_data[53] top.dram_tb.rd_data[52] top.dram_tb.rd_data[51] top.dram_tb.rd_data[50] top.dram_tb.rd_data[49] top.dram_tb.rd_data[48] top.dram_tb.rd_data[47] top.dram_tb.rd_data[46] top.dram_tb.rd_data[45] top.dram_tb.rd_data[44] top.dram_tb.rd_data[43] top.dram_tb.rd_data[42] top.dram_tb.rd_data[41] top.dram_tb.rd_data[40] top.dram_tb.rd_data[39] top.dram_tb.rd_data[38] top.dram_tb.rd_data[37] top.dram_tb.rd_data[36] top.dram_tb.rd_data[35] top.dram_tb.rd_data[34] top.dram_tb.rd_data[33] top.dram_tb.rd_data[32] top.dram_tb.rd_data[31] top.dram_tb.rd_data[30] top.dram_tb.rd_data[29] top.dram_tb.rd_data[28] top.dram_tb.rd_data[27] top.dram_tb.rd_data[26] top.dram_tb.rd_data[25] top.dram_tb.rd_data[24] top.dram_tb.rd_data[23] top.dram_tb.rd_data[22] top.dram_tb.rd_data[21] top.dram_tb.rd_data[20] top.dram_tb.rd_data[19] top.dram_tb.rd_data[18] top.dram_tb.rd_data[17] top.dram_tb.rd_data[16] top.dram_tb.rd_data[15] top.dram_tb.rd_data[14] top.dram_tb.rd_data[13] top.dram_tb.rd_data[12] top.dram_tb.rd_data[11] top.dram_tb.rd_data[10] top.dram_tb.rd_data[9] top.dram_tb.rd_data[8] top.dram_tb.rd_data[7] top.dram_tb.rd_data[6] top.dram_tb.rd_data[5] top.dram_tb.rd_data[4] top.dram_tb.rd_data[3] top.dram_tb.rd_data[2] top.dram_tb.rd_data[1] top.dram_tb.rd_data[0]
@200
-
-
-wrapper
@28
top.dram_tb.dram.accept_store
@420
top.dram_tb.dram.req_op
top.dram_tb.dram.state
@28
top.dram_tb.dram.read_ack_1
top.dram_tb.dram.read_ack_0
top.dram_tb.dram.storeq_wr_valid
top.dram_tb.dram.storeq_wr_ready
top.dram_tb.dram.storeq_rd_valid
top.dram_tb.dram.storeq_rd_ready
top.dram_tb.dram.user_port0_rdata_ready
top.dram_tb.dram.user_port0_rdata_valid
top.dram_tb.dram.user_port0_wdata_ready
top.dram_tb.dram.user_port0_wdata_valid
top.dram_tb.dram.user_port0_cmd_we
top.dram_tb.dram.user_port0_cmd_ready
top.dram_tb.dram.user_port0_cmd_valid
top.dram_tb.dram.refill_cmd_valid
@420
top.dram_tb.dram.req_index
top.dram_tb.dram.req_hit_way
@28
top.dram_tb.dram.req_ad3
@420
top.dram_tb.dram.refill_row
top.dram_tb.dram.refill_index
top.dram_tb.dram.refill_way
@28
top.dram_tb.dram.system_clk
[pattern_trace] 1
[pattern_trace] 0

@ -580,7 +580,7 @@ f92101c0f90101b8
3c62ffff3c82ffff
38847ce838a57cd8
4bfffddd38637cf0
6000000048000e99
6000000048000e95
3c62ffff41920020
4bfffdc538637d20
8181000838210070
@ -902,161 +902,161 @@ f8010010794a0020
0100000000000000
3c4c000100000580
7c0802a6384295cc
f821fec1480010ed
3bc000013fe0c010
7bff002063ff0028
386000004bfffbd9
7c0004ac4bfff6bd
3f80c0107fc0ff2a
7b9c0020639c0040
7fc0e72a7c0004ac
7c0004ac3ba00000
386000017fa0ff2a
392000024bfff68d
7d20ff2a7c0004ac
7fc0e72a7c0004ac
480010e938600000
3fe0c010f821fec1
63ff00283bc00001
4bfff6c17bff0020
7fc0ff2a7c0004ac
639c00403f80c010
7c0004ac7b9c0020
3ba000007fc0e72a
7fa0ff2a7c0004ac
3b8100703c62ffff
3e02ffff38637f48
600000004bfff349
fb8100803d22ffff
39297f583de2ffff
3e42ffff3dc2ffff
f92100983ae10063
3be000003ac10061
39ef7f683a107ee8
3a527f2839ce7f70
3b20000139210064
3ea0c0103e80c010
39210068f9210088
629408187f39f830
7b33002062b50820
f92100903bc00000
3ba000003b000000
7ab500207a940020
7fbeeb7848000054
419e029c2f9d000f
612900283d20c010
4bfff69138600001
7c0004ac39200002
7c0004ac7d20ff2a
7c0004ac7fc0e72a
3c62ffff7fa0ff2a
38637f483b810070
4bfff34d3e02ffff
3d22ffff60000000
3de2fffffb810080
3dc2ffff39297f58
3ae100633e42ffff
3ac10061f9210098
3a107ee83be00000
39ce7f7039ef7f68
392100643a527f28
3e80c0103b200001
f92100883ea0c010
7f39f83039210068
62b5082062940818
3bc000007b330020
3b000000f9210090
7a9400203ba00000
480000547ab50020
2f9d000f7fbeeb78
3d20c010419e029c
7929002061290028
7e604f2a7c0004ac
394000013d00c010
7908002061080048
7d40472a7c0004ac
7c0004ac39400000
3bbd00017d404f2a
7fbd07b47f78db78
3900000439410060
7d5a53783920002a
38c0000038e00004
3ca080207ce903a6
60a500037927f842
7d2900d0792907e0
7d29283878a50020
78e900207d273a78
38c600017cea31ae
3908ffff4200ffd4
79080021394a0004
3b6000004082ffb8
7f60a72a7c0004ac
7f60af2a7c0004ac
4bfff4b538600009
4bfff4e93860000f
7f44d3783c60c010
7863002060630828
e88100884bfff5d5
606308583c60c010
4bfff5c178630020
3c60c010e8810090
7863002060630888
3c60c0104bfff5ad
606308b83881006c
4bfff59978630020
612908a83d20c010
7c0004ac79290020
3d00c0107e604f2a
6108004839400001
7c0004ac79080020
394000007d40472a
7d404f2a7c0004ac
7f78db783bbd0001
394100607fbd07b4
3920002a39000004
38e000047d5a5378
7ce903a638c00000
7927f8423ca08020
792907e060a50003
78a500207d2900d0
7d273a787d292838
7cea31ae78e90020
4200ffd438c60001
394a00043908ffff
4082ffb879080021
7c0004ac3b600000
7c0004ac7f60a72a
386000097f60af2a
3860000f4bfff4b1
3c60c0104bfff4e5
606308287f44d378
4bfff5d178630020
3c60c010e8810088
7863002060630858
e88100904bfff5bd
606308883c60c010
4bfff5a978630020
3881006c3c60c010
78630020606308b8
3d20c0104bfff595
79290020612908a8
3d20c0107f604f2a
79290020612908b0
7f604f2a7c0004ac
612908b03d20c010
392000173d40c010
794a0020614a0898
7d20572a7c0004ac
392000013d40c010
794a0020614a08a0
7d20572a7c0004ac
612908783d20c010
7c0004ac79290020
3d40c0107f604f2a
614a089839200017
7c0004ac794a0020
3d40c0107d20572a
614a08a039200001
7c0004ac794a0020
3d20c0107d20572a
7929002061290878
3d20c0107f604f2a
7929002061290880
7f604f2a7c0004ac
612908803d20c010
7c0004ac79290020
e86100987f604f2a
7fe4fb787fa5eb78
3b6000003b400020
600000004bfff111
4bfff4197fe3fb78
3860000f4bfff4ad
4bfff3e13a200001
79480fa439400000
f94100a0e8810080
4bfff5157c70402a
88fc0001e94100a0
7f8838007d1650ae
7d1750ae409e00a0
7f88380088fc0003
394a0004409e0090
409effc02baa0010
7de37b787e248b78
600000004bfff0a1
7fe3fb783b5affff
7b5a00214bfff3f1
7f7b07b47f7b8a14
7dc373784082ff80
600000004bfff079
7c0004ac39200000
7c0004ac7d20a72a
3860000b7d20af2a
3860000f4bfff309
7fe3fb784bfff33d
7e4393784bfff4c1
600000004bfff041
419cfd707f98d800
4bfffd6c7f1bc378
4bffff703a200000
7fc5f3783c62ffff
38637f787fe4fb78
600000004bfff011
612900283d20c010
7c0004ac79290020
3d00c0107f204f2a
6108004039400001
7c0004ac79080020
394000007d40472a
7d404f2a7c0004ac
3d00c0107bde0020
6108004838de0001
394000017cc903a6
38e0000079080020
7fe3fb7842000034
4bfff41d3af7ffff
3b9cffff7e439378
600000004bffef99
3ad6ffff2f9f0001
3be00001419e0028
7c0004ac4bfffc78
7c0004ac7e604f2a
7c0004ac7d40472a
4bffffb47ce04f2a
3860000138210140
0000000048000ccc
0000128001000000
384291403c4c0001
3c62ffff7c0802a6
48000c8938637f30
3f60c010f821ff71
637b10003be00000
4bffef1d7b7b0020
7c0004ac60000000
3f40c0107fe0df2a
7b5a0020635a1008
7fe0d72a7c0004ac
63bd08183fa0c010
7fa5eb78e8610098
3b4000207fe4fb78
4bfff1153b600000
7fe3fb7860000000
4bfff4b14bfff41d
3a2000013860000f
394000004bfff3e5
e881008079480fa4
7c70402af94100a0
e94100a04bfff519
7d1650ae88fc0001
409e00a07f883800
88fc00037d1750ae
409e00907f883800
2baa0010394a0004
7e248b78409effc0
4bfff0a57de37b78
3b5affff60000000
4bfff3f57fe3fb78
7f7b8a147b5a0021
4082ff807f7b07b4
4bfff07d7dc37378
3920000060000000
7d20a72a7c0004ac
7d20af2a7c0004ac
4bfff30d3860000b
4bfff3413860000f
4bfff4c57fe3fb78
4bfff0457e439378
7f98d80060000000
7f1bc378419cfd70
3a2000004bfffd6c
3c62ffff4bffff70
7fe4fb787fc5f378
4bfff01538637f78
3d20c01060000000
7929002061290028
7f204f2a7c0004ac
394000013d00c010
7908002061080040
7d40472a7c0004ac
7c0004ac39400000
7bde00207d404f2a
38de00013d00c010
7cc903a661080048
7908002039400001
4200003438e00000
3af7ffff7fe3fb78
7e4393784bfff421
4bffef9d3b9cffff
2f9f000160000000
419e00283ad6ffff
4bfffc783be00001
7e604f2a7c0004ac
7d40472a7c0004ac
7ce04f2a7c0004ac
382101404bffffb4
48000cd038600001
0100000000000000
3c4c000100001280
7c0802a638429144
38637f303c62ffff
f821ff7148000c8d
3be000003f60c010
7b7b0020637b1000
600000004bffef21
7fe0df2a7c0004ac
635a10083f40c010
7c0004ac7b5a0020
3fa0c0107fe0d72a
63bd08184bfff721
7c0004ac7bbd0020
3fc0c0107fe0ef2a
7bde002063de0820

@ -1,5 +1,5 @@
//--------------------------------------------------------------------------------
// Auto-generated by Migen (0d16e03) & LiteX (564d731a) on 2020-05-30 20:25:53
// Auto-generated by Migen (0d16e03) & LiteX (564d731a) on 2020-05-31 17:48:50
//--------------------------------------------------------------------------------
module litedram_core(
input wire clk,
@ -540,7 +540,7 @@ reg [3:0] litedramcore_master_p3_wrdata_mask = 4'd0;
reg litedramcore_master_p3_rddata_en = 1'd0;
wire [31:0] litedramcore_master_p3_rddata;
wire litedramcore_master_p3_rddata_valid;
reg [3:0] litedramcore_storage = 4'd0;
reg [3:0] litedramcore_storage = 4'd1;
reg litedramcore_re = 1'd0;
reg [5:0] litedramcore_phaseinjector0_command_storage = 6'd0;
reg litedramcore_phaseinjector0_command_re = 1'd0;
@ -14691,7 +14691,7 @@ always @(posedge sys_clk) begin
a7ddrphy_bitslip15_value <= 4'd0;
a7ddrphy_rddata_en_last <= 8'd0;
a7ddrphy_wrdata_en_last <= 4'd0;
litedramcore_storage <= 4'd0;
litedramcore_storage <= 4'd1;
litedramcore_re <= 1'd0;
litedramcore_phaseinjector0_command_storage <= 6'd0;
litedramcore_phaseinjector0_command_re <= 1'd0;

@ -580,7 +580,7 @@ f92101c0f90101b8
3c62ffff3c82ffff
38847ce838a57cd8
4bfffddd38637cf0
6000000048000e99
6000000048000e95
3c62ffff41920020
4bfffdc538637d20
8181000838210070
@ -902,161 +902,161 @@ f8010010794a0020
0100000000000000
3c4c000100000580
7c0802a6384295cc
f821fec1480010ed
3bc000013fe0c010
7bff002063ff0028
386000004bfffbd9
7c0004ac4bfff6bd
3f80c0107fc0ff2a
7b9c0020639c0040
7fc0e72a7c0004ac
7c0004ac3ba00000
386000017fa0ff2a
392000024bfff68d
7d20ff2a7c0004ac
7fc0e72a7c0004ac
480010e938600000
3fe0c010f821fec1
63ff00283bc00001
4bfff6c17bff0020
7fc0ff2a7c0004ac
639c00403f80c010
7c0004ac7b9c0020
3ba000007fc0e72a
7fa0ff2a7c0004ac
3b8100703c62ffff
3e02ffff38637f48
600000004bfff349
fb8100803d22ffff
39297f583de2ffff
3e42ffff3dc2ffff
f92100983ae10063
3be000003ac10061
39ef7f683a107ee8
3a527f2839ce7f70
3b20000139210064
3ea0c0103e80c010
39210068f9210088
629408187f39f830
7b33002062b50820
f92100903bc00000
3ba000003b000000
7ab500207a940020
7fbeeb7848000054
419e029c2f9d000f
612900283d20c010
4bfff69138600001
7c0004ac39200002
7c0004ac7d20ff2a
7c0004ac7fc0e72a
3c62ffff7fa0ff2a
38637f483b810070
4bfff34d3e02ffff
3d22ffff60000000
3de2fffffb810080
3dc2ffff39297f58
3ae100633e42ffff
3ac10061f9210098
3a107ee83be00000
39ce7f7039ef7f68
392100643a527f28
3e80c0103b200001
f92100883ea0c010
7f39f83039210068
62b5082062940818
3bc000007b330020
3b000000f9210090
7a9400203ba00000
480000547ab50020
2f9d000f7fbeeb78
3d20c010419e029c
7929002061290028
7e604f2a7c0004ac
394000013d00c010
7908002061080048
7d40472a7c0004ac
7c0004ac39400000
3bbd00017d404f2a
7fbd07b47f78db78
3900000439410060
7d5a53783920002a
38c0000038e00004
3ca080207ce903a6
60a500037927f842
7d2900d0792907e0
7d29283878a50020
78e900207d273a78
38c600017cea31ae
3908ffff4200ffd4
79080021394a0004
3b6000004082ffb8
7f60a72a7c0004ac
7f60af2a7c0004ac
4bfff4b538600009
4bfff4e93860000f
7f44d3783c60c010
7863002060630828
e88100884bfff5d5
606308583c60c010
4bfff5c178630020
3c60c010e8810090
7863002060630888
3c60c0104bfff5ad
606308b83881006c
4bfff59978630020
612908a83d20c010
7c0004ac79290020
3d00c0107e604f2a
6108004839400001
7c0004ac79080020
394000007d40472a
7d404f2a7c0004ac
7f78db783bbd0001
394100607fbd07b4
3920002a39000004
38e000047d5a5378
7ce903a638c00000
7927f8423ca08020
792907e060a50003
78a500207d2900d0
7d273a787d292838
7cea31ae78e90020
4200ffd438c60001
394a00043908ffff
4082ffb879080021
7c0004ac3b600000
7c0004ac7f60a72a
386000097f60af2a
3860000f4bfff4b1
3c60c0104bfff4e5
606308287f44d378
4bfff5d178630020
3c60c010e8810088
7863002060630858
e88100904bfff5bd
606308883c60c010
4bfff5a978630020
3881006c3c60c010
78630020606308b8
3d20c0104bfff595
79290020612908a8
3d20c0107f604f2a
79290020612908b0
7f604f2a7c0004ac
612908b03d20c010
392000173d40c010
794a0020614a0898
7d20572a7c0004ac
392000013d40c010
794a0020614a08a0
7d20572a7c0004ac
612908783d20c010
7c0004ac79290020
3d40c0107f604f2a
614a089839200017
7c0004ac794a0020
3d40c0107d20572a
614a08a039200001
7c0004ac794a0020
3d20c0107d20572a
7929002061290878
3d20c0107f604f2a
7929002061290880
7f604f2a7c0004ac
612908803d20c010
7c0004ac79290020
e86100987f604f2a
7fe4fb787fa5eb78
3b6000003b400020
600000004bfff111
4bfff4197fe3fb78
3860000f4bfff4ad
4bfff3e13a200001
79480fa439400000
f94100a0e8810080
4bfff5157c70402a
88fc0001e94100a0
7f8838007d1650ae
7d1750ae409e00a0
7f88380088fc0003
394a0004409e0090
409effc02baa0010
7de37b787e248b78
600000004bfff0a1
7fe3fb783b5affff
7b5a00214bfff3f1
7f7b07b47f7b8a14
7dc373784082ff80
600000004bfff079
7c0004ac39200000
7c0004ac7d20a72a
3860000b7d20af2a
3860000f4bfff309
7fe3fb784bfff33d
7e4393784bfff4c1
600000004bfff041
419cfd707f98d800
4bfffd6c7f1bc378
4bffff703a200000
7fc5f3783c62ffff
38637f787fe4fb78
600000004bfff011
612900283d20c010
7c0004ac79290020
3d00c0107f204f2a
6108004039400001
7c0004ac79080020
394000007d40472a
7d404f2a7c0004ac
3d00c0107bde0020
6108004838de0001
394000017cc903a6
38e0000079080020
7fe3fb7842000034
4bfff41d3af7ffff
3b9cffff7e439378
600000004bffef99
3ad6ffff2f9f0001
3be00001419e0028
7c0004ac4bfffc78
7c0004ac7e604f2a
7c0004ac7d40472a
4bffffb47ce04f2a
3860000138210140
0000000048000ccc
0000128001000000
384291403c4c0001
3c62ffff7c0802a6
48000c8938637f30
3f60c010f821ff71
637b10003be00000
4bffef1d7b7b0020
7c0004ac60000000
3f40c0107fe0df2a
7b5a0020635a1008
7fe0d72a7c0004ac
63bd08183fa0c010
7fa5eb78e8610098
3b4000207fe4fb78
4bfff1153b600000
7fe3fb7860000000
4bfff4b14bfff41d
3a2000013860000f
394000004bfff3e5
e881008079480fa4
7c70402af94100a0
e94100a04bfff519
7d1650ae88fc0001
409e00a07f883800
88fc00037d1750ae
409e00907f883800
2baa0010394a0004
7e248b78409effc0
4bfff0a57de37b78
3b5affff60000000
4bfff3f57fe3fb78
7f7b8a147b5a0021
4082ff807f7b07b4
4bfff07d7dc37378
3920000060000000
7d20a72a7c0004ac
7d20af2a7c0004ac
4bfff30d3860000b
4bfff3413860000f
4bfff4c57fe3fb78
4bfff0457e439378
7f98d80060000000
7f1bc378419cfd70
3a2000004bfffd6c
3c62ffff4bffff70
7fe4fb787fc5f378
4bfff01538637f78
3d20c01060000000
7929002061290028
7f204f2a7c0004ac
394000013d00c010
7908002061080040
7d40472a7c0004ac
7c0004ac39400000
7bde00207d404f2a
38de00013d00c010
7cc903a661080048
7908002039400001
4200003438e00000
3af7ffff7fe3fb78
7e4393784bfff421
4bffef9d3b9cffff
2f9f000160000000
419e00283ad6ffff
4bfffc783be00001
7e604f2a7c0004ac
7d40472a7c0004ac
7ce04f2a7c0004ac
382101404bffffb4
48000cd038600001
0100000000000000
3c4c000100001280
7c0802a638429144
38637f303c62ffff
f821ff7148000c8d
3be000003f60c010
7b7b0020637b1000
600000004bffef21
7fe0df2a7c0004ac
635a10083f40c010
7c0004ac7b5a0020
3fa0c0107fe0d72a
63bd08184bfff721
7c0004ac7bbd0020
3fc0c0107fe0ef2a
7bde002063de0820

@ -1,5 +1,5 @@
//--------------------------------------------------------------------------------
// Auto-generated by Migen (0d16e03) & LiteX (564d731a) on 2020-05-30 20:25:55
// Auto-generated by Migen (0d16e03) & LiteX (564d731a) on 2020-05-31 17:48:52
//--------------------------------------------------------------------------------
module litedram_core(
input wire clk,
@ -540,7 +540,7 @@ reg [3:0] litedramcore_master_p3_wrdata_mask = 4'd0;
reg litedramcore_master_p3_rddata_en = 1'd0;
wire [31:0] litedramcore_master_p3_rddata;
wire litedramcore_master_p3_rddata_valid;
reg [3:0] litedramcore_storage = 4'd0;
reg [3:0] litedramcore_storage = 4'd1;
reg litedramcore_re = 1'd0;
reg [5:0] litedramcore_phaseinjector0_command_storage = 6'd0;
reg litedramcore_phaseinjector0_command_re = 1'd0;
@ -14691,7 +14691,7 @@ always @(posedge sys_clk) begin
a7ddrphy_bitslip15_value <= 4'd0;
a7ddrphy_rddata_en_last <= 8'd0;
a7ddrphy_wrdata_en_last <= 4'd0;
litedramcore_storage <= 4'd0;
litedramcore_storage <= 4'd1;
litedramcore_re <= 1'd0;
litedramcore_phaseinjector0_command_storage <= 6'd0;
litedramcore_phaseinjector0_command_re <= 1'd0;

File diff suppressed because it is too large Load Diff

@ -1,5 +1,5 @@
//--------------------------------------------------------------------------------
// Auto-generated by Migen (0d16e03) & LiteX (564d731a) on 2020-05-30 20:25:57
// Auto-generated by Migen (0d16e03) & LiteX (564d731a) on 2020-05-31 17:48:54
//--------------------------------------------------------------------------------
module litedram_core(
input wire clk,
@ -886,7 +886,7 @@ reg [3:0] litedramcore_master_p3_wrdata_mask = 4'd0;
reg litedramcore_master_p3_rddata_en = 1'd0;
wire [31:0] litedramcore_master_p3_rddata;
wire litedramcore_master_p3_rddata_valid;
reg [3:0] litedramcore_storage = 4'd0;
reg [3:0] litedramcore_storage = 4'd1;
reg litedramcore_re = 1'd0;
reg [5:0] litedramcore_phaseinjector0_command_storage = 6'd0;
reg litedramcore_phaseinjector0_command_re = 1'd0;
@ -17563,7 +17563,7 @@ always @(posedge sys_clk) begin
ddrphy_new_banks_read_data7 <= 128'd0;
ddrphy_new_banks_read8 <= 1'd0;
ddrphy_new_banks_read_data8 <= 128'd0;
litedramcore_storage <= 4'd0;
litedramcore_storage <= 4'd1;
litedramcore_re <= 1'd0;
litedramcore_phaseinjector0_command_storage <= 6'd0;
litedramcore_phaseinjector0_command_re <= 1'd0;

Loading…
Cancel
Save