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

📄 tb_mc8051_tmrctr_sim.vhd

📁 51单片机内核vhdl实现 xilinx平台的
💻 VHD
📖 第 1 页 / 共 2 页
字号:
    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(255,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(255,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(153,8);     -- "10011001"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 640;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;    --------------------------------------------------------------------------------- Testing MODE 2---------------------------------------------------------------------------------------------------------------------------------------------------------------- set the two timer/counters in mode 2 as timers-------------------------------------------------------------------------------    -- Perform reloads of tmr/ctr registers    s_wt <= conv_std_logic_vector(0,2);         -- TL0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(250,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(1,2);         -- TL1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(250,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(34,8);      -- "00100010"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 640;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;--------------------------------------------------------------------------------- set the two timer/counters in mode 2 as counters-------------------------------------------------------------------------------    -- Perform reloads of tmr/ctr registers    s_wt <= conv_std_logic_vector(0,2);         -- TL0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(1,2);         -- TL1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(102,8);     -- "01100110"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 1280;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;--------------------------------------------------------------------------------- set the two timer/counters in mode 2 as counters using interrupt inputs-------------------------------------------------------------------------------    -- Perform reloads of tmr/ctr registers    s_wt <= conv_std_logic_vector(0,2);         -- TL0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(1,2);         -- TL1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(238,8);     -- "11101110"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 1280;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;    --------------------------------------------------------------------------------- set the two timer/counters in mode 2 as timers using interrupt inputs-------------------------------------------------------------------------------    -- Perform reloads of tmr/ctr registers    s_wt <= conv_std_logic_vector(0,2);         -- TL0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(1,2);         -- TL1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(170,8);          -- "101010101"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 800;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;    --------------------------------------------------------------------------------- Testing MODE 3---------------------------------------------------------------------------------------------------------------------------------------------------------------- set the two timer/counters in mode 3 as timers-------------------------------------------------------------------------------    -- Perform reloads of tmr/ctr registers    s_wt <= conv_std_logic_vector(0,2);         -- TL0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(1,2);         -- TL1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(51,8);           -- "00110011"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 960;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;--------------------------------------------------------------------------------- set the two timer/counters in mode 3 as counters-------------------------------------------------------------------------------    -- Perform reloads of tmr/ctr registers    s_wt <= conv_std_logic_vector(0,2);         -- TL0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(1,2);         -- TL1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(119,8);           -- "01110111"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 960;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;--------------------------------------------------------------------------------- set the two timer/counters in mode 3 as counters using interrupt inputs-------------------------------------------------------------------------------    -- Perform reloads of tmr/ctr registers    s_wt <= conv_std_logic_vector(0,2);         -- TL0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(1,2);         -- TL1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(255,8);          -- "11111111"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 960;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;    --------------------------------------------------------------------------------- set the two timer/counters in mode 3 as timers using interrupt inputs-------------------------------------------------------------------------------    -- Perform reloads of tmr/ctr registers    s_wt <= conv_std_logic_vector(0,2);         -- TL0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(1,2);         -- TL1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(252,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(2,2);         -- TH0    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt <= conv_std_logic_vector(3,2);         -- TH1    s_wt_en <= '1';    s_reload <= conv_std_logic_vector(253,8);   -- reload value    wait for one_period;    s_wt_en <= '0';        s_tmod <= conv_std_logic_vector(187,8);          -- "10111011"    s_tcon_tr0 <= '1';        s_tcon_tr1 <= '1';    wait for one_period * 960;    s_tcon_tr0 <= '0';        s_tcon_tr1 <= '0';    wait for one_period * 4;    wait for one_period * 10;    assert FALSE report "END OF SIMULATION" severity failure;    --------------------------------------------------------------------------------- END of test after ~1000 * one_period-------------------------------------------------------------------------------end process p_run;-- system clock definitionp_clock:   process       variable  v_loop1 :   integer;      begin   clk <= '0';   wait for one_period / 2;   while true loop      clk <= not clk;      wait for one_period / 2;   end loop;   end process p_clock;p_tx:   process                       -- stimulate external inputs       variable  v_loop1 :   integer;      begin   s_t0 <= '0';   s_t1 <= '0';   wait for one_period / 4;   while true loop      s_t0 <= not s_t0;      s_t1 <= not s_t1;            wait for one_period * 32;   end loop;   end process p_tx;p_intx:   process                       -- stimulate external inputs       variable  v_loop1 :   integer;      begin   s_int0 <= '0';   s_int1 <= '0';   wait for one_period / 4;   while true loop      s_int0 <= not s_int0;      s_int1 <= not s_int1;            wait for one_period * 64;   end loop;   end process p_intx;p_description: process(s_tmod)begincase s_tmod(3 downto 0) is    when "0000" => tmr_ctr0 <= MODE0_timer;    when "1000" => tmr_ctr0 <= MODE0_timer_interrupt;    when "0100" => tmr_ctr0 <= MODE0_counter;    when "1100" => tmr_ctr0 <= MODE0_counter_interrupt;    when "0001" => tmr_ctr0 <= MODE1_timer;    when "1001" => tmr_ctr0 <= MODE1_timer_interrupt;    when "0101" => tmr_ctr0 <= MODE1_counter;    when "1101" => tmr_ctr0 <= MODE1_counter_interrupt;    when "0010" => tmr_ctr0 <= MODE2_timer;    when "1010" => tmr_ctr0 <= MODE2_timer_interrupt;    when "0110" => tmr_ctr0 <= MODE2_counter;    when "1110" => tmr_ctr0 <= MODE2_counter_interrupt;    when "0011" => tmr_ctr0 <= MODE3_timer;    when "1011" => tmr_ctr0 <= MODE3_timer_interrupt;    when "0111" => tmr_ctr0 <= MODE3_counter;    when "1111" => tmr_ctr0 <= MODE3_counter_interrupt;    when others => tmr_ctr0 <= SIMULATION_ERROR;end case;case s_tmod(7 downto 4) is    when "0000" => tmr_ctr1 <= MODE0_timer;    when "1000" => tmr_ctr1 <= MODE0_timer_interrupt;    when "0100" => tmr_ctr1 <= MODE0_counter;    when "1100" => tmr_ctr1 <= MODE0_counter_interrupt;    when "0001" => tmr_ctr1 <= MODE1_timer;    when "1001" => tmr_ctr1 <= MODE1_timer_interrupt;    when "0101" => tmr_ctr1 <= MODE1_counter;    when "1101" => tmr_ctr1 <= MODE1_counter_interrupt;    when "0010" => tmr_ctr1 <= MODE2_timer;    when "1010" => tmr_ctr1 <= MODE2_timer_interrupt;    when "0110" => tmr_ctr1 <= MODE2_counter;    when "1110" => tmr_ctr1 <= MODE2_counter_interrupt;    when "0011" => tmr_ctr1 <= MODE3_timer;    when "1011" => tmr_ctr1 <= MODE3_timer_interrupt;    when "0111" => tmr_ctr1 <= MODE3_counter;    when "1111" => tmr_ctr1 <= MODE3_counter_interrupt;    when others => tmr_ctr1 <= SIMULATION_ERROR;end case;end process p_description;end sim;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -