📄 tb_mc8051_siu_sim.vhd
字号:
severity failure;
assert s_sbuf_out_b /= "01010101"
report "CORRECT DATA RECEIVED IN MODE 1! DATA RECEIVED: 55h"
severity note;
wait for one_period * 600;
s_sbuf_a <= conv_std_logic_vector(255, 8); -- 11111111
s_trans_a <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
wait until s_scon_out_b(0) = '1' and s_scon_out_a(1) = '1';
assert s_sbuf_out_b = "11111111"
report "ERROR: FALSE DATA RECEIVED IN MODE 1! DATA SENT: FFh"
severity failure;
assert s_sbuf_out_b /= "11111111"
report "CORRECT DATA RECEIVED IN MODE 1! DATA RECEIVED: FFh"
severity note;
wait for one_period * 600;
s_sbuf_a <= conv_std_logic_vector(0, 8); -- 00000000
s_trans_a <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
wait until s_scon_out_b(0) = '1' and s_scon_out_a(1) = '1';
assert s_sbuf_out_b = "00000000"
report "ERROR: FALSE DATA RECEIVED IN MODE 1! DATA SENT: 00h"
severity failure;
assert s_sbuf_out_b /= "00000000"
report "CORRECT DATA RECEIVED IN MODE 1! DATA RECEIVED: 00h"
severity note;
wait for one_period * 600;
s_smod_a <= '1';
s_scon_a <= conv_std_logic_vector(10, 6); -- 001010 MODE 1 + RI=0
s_sbuf_a <= conv_std_logic_vector(170, 8); -- 10101010
s_smod_b <= '1';
s_scon_b <= conv_std_logic_vector(8, 6); -- 001000 MODE 1 + RI=0
s_sbuf_b <= conv_std_logic_vector(170, 8); -- 10101010
s_trans_b <= '1'; -- start transmission
wait for one_period * 1;
s_trans_b <= '0';
wait until s_scon_out_a(0) = '1';
assert s_sbuf_out_a = "10101010"
report "ERROR: FALSE DATA RECEIVED IN MODE 1! DATA SENT: AAh"
severity failure;
assert s_sbuf_out_a /= "10101010"
report "CORRECT DATA RECEIVED IN MODE 1! DATA RECEIVED: AAh"
severity note;
wait for one_period * 600;
s_smod_a <= '1';
s_scon_a <= conv_std_logic_vector(10, 6); -- 001010 MODE 1 + RI=0
s_sbuf_a <= conv_std_logic_vector(171, 8); -- 10101011
s_smod_b <= '1';
s_scon_b <= conv_std_logic_vector(10, 6); -- 001000 MODE 1 + RI=0
s_sbuf_b <= conv_std_logic_vector(170, 8); -- 10101010
s_trans_b <= '1'; -- start transmission
s_trans_a <= '1'; -- start transmission
wait for one_period * 1;
s_trans_b <= '0';
s_trans_a <= '0';
wait until s_scon_out_a(0) = '1' and s_scon_out_b(0) = '1';
assert s_sbuf_out_a = "10101010"
report "ERROR: FALSE DATA RECEIVED IN MODE 1! DATA SENT: AAh"
severity failure;
assert s_sbuf_out_a /= "10101010"
report "CORRECT DATA RECEIVED IN MODE 1! DATA RECEIVED: AAh"
severity note;
assert s_sbuf_out_b = "10101011"
report "ERROR: FALSE DATA RECEIVED IN MODE 1! DATA SENT: ABh"
severity failure;
assert s_sbuf_out_b /= "10101011"
report "CORRECT DATA RECEIVED IN MODE 1! DATA RECEIVED: ABh"
severity note;
wait for one_period * 600;
-------------------------------------------------------------------------
-- Testing MODE 2
-------------------------------------------------------------------------
s_smod_a <= '1';
s_scon_a <= conv_std_logic_vector(16, 6); -- 010000 MODE 2
s_sbuf_a <= conv_std_logic_vector(171, 8); -- 10101011
s_smod_b <= '1';
s_scon_b <= conv_std_logic_vector(18, 6); -- 010010 MODE 2 + REN=1
s_sbuf_b <= conv_std_logic_vector(171, 8); -- 10101011
s_trans_a <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
wait until s_scon_out_b(0) = '1';
assert s_sbuf_out_b = "10101011"
report "ERROR: FALSE DATA RECEIVED IN MODE 2! DATA SENT: ABh"
severity failure;
assert s_sbuf_out_b /= "10101011"
report "CORRECT DATA RECEIVED IN MODE 2! DATA RECEIVED: ABh"
severity note;
wait for one_period * 400;
s_sbuf_a <= conv_std_logic_vector(86, 8); -- 01010110
s_trans_a <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
wait until s_scon_out_b(0) = '1' and s_scon_out_a(1) = '1';
assert s_sbuf_out_b = "01010110"
report "ERROR: FALSE DATA RECEIVED IN MODE 2! DATA SENT: 56h"
severity failure;
assert s_sbuf_out_b /= "01010110"
report "CORRECT DATA RECEIVED IN MODE 2! DATA RECEIVED: 56h"
severity note;
wait for one_period * 400;
s_smod_a <= '1';
s_scon_a <= conv_std_logic_vector(18, 6); -- 010000 MODE 2
s_sbuf_a <= conv_std_logic_vector(172, 8); -- 10101100
s_smod_b <= '1';
s_scon_b <= conv_std_logic_vector(18, 6); -- 010010 MODE 2 + REN=1
s_sbuf_b <= conv_std_logic_vector(172, 8); -- 10101100
s_trans_a <= '1'; -- start transmission
s_trans_b <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
s_trans_b <= '0';
wait until s_scon_out_b(0) = '1' and s_scon_out_a(0) = '1';
assert s_sbuf_out_b = "10101100"
report "ERROR: FALSE DATA RECEIVED IN MODE 2! DATA SENT: ACh"
severity failure;
assert s_sbuf_out_b /= "10101100"
report "CORRECT DATA RECEIVED IN MODE 2! DATA RECEIVED: ACh"
severity note;
assert s_sbuf_out_a = "10101100"
report "ERROR: FALSE DATA RECEIVED IN MODE 2! DATA SENT: ACh"
severity failure;
assert s_sbuf_out_a /= "10101100"
report "CORRECT DATA RECEIVED IN MODE 2! DATA RECEIVED: ACh"
severity note;
wait for one_period * 400;
s_smod_a <= '1';
s_scon_a <= conv_std_logic_vector(18, 6); -- 010000 MODE 2
s_sbuf_a <= conv_std_logic_vector(0, 8); -- 00000000
s_smod_b <= '1';
s_scon_b <= conv_std_logic_vector(18, 6); -- 010010 MODE 2 + REN=1
s_sbuf_b <= conv_std_logic_vector(255, 8); -- 11111111
s_trans_a <= '1'; -- start transmission
s_trans_b <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
s_trans_b <= '0';
wait until s_scon_out_b(0) = '1' and s_scon_out_a(0) = '1';
assert s_sbuf_out_b = "00000000"
report "ERROR: FALSE DATA RECEIVED IN MODE 2! DATA SENT: 00h"
severity failure;
assert s_sbuf_out_b /= "00000000"
report "CORRECT DATA RECEIVED IN MODE 2! DATA RECEIVED: 00h"
severity note;
assert s_sbuf_out_a = "11111111"
report "ERROR: FALSE DATA RECEIVED IN MODE 2! DATA SENT: FFh"
severity failure;
assert s_sbuf_out_a /= "11111111"
report "CORRECT DATA RECEIVED IN MODE 2! DATA RECEIVED: FFh"
severity note;
wait for one_period * 400;
-------------------------------------------------------------------------
-- Testing MODE 3
-------------------------------------------------------------------------
s_scon_a <= conv_std_logic_vector(16#38#, 6); -- 111000 MODE 3 + RI=1
s_sbuf_a <= conv_std_logic_vector(16#BE#, 8); -- 10111110
s_scon_b <= conv_std_logic_vector(16#1A#, 6); -- 011010 MODE 3 + REN=1
s_trans_a <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
wait until s_scon_out_b(0) = '1';
assert s_sbuf_out_b = "10111110"
report "ERROR: FALSE DATA RECEIVED IN MODE 3! DATA SENT: BEh"
severity failure;
assert s_sbuf_out_b /= "10111110"
report "CORRECT DATA RECEIVED IN MODE 3! DATA RECEIVED: BEh"
severity note;
wait for one_period * 4000;
s_sbuf_a <= conv_std_logic_vector(16#55#, 8); -- 01010101
s_smod_a <= '0';
s_smod_b <= '0';
s_trans_a <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
wait until s_scon_out_b(0) = '1' and s_scon_out_a(1) = '1';
assert s_sbuf_out_b = "01010101"
report "ERROR: FALSE DATA RECEIVED IN MODE 3! DATA SENT: 55h"
severity failure;
assert s_sbuf_out_b /= "01010101"
report "CORRECT DATA RECEIVED IN MODE 3! DATA RECEIVED: 55h"
severity note;
wait for one_period * 4000;
s_scon_a <= conv_std_logic_vector(16#1A#, 6); -- 011010 MODE 3 + RI=0
s_sbuf_b <= conv_std_logic_vector(16#BE#, 8); -- 10111110
s_scon_b <= conv_std_logic_vector(16#1A#, 6); -- 011010 MODE 3 + REN=1
s_sbuf_a <= conv_std_logic_vector(16#B0#, 8); -- 10110000
s_trans_a <= '1'; -- start transmission
s_trans_b <= '1'; -- start transmission
wait for one_period * 1;
s_trans_a <= '0';
s_trans_b <= '0';
wait until s_scon_out_b(0) = '1' and s_scon_out_a(0) = '1';
assert s_sbuf_out_b = "10110000"
report "ERROR: FALSE DATA RECEIVED IN MODE 3! DATA SENT: B0h"
severity failure;
assert s_sbuf_out_b /= "10110000"
report "CORRECT DATA RECEIVED IN MODE 3! DATA RECEIVED: B0h"
severity note;
assert s_sbuf_out_a = "10111110"
report "ERROR: FALSE DATA RECEIVED IN MODE 3! DATA SENT: BEh"
severity failure;
assert s_sbuf_out_a /= "10111110"
report "CORRECT DATA RECEIVED IN MODE 3! DATA RECEIVED: BEh"
severity note;
wait for one_period * 4000;
-------------------------------------------------------------------------
-- END of test
-------------------------------------------------------------------------
wait for one_period * 10;
assert false report "--- SIMULATION ENDED WITHOUT ERROR!! ---"
severity failure;
end process p_run;
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- System clock definition
-------------------------------------------------------------------------------
clk_b <= clk_a;
p_clock : process
variable v_loop1 : integer;
begin
clk_a <= '0';
wait for one_period / 2;
while true loop
clk_a <= not clk_a;
wait for one_period / 2;
end loop;
end process p_clock;
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Generate timer1 overflow flag
-------------------------------------------------------------------------------
s_tf_b <= s_tf_a after one_period * 2;
p_tf : process
variable v_loop1 : integer;
begin
s_tf_a <= '0';
wait for one_period + one_period / 2 + 5 ns;
if s_scon_a(4) /= s_scon_a(3) then -- Mode 1,3
while true loop
s_tf_a <= not s_tf_a;
wait for one_period * 20;
end loop;
else
s_tf_a <= '0';
end if;
end process p_tf;
-------------------------------------------------------------------------------
end sim;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -