⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tb_mc8051_siu_sim.vhd

📁 VHDL写的8051内核,可用的,好用,有兴趣可下载,在外国网站下载的
💻 VHD
📖 第 1 页 / 共 2 页
字号:
        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 + -