Thông báo

Collapse
No announcement yet.

MỌI NGƯỜI GIÚP EM VỚI :Mô phỏng bằng test bench và mô phỏng simulation trực tiếp

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • MỌI NGƯỜI GIÚP EM VỚI :Mô phỏng bằng test bench và mô phỏng simulation trực tiếp

    Tình hình là em làm một chương trình giải mã bằng thuật toán viterbi.
    Khi e mô phỏng bằng cách tạo một file test bench, thì nó cho kết quả mong muốn
    nhưng khi mô phỏng theo cách tạo simulation trực tiếp, rồi điền các giá trị trên mô phỏng thì nó lại không ra đúng kết quả, mọi người xem giúp e lỗi ở đây là gì với.
    Click image for larger version

Name:	test2.GIF
Views:	1
Size:	65.7 KB
ID:	1413118
    Click image for larger version

Name:	test1.GIF
Views:	1
Size:	57.3 KB
ID:	1413119
    đây là đoạn code test bech
    "
    LIBRARY ieee;
    USE ieee.std_logic_1164.ALL;


    ENTITY test_decode IS
    END test_decode;

    ARCHITECTURE behavior OF test_decode IS

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT decode_viterbi
    PORT(
    CLOCK_50 : IN std_logic;
    SW : IN std_logic_vector(15 downto 0);
    KEY : IN std_logic;
    LEDR : OUT std_logic_vector(7 downto 0);
    START_II : IN std_logic;
    RESET_I : IN std_logic
    );
    END COMPONENT;


    --Inputs
    signal CLOCK_50 : std_logic := '0';
    signal SW : std_logic_vector(15 downto 0) := (others => '0');
    signal KEY : std_logic := '0';
    signal START_II : std_logic := '0';
    signal RESET_I : std_logic := '0';

    --Outputs
    signal LEDR : std_logic_vector(7 downto 0);

    -- Clock period definitions
    constant CLOCK_50_period : time := 10 ns;

    BEGIN

    -- Instantiate the Unit Under Test (UUT)
    uut: decode_viterbi PORT MAP (
    CLOCK_50 => CLOCK_50,
    SW => SW,
    KEY => KEY,
    LEDR => LEDR,
    START_II => START_II,
    RESET_I => RESET_I
    );

    -- Clock process definitions
    CLOCK_50_process rocess
    begin
    CLOCK_50 <= '0';
    wait for CLOCK_50_period/2;
    CLOCK_50 <= '1';
    wait for CLOCK_50_period/2;
    end process;


    -- Stimulus process
    stim_proc: process
    begin
    -- hold reset state for 100 ns.
    wait for 100 ns;

    wait for CLOCK_50_period*10;

    -- insert stimulus here
    SW <="0011100001100100";
    KEY <='1';
    START_II <='1';
    RESET_I <='1';

    wait;
    end process;

    END;"
    Thank mọi người trước nhé

  • #2
    Nguyên văn bởi mctiny139 Xem bài viết
    Tình hình là em làm một chương trình giải mã bằng thuật toán viterbi.
    Khi e mô phỏng bằng cách tạo một file test bench, thì nó cho kết quả mong muốn
    nhưng khi mô phỏng theo cách tạo simulation trực tiếp, rồi điền các giá trị trên mô phỏng thì nó lại không ra đúng kết quả, mọi người xem giúp e lỗi ở đây là gì với.
    [ATTACH=CONFIG]45858[/ATTACH]
    [ATTACH=CONFIG]45859[/ATTACH]
    đây là đoạn code test bech
    "
    LIBRARY ieee;
    USE ieee.std_logic_1164.ALL;


    ENTITY test_decode IS
    END test_decode;

    ARCHITECTURE behavior OF test_decode IS

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT decode_viterbi
    PORT(
    CLOCK_50 : IN std_logic;
    SW : IN std_logic_vector(15 downto 0);
    KEY : IN std_logic;
    LEDR : OUT std_logic_vector(7 downto 0);
    START_II : IN std_logic;
    RESET_I : IN std_logic
    );
    END COMPONENT;


    --Inputs
    signal CLOCK_50 : std_logic := '0';
    signal SW : std_logic_vector(15 downto 0) := (others => '0');
    signal KEY : std_logic := '0';
    signal START_II : std_logic := '0';
    signal RESET_I : std_logic := '0';

    --Outputs
    signal LEDR : std_logic_vector(7 downto 0);

    -- Clock period definitions
    constant CLOCK_50_period : time := 10 ns;

    BEGIN

    -- Instantiate the Unit Under Test (UUT)
    uut: decode_viterbi PORT MAP (
    CLOCK_50 => CLOCK_50,
    SW => SW,
    KEY => KEY,
    LEDR => LEDR,
    START_II => START_II,
    RESET_I => RESET_I
    );

    -- Clock process definitions
    CLOCK_50_process rocess
    begin
    CLOCK_50 <= '0';
    wait for CLOCK_50_period/2;
    CLOCK_50 <= '1';
    wait for CLOCK_50_period/2;
    end process;


    -- Stimulus process
    stim_proc: process
    begin
    -- hold reset state for 100 ns.
    wait for 100 ns;

    wait for CLOCK_50_period*10;

    -- insert stimulus here
    SW <="0011100001100100";
    KEY <='1';
    START_II <='1';
    RESET_I <='1';

    wait;
    end process;

    END;"
    Thank mọi người trước nhé
    Bạn nên coi lại phần "reset". RESET phải ở "0" cho ít nhất 2 chu kỳ khi làm stimulus trực tiếp. Hình ảnh posted ở đây cho tôi thấy là LEDR ở "U" (unkown) cho nên tôi nghi là bạn bị reset problem. Nếu bạn quan sát hình ảnh ở 5 chu kỳ đầu tiên thì có thể nhận ra được khác biệt ở đường vào sữa 2 cách simulation.
    Chúc một ngày vui vẻ
    Tony
    email : dientu_vip@yahoo.com

    Comment


    • #3
      sao mình thấy tính hiệu Clock và key ở 2 trường hợp khác nhau vậy bạn ? ở trường hợp bạn điền giá trị vào thì mình thấy error: index out of bound kìa , giá trị bị tràn ah .

      Comment


      • #4
        cái nè h e mới có time vào híc híc. e biết lỗi roài. cơ bản là do code chương trình, đúng là lỗi tràn bộ đệm thật ạ, vòng for e trừ âm một biến. thanks các bác

        Comment

        Về tác giả

        Collapse

        mctiny139 Tìm hiểu thêm về mctiny139

        Bài viết mới nhất

        Collapse

        Đang tải...
        X