wonka
Newbie level 4
Hello,
I wrote a Testbenches as P.S show,
And I got some warning in ModelSim:
Warning: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 'X'(es).
Although I know this warning do not affect the TestBench work, I still try to know, how to set a std_logic value for output pin which initialization?
as you can see in my Testbench, I set 'U' for some output pin in the begining, is it right?
-----------------------------------------------------------------------------------------
P.S
entity rec_tb is
end rec_tb;
------------------------------------------------------------------------
-- testbench for BER receiver
------------------------------------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;
architecture stimulus of rec_tb is
-- import component
component seq_rec
port (RXclk :in std_logic;
RXenb :in std_logic;
RXdata :in std_logic;
ERRpulse ut std_logic;
D0 ut std_logic;
D1 ut std_logic;
D2 ut std_logic;
D3 ut std_logic;
D4 ut std_logic;
D5 ut std_logic;
D6 ut std_logic;
D7 ut std_logic;
RXsync ut std_logic);
end component;
-- declare signal
signal CE :std_logic;
signal RXclk :std_logic;
signal RXenb :std_logic;
signal RXdata :std_logic;
signal ERRpulse :std_logic;
signal D0 :std_logic;
signal D1 :std_logic;
signal D2 :std_logic;
signal D3 :std_logic;
signal D4 :std_logic;
signal D5 :std_logic;
signal D6 :std_logic;
signal D7 :std_logic;
signal RXsync :std_logic;
type test_record_t is record
CE :std_logic; -- clock enable
RXenb :std_logic;
RXdata :std_logic;
ERRpulse :std_logic;
D0 :std_logic;
D1 :std_logic;
D2 :std_logic;
D3 :std_logic;
D4 :std_logic;
D5 :std_logic;
D6 :std_logic;
D7 :std_logic;
RXsync :std_logic;
end record;
type test_array_t is array(positive range <>) of test_record_t;
-- The following constant declaration describes the vector
constant test_patterns : test_array_t := (
-- CE, RXenb, RXdata, ERRpulse, D0, D1, D2, D3, D4, D5, D6, D7, RXsync
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'), -- 64 bits channel Sieze
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'), -- system idetifne code
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'), -- Frequency Hopping code
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1') -- fist segment of test
sequence
);
--
-- convert a std_logic value to a character
--
type stdlogic_to_char_t is array(std_logic) of character;
constant to_char : stdlogic_to_char_t := (
'U' => 'U',
'X' => 'X',
'0' => '0',
'1' => '1',
'Z' => 'Z',
'W' => 'W',
'L' => 'L',
'H' => 'H',
'-' => '-');
begin
-- instantiate the component
uut: seq_rec port map(RXclk,
RXenb,
RXdata,
ERRpulse,
D0,
D1,
D2,
D3,
D4,
D5,
D6,
D7,
RXsync);
-- provide stimulus and check the result
test: process
variable vector : test_record_t;
variable found_error : boolean := false;
begin
for i in test_patterns'range loop
vector := test_patterns(i);
-- apply the stimuls
CE <= vector.CE;
RXenb <= vector.RXenb;
RXdata <= vector.RXdata;
ERRpulse <= vector.ERRpulse;
D0 <= vector.D0;
D1 <= vector.D1;
D2 <= vector.D2;
D3 <= vector.D3;
D4 <= vector.D4;
D5 <= vector.D5;
D6 <= vector.D6;
D7 <= vector.D7;
RXsync <= vector.RXsync;
-- clock (low-high-low) # fist method
RXclk <= '0';
wait for 217 ns;
if CE = '1' then
RXclk <= '1';
end if;
wait for 434 ns;
RXclk <= '0';
wait for 217 ns;
-- check the results of ERRpulse
if (ERRpulse /= vector.ERRpulse) then
assert false
report "ERRpulse is " & to_char(ERRpulse)
& ". Expected " & to_char(vector.ERRpulse);
found_error := true;
end if;
-- check the results of D0
if (D0 /= vector.D0) then
assert false
report "D0 is " & to_char(D0) & ". "
& "Expected value is " & to_char(vector.D0);
found_error := true;
end if;
-- check the results of D1
if (D1 /= vector.D1) then
assert false
report "D1 is " & to_char(D1) & ". "
& "Expected value is " & to_char(vector.D1);
found_error := true;
end if;
-- check the results of D2
if (D2 /= vector.D2) then
assert false
report "D2 is " & to_char(D2) & ". "
& "Expected value is " & to_char(vector.D2);
found_error := true;
end if;
-- check the results of D3
if (D1 /= vector.D3) then
assert false
report "D3 is " & to_char(D3) & ". "
& "Expected value is " & to_char(vector.D3);
found_error := true;
end if;
-- check the results of D4
if (D4 /= vector.D4) then
assert false
report "D4 is " & to_char(D4) & ". "
& "Expected value is " & to_char(vector.D4);
found_error := true;
end if;
-- check the results of D5
if (D5 /= vector.D1) then
assert false
report "D5 is " & to_char(D5) & ". "
& "Expected value is " & to_char(vector.D5);
found_error := true;
end if;
-- check the results of D6
if (D6 /= vector.D6) then
assert false
report "D6 is " & to_char(D6) & ". "
& "Expected value is " & to_char(vector.D6);
found_error := true;
end if;
-- check the results of D7
if (D7 /= vector.D7) then
assert false
report "D7 is " & to_char(D7) & ". "
& "Expected value is " & to_char(vector.D7);
found_error := true;
end if;
-- check the results of D6
if (RXsync /= vector.RXsync) then
assert false
report "RXsync is " & to_char(RXsync) & ". "
& "Expected value is " & to_char(vector.RXsync);
found_error := true;
end if;
end loop;
assert not found_error
report "There were ERRORS in the test."
severity note;
assert found_error
report "Test completed with no errors."
severity note;
wait;
end process;
end stimulus;
I wrote a Testbenches as P.S show,
And I got some warning in ModelSim:
Warning: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 'X'(es).
Although I know this warning do not affect the TestBench work, I still try to know, how to set a std_logic value for output pin which initialization?
as you can see in my Testbench, I set 'U' for some output pin in the begining, is it right?
-----------------------------------------------------------------------------------------
P.S
entity rec_tb is
end rec_tb;
------------------------------------------------------------------------
-- testbench for BER receiver
------------------------------------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;
architecture stimulus of rec_tb is
-- import component
component seq_rec
port (RXclk :in std_logic;
RXenb :in std_logic;
RXdata :in std_logic;
ERRpulse ut std_logic;
D0 ut std_logic;
D1 ut std_logic;
D2 ut std_logic;
D3 ut std_logic;
D4 ut std_logic;
D5 ut std_logic;
D6 ut std_logic;
D7 ut std_logic;
RXsync ut std_logic);
end component;
-- declare signal
signal CE :std_logic;
signal RXclk :std_logic;
signal RXenb :std_logic;
signal RXdata :std_logic;
signal ERRpulse :std_logic;
signal D0 :std_logic;
signal D1 :std_logic;
signal D2 :std_logic;
signal D3 :std_logic;
signal D4 :std_logic;
signal D5 :std_logic;
signal D6 :std_logic;
signal D7 :std_logic;
signal RXsync :std_logic;
type test_record_t is record
CE :std_logic; -- clock enable
RXenb :std_logic;
RXdata :std_logic;
ERRpulse :std_logic;
D0 :std_logic;
D1 :std_logic;
D2 :std_logic;
D3 :std_logic;
D4 :std_logic;
D5 :std_logic;
D6 :std_logic;
D7 :std_logic;
RXsync :std_logic;
end record;
type test_array_t is array(positive range <>) of test_record_t;
-- The following constant declaration describes the vector
constant test_patterns : test_array_t := (
-- CE, RXenb, RXdata, ERRpulse, D0, D1, D2, D3, D4, D5, D6, D7, RXsync
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'), -- 64 bits channel Sieze
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '1', 'U', 'U', 'U', 'U','U','U','U','U','U','U'), -- system idetifne code
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', 'U', 'U', 'U', 'U','U','U','U','U','U','U'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'), -- Frequency Hopping code
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '1', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1'),
('1', '1', '0', '0', '0', '0', '0','0','0','0','0','0','1') -- fist segment of test
sequence
);
--
-- convert a std_logic value to a character
--
type stdlogic_to_char_t is array(std_logic) of character;
constant to_char : stdlogic_to_char_t := (
'U' => 'U',
'X' => 'X',
'0' => '0',
'1' => '1',
'Z' => 'Z',
'W' => 'W',
'L' => 'L',
'H' => 'H',
'-' => '-');
begin
-- instantiate the component
uut: seq_rec port map(RXclk,
RXenb,
RXdata,
ERRpulse,
D0,
D1,
D2,
D3,
D4,
D5,
D6,
D7,
RXsync);
-- provide stimulus and check the result
test: process
variable vector : test_record_t;
variable found_error : boolean := false;
begin
for i in test_patterns'range loop
vector := test_patterns(i);
-- apply the stimuls
CE <= vector.CE;
RXenb <= vector.RXenb;
RXdata <= vector.RXdata;
ERRpulse <= vector.ERRpulse;
D0 <= vector.D0;
D1 <= vector.D1;
D2 <= vector.D2;
D3 <= vector.D3;
D4 <= vector.D4;
D5 <= vector.D5;
D6 <= vector.D6;
D7 <= vector.D7;
RXsync <= vector.RXsync;
-- clock (low-high-low) # fist method
RXclk <= '0';
wait for 217 ns;
if CE = '1' then
RXclk <= '1';
end if;
wait for 434 ns;
RXclk <= '0';
wait for 217 ns;
-- check the results of ERRpulse
if (ERRpulse /= vector.ERRpulse) then
assert false
report "ERRpulse is " & to_char(ERRpulse)
& ". Expected " & to_char(vector.ERRpulse);
found_error := true;
end if;
-- check the results of D0
if (D0 /= vector.D0) then
assert false
report "D0 is " & to_char(D0) & ". "
& "Expected value is " & to_char(vector.D0);
found_error := true;
end if;
-- check the results of D1
if (D1 /= vector.D1) then
assert false
report "D1 is " & to_char(D1) & ". "
& "Expected value is " & to_char(vector.D1);
found_error := true;
end if;
-- check the results of D2
if (D2 /= vector.D2) then
assert false
report "D2 is " & to_char(D2) & ". "
& "Expected value is " & to_char(vector.D2);
found_error := true;
end if;
-- check the results of D3
if (D1 /= vector.D3) then
assert false
report "D3 is " & to_char(D3) & ". "
& "Expected value is " & to_char(vector.D3);
found_error := true;
end if;
-- check the results of D4
if (D4 /= vector.D4) then
assert false
report "D4 is " & to_char(D4) & ". "
& "Expected value is " & to_char(vector.D4);
found_error := true;
end if;
-- check the results of D5
if (D5 /= vector.D1) then
assert false
report "D5 is " & to_char(D5) & ". "
& "Expected value is " & to_char(vector.D5);
found_error := true;
end if;
-- check the results of D6
if (D6 /= vector.D6) then
assert false
report "D6 is " & to_char(D6) & ". "
& "Expected value is " & to_char(vector.D6);
found_error := true;
end if;
-- check the results of D7
if (D7 /= vector.D7) then
assert false
report "D7 is " & to_char(D7) & ". "
& "Expected value is " & to_char(vector.D7);
found_error := true;
end if;
-- check the results of D6
if (RXsync /= vector.RXsync) then
assert false
report "RXsync is " & to_char(RXsync) & ". "
& "Expected value is " & to_char(vector.RXsync);
found_error := true;
end if;
end loop;
assert not found_error
report "There were ERRORS in the test."
severity note;
assert found_error
report "Test completed with no errors."
severity note;
wait;
end process;
end stimulus;