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

📄 tb_mc8051_siu_sim.vhd

📁 这是用C语言编写的关于8051的VHDL的源代码
💻 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 + -