self checking testbench: read MGT frame from file and compare data
stream
This commit is contained in:
@ -44,145 +44,17 @@ architecture testbench of evr320_decoder_tb is
|
||||
-- MGT stream
|
||||
---------------------------------------------------------------------------
|
||||
type mgt_stream_sample_type is record
|
||||
data : std_logic_vector(15 downto 0);
|
||||
charisk : std_logic_vector( 1 downto 0);
|
||||
data : std_logic_vector(7 downto 0);
|
||||
data_k : std_logic_vector(0 downto 0);
|
||||
event : std_logic_vector(7 downto 0);
|
||||
event_k : std_logic_vector(0 downto 0);
|
||||
end record mgt_stream_sample_type;
|
||||
|
||||
type mgt_stream_type is array (natural range <>) of mgt_stream_sample_type;
|
||||
|
||||
signal mgt_stream_index : integer range 0 to 127 := 0;
|
||||
|
||||
constant mgt_stream : mgt_stream_type(0 to 127) :=
|
||||
(
|
||||
0 => (data => X"0000", charisk => "00"), -- gap
|
||||
1 => (data => X"00BC", charisk => "01"), -- align
|
||||
2 => (data => X"0000", charisk => "00"), -- gap
|
||||
3 => (data => X"0000", charisk => "00"), -- gap
|
||||
4 => (data => X"0000", charisk => "00"), -- gap
|
||||
5 => (data => X"00BC", charisk => "01"), -- align
|
||||
6 => (data => X"0000", charisk => "00"), -- gap
|
||||
7 => (data => X"0000", charisk => "00"), -- gap
|
||||
8 => (data => X"0000", charisk => "00"), -- gap
|
||||
9 => (data => X"00BC", charisk => "01"), -- align
|
||||
10 => (data => X"5C00", charisk => "10"), -- frame start
|
||||
11 => (data => X"0000", charisk => "00"), -- gap
|
||||
12 => (data => X"0200", charisk => "00"), -- frame byte
|
||||
13 => (data => X"00BC", charisk => "01"), -- align
|
||||
14 => (data => X"DB00", charisk => "00"), -- frame byte
|
||||
15 => (data => X"0000", charisk => "00"), -- gap
|
||||
16 => (data => X"9300", charisk => "00"), -- frame byte
|
||||
17 => (data => X"00BC", charisk => "01"), -- align
|
||||
18 => (data => X"3600", charisk => "00"), -- frame byte
|
||||
19 => (data => X"0000", charisk => "00"), -- gap
|
||||
20 => (data => X"4100", charisk => "00"), -- frame byte
|
||||
21 => (data => X"00BC", charisk => "01"), -- align
|
||||
22 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
23 => (data => X"0000", charisk => "00"), -- gap
|
||||
24 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
25 => (data => X"00BC", charisk => "01"), -- align
|
||||
26 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
27 => (data => X"0000", charisk => "00"), -- gap
|
||||
28 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
29 => (data => X"00BC", charisk => "01"), -- align
|
||||
30 => (data => X"A300", charisk => "00"), -- frame byte
|
||||
31 => (data => X"0000", charisk => "00"), -- gap
|
||||
32 => (data => X"1D00", charisk => "00"), -- frame byte
|
||||
33 => (data => X"00BC", charisk => "01"), -- align
|
||||
34 => (data => X"7F00", charisk => "00"), -- frame byte
|
||||
35 => (data => X"0000", charisk => "00"), -- gap
|
||||
36 => (data => X"3300", charisk => "00"), -- frame byte
|
||||
37 => (data => X"00BC", charisk => "01"), -- align
|
||||
38 => (data => X"9B00", charisk => "00"), -- frame byte
|
||||
39 => (data => X"0000", charisk => "00"), -- gap
|
||||
40 => (data => X"F300", charisk => "00"), -- frame byte
|
||||
41 => (data => X"00BC", charisk => "01"), -- align
|
||||
42 => (data => X"5100", charisk => "00"), -- frame byte
|
||||
43 => (data => X"0000", charisk => "00"), -- gap
|
||||
44 => (data => X"0400", charisk => "00"), -- frame byte
|
||||
45 => (data => X"00BC", charisk => "01"), -- align
|
||||
46 => (data => X"6B00", charisk => "00"), -- frame byte
|
||||
47 => (data => X"0000", charisk => "00"), -- gap
|
||||
48 => (data => X"7C00", charisk => "00"), -- frame byte
|
||||
49 => (data => X"00BC", charisk => "01"), -- align
|
||||
50 => (data => X"1600", charisk => "00"), -- frame byte
|
||||
51 => (data => X"0000", charisk => "00"), -- gap
|
||||
52 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
53 => (data => X"00BC", charisk => "01"), -- align
|
||||
54 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
55 => (data => X"0000", charisk => "00"), -- gap
|
||||
56 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
57 => (data => X"00BC", charisk => "01"), -- align
|
||||
58 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
59 => (data => X"0000", charisk => "00"), -- gap
|
||||
60 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
61 => (data => X"00BC", charisk => "01"), -- align
|
||||
62 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
63 => (data => X"0000", charisk => "00"), -- gap
|
||||
64 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
65 => (data => X"00BC", charisk => "01"), -- align
|
||||
66 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
67 => (data => X"0000", charisk => "00"), -- gap
|
||||
68 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
69 => (data => X"00BC", charisk => "01"), -- align
|
||||
70 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
71 => (data => X"0000", charisk => "00"), -- gap
|
||||
72 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
73 => (data => X"00BC", charisk => "01"), -- align
|
||||
74 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
75 => (data => X"0000", charisk => "00"), -- gap
|
||||
76 => (data => X"0000", charisk => "00"), -- frame byte
|
||||
77 => (data => X"00BC", charisk => "01"), -- align
|
||||
78 => (data => X"3C00", charisk => "10"), -- frame end
|
||||
79 => (data => X"0000", charisk => "00"), -- gap
|
||||
80 => (data => X"F900", charisk => "00"), -- check sum MSB
|
||||
81 => (data => X"00BC", charisk => "01"), -- align
|
||||
82 => (data => X"C600", charisk => "00"), -- check sum LSB
|
||||
83 => (data => X"0000", charisk => "00"), -- gap
|
||||
84 => (data => X"0000", charisk => "00"), -- gap
|
||||
85 => (data => X"00BC", charisk => "01"), -- align
|
||||
86 => (data => X"0000", charisk => "00"), -- gap
|
||||
87 => (data => X"0000", charisk => "00"), -- gap
|
||||
88 => (data => X"0000", charisk => "00"), -- gap
|
||||
89 => (data => X"00BC", charisk => "01"), -- align
|
||||
90 => (data => X"0000", charisk => "00"), -- gap
|
||||
91 => (data => X"0000", charisk => "00"), -- gap
|
||||
92 => (data => X"0000", charisk => "00"), -- gap
|
||||
93 => (data => X"00BC", charisk => "01"), -- align
|
||||
94 => (data => X"0000", charisk => "00"), -- gap
|
||||
95 => (data => X"0000", charisk => "00"), -- gap
|
||||
96 => (data => X"0000", charisk => "00"), -- gap
|
||||
97 => (data => X"00BC", charisk => "01"), -- align
|
||||
98 => (data => X"0000", charisk => "00"), -- gap
|
||||
99 => (data => X"0000", charisk => "00"), -- gap
|
||||
100 => (data => X"0000", charisk => "00"), -- gap
|
||||
101 => (data => X"00BC", charisk => "01"), -- align
|
||||
102 => (data => X"0000", charisk => "00"), -- gap
|
||||
103 => (data => X"0000", charisk => "00"), -- gap
|
||||
104 => (data => X"0000", charisk => "00"), -- gap
|
||||
105 => (data => X"00BC", charisk => "01"), -- align
|
||||
106 => (data => X"0000", charisk => "00"), -- gap
|
||||
107 => (data => X"0000", charisk => "00"), -- gap
|
||||
108 => (data => X"0000", charisk => "00"), -- gap
|
||||
109 => (data => X"00BC", charisk => "01"), -- align
|
||||
110 => (data => X"0000", charisk => "00"), -- gap
|
||||
111 => (data => X"0000", charisk => "00"), -- gap
|
||||
112 => (data => X"0000", charisk => "00"), -- gap
|
||||
113 => (data => X"00BC", charisk => "01"), -- align
|
||||
114 => (data => X"0000", charisk => "00"), -- gap
|
||||
115 => (data => X"0000", charisk => "00"), -- gap
|
||||
116 => (data => X"0000", charisk => "00"), -- gap
|
||||
117 => (data => X"00BC", charisk => "01"), -- align
|
||||
118 => (data => X"0000", charisk => "00"), -- gap
|
||||
119 => (data => X"0000", charisk => "00"), -- gap
|
||||
120 => (data => X"0000", charisk => "00"), -- gap
|
||||
121 => (data => X"00BC", charisk => "01"), -- align
|
||||
122 => (data => X"0000", charisk => "00"), -- gap
|
||||
123 => (data => X"0000", charisk => "00"), -- gap
|
||||
124 => (data => X"0000", charisk => "00"), -- gap
|
||||
125 => (data => X"00BC", charisk => "01"), -- align
|
||||
126 => (data => X"0000", charisk => "00"), -- gap
|
||||
127 => (data => X"000F", charisk => "00") -- BPM event
|
||||
);
|
||||
signal mgt_stream_index : integer range 0 to 511 := 0;
|
||||
signal mgt_stream : mgt_stream_type(511 downto 0) := (others=>(others=>(others=>'0')));
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- Timing decoder interface
|
||||
-----------------------------------------------------------------------------
|
||||
@ -199,8 +71,16 @@ architecture testbench of evr320_decoder_tb is
|
||||
signal evr_params : typ_evr320_params;
|
||||
signal mem_addr : std_logic_vector(11 downto 0) := (others => '0');
|
||||
signal mem_data : std_logic_vector(31 downto 0) := (others => '0');
|
||||
-- Decoder stream:
|
||||
type dec_stream_type is record
|
||||
data : std_logic_vector(7 downto 0);
|
||||
addr : std_logic_vector(10 downto 0);
|
||||
end record dec_stream_type;
|
||||
type dec_stream_check_arr is array (natural range <>) of dec_stream_type;
|
||||
|
||||
signal dec_stream_data : std_logic_vector(11+8-1 downto 0) := (others => '0');
|
||||
signal dec_stream_valid : std_logic;
|
||||
signal dec_stream_check : dec_stream_check_arr(127 downto 0);
|
||||
|
||||
signal usr_events : std_logic_vector( 3 downto 0) := (others => '0');
|
||||
|
||||
@ -271,28 +151,61 @@ begin
|
||||
process
|
||||
variable addr : std_logic_vector(10 downto 0);
|
||||
variable data : std_logic_vector(7 downto 0);
|
||||
variable i : integer := 0;
|
||||
begin
|
||||
wait until rising_edge(usr_clk);
|
||||
if (dec_stream_valid = '1') then
|
||||
addr := dec_stream_data(18 downto 8);
|
||||
data := dec_stream_data(7 downto 0);
|
||||
log(ID_SEGMENT_DATA, "Decoder Data Stream: addr=0x" & to_string(addr, HEX)
|
||||
wait until rising_edge(usr_clk);
|
||||
if (dec_stream_valid = '1') then
|
||||
addr := dec_stream_data(18 downto 8);
|
||||
data := dec_stream_data(7 downto 0);
|
||||
dec_stream_check(i).addr <= addr;
|
||||
dec_stream_check(i).data <= data;
|
||||
log(ID_SEGMENT_DATA, "Decoder Data Stream: addr=0x" & to_string(addr, HEX)
|
||||
& " data=0x" & to_string(data, HEX));
|
||||
end if;
|
||||
i := i + 1;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- Stimulus MGT interface
|
||||
-- Read stimuli file
|
||||
-----------------------------------------------------------------------------
|
||||
-- process(rxusrclk)
|
||||
-- begin
|
||||
-- if rising_edge(rxusrclk) then
|
||||
-- mgt_stream_index <= mgt_stream_index + 1;
|
||||
-- end if;
|
||||
-- end process mgt_stream_index_proc;
|
||||
|
||||
rxdata <= mgt_stream(mgt_stream_index).data;
|
||||
rxcharisk <= mgt_stream(mgt_stream_index).charisk;
|
||||
file_blk : block
|
||||
file file_stimuli : text;
|
||||
begin
|
||||
process
|
||||
variable file_line : line;
|
||||
variable data, event : std_logic_vector(7 downto 0);
|
||||
variable data_k, event_k : std_logic_vector(0 downto 0);
|
||||
variable space : character;
|
||||
variable i : integer;
|
||||
begin
|
||||
file_open(file_stimuli, "../tb/stimuli_mgt.dat", read_mode);
|
||||
readline(file_stimuli, file_line);
|
||||
readline(file_stimuli, file_line);
|
||||
i := 0;
|
||||
while not endfile(file_stimuli) loop
|
||||
readline(file_stimuli, file_line);
|
||||
hread(file_line, event);
|
||||
read(file_line, event_k);
|
||||
read(file_line, space);
|
||||
read(file_line, space);
|
||||
hread(file_line, data);
|
||||
read(file_line, space);
|
||||
read(file_line, data_k);
|
||||
-- write to array:
|
||||
mgt_stream(i).data <= data;
|
||||
mgt_stream(i).data_k <= data_k;
|
||||
mgt_stream(i).event <= data;
|
||||
mgt_stream(i).event_k <= event_k;
|
||||
mgt_stream_index <= i;
|
||||
--debug output:
|
||||
--log(ID_SEGMENT_DATA, "stimuli file: i=" & integer'image(i) & " event=0x" & to_string(event, HEX) & " k=" & to_string(event_k, HEX)
|
||||
-- & " data=0x" & to_string(data, HEX) & " k=" & to_string(data_k, HEX) & " ");
|
||||
i := i + 1;
|
||||
end loop;
|
||||
file_close(file_stimuli);
|
||||
wait;
|
||||
end process;
|
||||
end block;
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- Stimulus CPU interface
|
||||
@ -302,6 +215,11 @@ begin
|
||||
constant c_TB_NAME : string := "evr320_decoder_tb";
|
||||
variable mgt_stream_rep_var : integer := 0;
|
||||
variable mgt_stream_index_var : integer := 0;
|
||||
variable i,g : integer := 0;
|
||||
type state is (idle, payload, frame_end);
|
||||
variable var_data_state : state;
|
||||
variable var_data : std_logic_vector(7 downto 0);
|
||||
variable var_data_k : std_logic_vector(0 downto 0);
|
||||
begin
|
||||
-- init uvvm:
|
||||
set_log_file_name(c_TB_NAME & "_LOG.txt");
|
||||
@ -312,7 +230,7 @@ begin
|
||||
log(ID_LOG_HDR, "Start Simulation of evr320 decoder", C_SCOPE);
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
-- Get out of reset
|
||||
-- Get out of reset, enable events
|
||||
--------------------------------------------------------------------------
|
||||
evr_params.event_enable( 0) <= '1';
|
||||
evr_params.event_enable( 1) <= '0';
|
||||
@ -327,28 +245,66 @@ begin
|
||||
mem_addr <= x"000";
|
||||
await_value(rxlos, '0', 0 ns, 10 us, FAILURE, "wait for release RX LOS");
|
||||
--wait until (rxlos = '0');
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
-- Stimuli MGT
|
||||
--------------------------------------------------------------------------
|
||||
wait until rising_edge(rxusrclk);
|
||||
log(ID_DATA, "Stimuli Stream for MGT");
|
||||
for idx in 0 to mgt_stream_index loop
|
||||
--log(ID_FRAME_DATA, to_string(mgt_stream(idx).data, HEX), to_string(mgt_stream(idx).event, HEX));
|
||||
wait until rising_edge(rxusrclk);
|
||||
rxdata <= mgt_stream(idx).data & mgt_stream(idx).event;
|
||||
rxcharisk <= mgt_stream(idx).data_k & mgt_stream(idx).event_k;
|
||||
end loop;
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
-- Test receiving a package
|
||||
--------------------------------------------------------------------------
|
||||
-- send mgt stream:
|
||||
for mgt_stream_rep_var in 0 to 1 loop
|
||||
wait for 30 ns;
|
||||
for mgt_stream_index_var in 0 to 127 loop
|
||||
wait until rising_edge(rxusrclk);
|
||||
mgt_stream_index <= mgt_stream_index_var;
|
||||
end loop;
|
||||
end loop;
|
||||
|
||||
wait for 1 us;
|
||||
log(ID_DATA, "Read Segment from DPRAM");
|
||||
-- print 16 words from dpram data buffer:
|
||||
for offset in 0 to 7 loop
|
||||
mem_addr <= std_logic_vector(to_unsigned(8 + offset, 12));
|
||||
wait until rising_edge(rxusrclk);
|
||||
wait until rising_edge(rxusrclk);
|
||||
wait until rising_edge(rxusrclk);
|
||||
wait until rising_edge(usr_clk);
|
||||
wait until rising_edge(usr_clk);
|
||||
wait until rising_edge(usr_clk);
|
||||
log(ID_PACKET_DATA, "Data buffer DPRAM: addr=0x" & to_string(mem_addr, HEX) & " data=0x" & to_string(mem_data, HEX));
|
||||
end loop;
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
-- Check if decoder stream is correct
|
||||
--------------------------------------------------------------------------
|
||||
var_data := x"00";
|
||||
var_data_k := "0";
|
||||
i := 0;
|
||||
g := 0;
|
||||
var_data_state := idle;
|
||||
-- loop through mgt frame and compare frame bytes with received decoder-stream:
|
||||
while var_data_state /= frame_end loop
|
||||
i := i + 1;
|
||||
var_data := mgt_stream(i).data;
|
||||
var_data_k := mgt_stream(i).data_k;
|
||||
if (var_data = x"3C" and var_data_k = "1") then -- check if frame end:
|
||||
var_data_state := frame_end;
|
||||
next;
|
||||
end if;
|
||||
if (var_data = x"5C" and var_data_k = "1") then -- check if frame start:
|
||||
i := i + 3; -- skip segment address and dist. bytes
|
||||
var_data_state := payload;
|
||||
g := 0; -- init decoder stream index
|
||||
next;
|
||||
end if;
|
||||
-- compare only frame bytes:
|
||||
if (var_data_state = payload) then
|
||||
check_value(dec_stream_check(g).data, var_data, ERROR, "Compare Sent and Received Decoder Stream Data");
|
||||
--log (ID_CTRL, " check: " & to_string(var_data, HEX) & " = " & to_string(dec_stream_check(g).data, HEX));
|
||||
i := i + 1; -- skip dist. byte
|
||||
g := g + 1;
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
-- Test Done
|
||||
--------------------------------------------------------------------------
|
||||
|
130
tb/stimuli_mgt.dat
Normal file
130
tb/stimuli_mgt.dat
Normal file
@ -0,0 +1,130 @@
|
||||
# stimuli timing master frame, hex
|
||||
# event k data k comment
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 5C 1 frame start
|
||||
00 0 00 0 gap
|
||||
00 0 02 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 DB 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 93 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 36 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 41 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 A3 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 1D 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 7F 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 33 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 9B 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 F3 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 51 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 04 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 6B 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 7C 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 16 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 frame byte
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 frame byte
|
||||
BC 1 00 0 align
|
||||
00 0 3C 1 frame end
|
||||
00 0 00 0 gap
|
||||
00 0 F9 0 check sum MSB
|
||||
BC 1 00 0 align
|
||||
00 0 C6 0 check sum LSB
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
00 0 00 0 gap
|
||||
BC 1 00 0 align
|
||||
00 0 00 0 gap
|
||||
0F 0 00 0 BPM event
|
Reference in New Issue
Block a user