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

📄 viterbi_block_tb.vhd

📁 这是一个计算维特比译码的程序
💻 VHD
📖 第 1 页 / 共 2 页
字号:
      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '0',      '1',      '0',      '0',      '0',      '1',      '1',      '0',      '1',      '1',      '1',      '1',      '0',      '0',      '1',      '1',      '0',      '1',      '1',      '0',      '1',      '1',      '0',      '0',      '1',      '1',      '1',      '1',      '0',      '0',      '0',      '0',      '1',      '1',      '0',      '1',      '1',      '0',      '1',      '0',      '0',      '1',      '1',      '1',      '0',      '0',      '0',      '0',      '0',      '1',      '0',      '1',      '0',      '0',      '0',      '0',      '1',      '1',      '1',      '0',      '0',      '1',      '1',      '0',      '0',      '0',      '1',      '1',      '1');END viterbi_block_tb_pkg;-- ----------------------------------------------------------------- Module: viterbi_block_tb-- Simulink Path: hdlsrc-- Created: 2009-03-24 16:24:20-- Hierarchy Level: 1------ -------------------------------------------------------------LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.numeric_std.ALL;USE work.viterbi_block_pkg.ALL;USE work.viterbi_block_tb_pkg.ALL;ENTITY viterbi_block_tb ISEND viterbi_block_tb;ARCHITECTURE rtl OF viterbi_block_tb IS  -- -------------------------------------------------------------  -- Component Declarations  -- -------------------------------------------------------------  COMPONENT viterbi_block   PORT( clk                             :   IN    std_logic;          reset                           :   IN    std_logic;          clk_enable                      :   IN    std_logic;          In1                             :   IN    vector_of_std_logic_vector2(0 TO 1); -- sfix6_En3         ce_out                          :   OUT   std_logic;          Out1                            :   OUT   std_logic           );  END COMPONENT;   -- -------------------------------------------------------------  -- Component Configuration Statements  -- -------------------------------------------------------------  FOR ALL : viterbi_block    USE ENTITY work.viterbi_block(rtl);  -- Constants  CONSTANT clk_high                         : time := 5 ns;  CONSTANT clk_low                          : time := 5 ns;  CONSTANT clk_period                       : time := 10 ns;  CONSTANT clk_hold                         : time := 2 ns;  CONSTANT clk_setup                        : time := 2 ns;  CONSTANT clk2Q                            : time := 2 ns;  CONSTANT delay                            : time := 2 ns;  CONSTANT CLKRATE                        : integer := 1; -- uint32  CONSTANT LATENCY                        : integer := 1; -- uint32  CONSTANT NO_OF_TESTS                    : integer := 101; -- uint32  CONSTANT MAX_TIMEOUT                    : integer := 2; -- uint32  CONSTANT MAX_ERROR_COUNT                : integer := 101; -- uint32  -- Signals  SIGNAL clk                              : std_logic; -- boolean  SIGNAL reset                            : std_logic; -- boolean  SIGNAL clk_enable                       : std_logic; -- boolean  SIGNAL In1                              : vector_of_std_logic_vector2(0 TO 1); -- sfix6_En3  SIGNAL ce_out                           : std_logic; -- boolean  SIGNAL Out1                             : std_logic; -- boolean  SIGNAL txdataCnt                        : integer; -- uint32  SIGNAL rxdataCnt                        : integer; -- uint32  SIGNAL tb_enb                           : std_logic; -- boolean  SIGNAL rdenb                            : std_logic; -- boolean  SIGNAL srcDone                          : std_logic; -- boolean  SIGNAL snkDone                          : std_logic; -- boolean  SIGNAL GatewayIn_1_clk                  : std_logic; -- boolean  SIGNAL GatewayIn_1_reset                : std_logic; -- boolean  SIGNAL GatewayIn_1_rdenb                : std_logic; -- boolean  SIGNAL GatewayIn_1_addr                 : unsigned(6 DOWNTO 0); -- ufix7  SIGNAL GatewayIn_1_nxtaddr              : unsigned(6 DOWNTO 0); -- ufix7  SIGNAL GatewayIn_1_done                 : std_logic; -- boolean  SIGNAL Out1_timeout                     : integer; -- uint32  SIGNAL Out1_errCnt                      : integer; -- uint32  SIGNAL Out1_clk                         : std_logic; -- boolean  SIGNAL Out1_reset                       : std_logic; -- boolean  SIGNAL Out1_rdenb                       : std_logic; -- boolean  SIGNAL Out1_addr                        : unsigned(6 DOWNTO 0); -- ufix7  SIGNAL Out1_nxtaddr                     : unsigned(6 DOWNTO 0); -- ufix7  SIGNAL Out1_done                        : std_logic; -- boolean  SIGNAL Out1_ref                         : std_logic; -- boolean  SIGNAL check1_Done                      : std_logic; -- booleanBEGIN  -- Component Instances  u_viterbi_block: viterbi_block    PORT MAP (              clk                              => clk,              reset                            => reset,              clk_enable                       => clk_enable,              In1                              => In1,              ce_out                           => ce_out,              Out1                             => Out1      );  -- Block Statements  -- -------------------------------------------------------------  -- Driving the test bench enable  -- -------------------------------------------------------------  tb_enb_gen: PROCESS (clk,reset)  BEGIN    IF (reset = '1') THEN       tb_enb <= '0';    ELSIF clk'event AND clk = '1' THEN      tb_enb <= '1';      IF snkDone = '1'  THEN        tb_enb <= '0';        ASSERT FALSE          REPORT "**************TEST COMPLETED **************"          SEVERITY NOTE;      END IF;    END IF;  END PROCESS tb_enb_gen;  -- -------------------------------------------------------------  -- System Clock (fast clock) and reset  -- -------------------------------------------------------------  clk_gen: PROCESS  BEGIN    clk <= '1';    WAIT FOR clk_high;    clk <= '0';    WAIT FOR clk_low;    IF snkDone = '1' THEN      clk <= '1';      WAIT FOR clk_high;      clk <= '0';      WAIT;    END IF;  END PROCESS clk_gen;  reset_gen: PROCESS  BEGIN    reset <= '1';    WAIT FOR clk_period * 2 * CLKRATE + clk_hold;    reset <= '0';    WAIT;  END PROCESS reset_gen;  rdenb <= tb_enb WHEN snkDone =  '0' ELSE           '0' AFTER clk_hold;  clk_enable <= rdenb;  -- -------------------------------------------------------------  -- Read the data and transmit it to the DUT  -- -------------------------------------------------------------  GatewayIn_1_procedure (    clk       => GatewayIn_1_clk,    reset     => GatewayIn_1_reset,    rdenb     => GatewayIn_1_rdenb,    addr      => GatewayIn_1_addr,    nxt_addr  => GatewayIn_1_nxtaddr,    done      => GatewayIn_1_done);  GatewayIn_1_rdenb <= rdenb;  GatewayIn_1_clk <= clk;  GatewayIn_1_reset <= reset;  stimuli_1: PROCESS(GatewayIn_1_rdenb, GatewayIn_1_addr)  BEGIN    IF GatewayIn_1_rdenb = '1' THEN      In1 <= GatewayIn_1_force(TO_INTEGER(GatewayIn_1_addr));    ELSE      In1 <= ( 'X','X');    END IF;  END PROCESS stimuli_1;  -- -------------------------------------------------------------  -- Create done signal for Input data  -- -------------------------------------------------------------  srcDone <= GatewayIn_1_done;  -- -------------------------------------------------------------  --  Checker: Checking the received data from the DUT.  -- -------------------------------------------------------------  Out1_procedure (    clk       => Out1_clk,    reset     => Out1_reset,    rdenb     => Out1_rdenb,    addr      => Out1_addr,    nxt_addr  => Out1_nxtaddr,    done      => Out1_done);  Out1_rdenb <= ce_out;  Out1_clk <= clk;  Out1_reset <= reset;  checker_1: PROCESS(clk, reset)  BEGIN    IF reset = '1' THEN      Out1_timeout <= 0;      Out1_errCnt <= 0;      Out1_ref <= Out1_expected(TO_INTEGER(Out1_nxtaddr));    ELSIF clk'event and clk ='1' THEN      IF Out1_rdenb = '1' THEN        Out1_timeout <= 0;        Out1_ref <= Out1_expected(TO_INTEGER(Out1_nxtaddr));        IF Out1 /= Out1_expected(TO_INTEGER(Out1_addr)) THEN          Out1_errCnt <= Out1_errCnt + 1;          ASSERT FALSE             REPORT "Error in Out1: Expected "             & to_hex(Out1_expected(TO_INTEGER(Out1_addr)))            & " Actual "            & to_hex(Out1)            SEVERITY ERROR;          IF Out1_errCnt >= MAX_ERROR_COUNT THEN            ASSERT FALSE              REPORT "Number of errors exceed the maximum error"              SEVERITY Warning;          END IF;        END IF;      ELSIF Out1_timeout > MAX_TIMEOUT THEN        Out1_errCnt <= Out1_errCnt + 1;        ASSERT FALSE          REPORT "Timeout: Data is not received after timeout."          SEVERITY FAILURE ;      ELSE        Out1_timeout <= Out1_timeout + 1 ;      END IF;    END IF;  END PROCESS checker_1;  checkDone_1: PROCESS(clk, reset)  BEGIN    IF reset = '1' THEN      check1_Done <= '0';    ELSIF clk'event and clk ='1' THEN      IF check1_Done = '0' AND Out1_done = '1' AND Out1_rdenb = '1' THEN        check1_Done <= '1';      END IF;    END IF;  END PROCESS checkDone_1;  -- -------------------------------------------------------------  -- Create done signal for output data  -- -------------------------------------------------------------  snkDone <= check1_Done;  -- Assignment StatementsEND rtl;

⌨️ 快捷键说明

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