Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

TestBenches for Bit Error Rate System

Status
Not open for further replies.

wonka

Newbie level 4
Joined
Jan 6, 2007
Messages
7
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,431
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 :eek:ut std_logic;
D0 :eek:ut std_logic;
D1 :eek:ut std_logic;
D2 :eek:ut std_logic;
D3 :eek:ut std_logic;
D4 :eek:ut std_logic;
D5 :eek:ut std_logic;
D6 :eek:ut std_logic;
D7 :eek:ut std_logic;
RXsync :eek: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;
 

Plz help me, thanks.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top