2016-05-22 4 views
0

VHDLをテストするときに少し問題があります。 私は、コードを実行するためにFPGA Baysis 2を使用していますが、ハードウェア上ではうまく機能していますが、私のコードをシミュレートするためにIsimプログラムを使用すると、手紙U.ベンチにVHDL 24時間クロックをテストするにはどうしたらいいですか?

私はインターネットを見ていて解決策を見つけることができませんでした。

ここでは、私のコードの最後の部分(恐らく何かが間違っている部分)に続きます。これまでのコードでは、クロックを分けて1秒ごとに分けて、1/200秒で分けて、FPGAのディスプレイ上のLEDを素早くオン/オフし、秒を数えて24時間制の時計を作った、 もちろん。

contador: process(clk200) 

variable flag : std_logic_vector (1 downto 0); 
-- ledplex is the mux that controls which display should be on 
-- Segm is the 7 segments display 
-- mu md hu hd are the signals with the time information 
begin 

if(clk200'event and clk200='1') then 
    if (flag = "00") then 

     ledplex <= "1110"; 

      case mu is 
       when 0 => segm <= "1000000"; 
       when 1 => segm <= "1111001"; 
       when 2 => segm <= "0100100"; 
       when 3 => segm <= "0110000"; 
       when 4 => segm <= "0011001"; 
       when 5 => segm <= "0010010"; 
       when 6 => segm <= "0000011"; 
       when 7 => segm <= "1111000"; 
       when 8 => segm <= "0000000"; 
       when 9 => segm <= "0011000"; 
       when others => segm <= "1111111"; 
      end case; 
     flag := "01"; 

    elsif (flag = "01") then 

     ledplex <= "1101"; 

      case md is 
       when 0 => segm <= "1000000"; 
       when 1 => segm <= "1111001"; 
       when 2 => segm <= "0100100"; 
       when 3 => segm <= "0110000"; 
       when 4 => segm <= "0011001"; 
       when 5 => segm <= "0010010"; 
       when others => segm <= "1111111";   
      end case; 
    flag := "10"; 

    elsif (flag = "10") then 
     ledplex <= "1011"; 

      case hu is 
       when 0 => segm <= "1000000"; 
       when 1 => segm <= "1111001"; 
       when 2 => segm <= "0100100"; 
       when 3 => segm <= "0110000"; 
       when 4 => segm <= "0011001"; 
       when 5 => segm <= "0010010"; 
       when 6 => segm <= "0000011"; 
       when 7 => segm <= "1111000"; 
       when 8 => segm <= "0000000"; 
       when 9 => segm <= "0011000"; 
       when others => segm <= "1111111"; 
      end case; 
     flag := "11"; 

    elsif (flag = "11") then 
     ledplex <= "0111"; 

      case hd is 
       when 0 => segm <= "1000000"; 
       when 1 => segm <= "1111001"; 
       when 2 => segm <= "0100100"; 
       when others => segm <= "1111111";   
      end case; 
    flag := "00"; 

    end if; 
end if; 
end process contador; 

、ここでは、テストベンチ LIBRARYのIEEEに従います。 ieee.std_logic_1164.ALLを使用してください。

ENTITY t_b IS 
END t_b; 

    ARCHITECTURE behavior OF t_b IS 

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

    COMPONENT hora 
    PORT(
    clk25m : IN std_logic; 
    segm : OUT std_logic_vector(6 downto 0); 
    ledplex : OUT std_logic_vector(3 downto 0); 
     x : out std_logic 
    ); 
    END COMPONENT; 

    signal clk_tb : std_logic := '0'; 
    signal segm_tb : std_logic_vector(6 downto 0); 
    signal ledplex_tb : std_logic_vector(3 downto 0); 
    signal x_tb : std_logic; 

    BEGIN 

    CUT: hora port map( clk25m => clk_tb, 
           segm => segm_tb, 
           ledplex => ledplex_tb, 
           x => x_tb); 


    Test_Vector: process 
    begin 
    clk_tb <= '1'; 
    wait for 40 ns; 
    clk_tb <= '0'; 
    wait for 40 ns; 
    end process; 

    END behavior; 
+4

私はあなたがコードのたくさんの人々を圧倒したくない参照が、その代わりに、それはコンパイルストップビットを取り除くことで、どのように無関係なビットを取り除くことができますについてあなたの問題?そうすれば、コンパイルして実行するいくつかのコードを提示して、あまりコードを渡さずに簡単に問題を再現することができます。これは[MCVE](http://stackoverflow.com/help/mcve)と呼ばれています。 MCVEの作成には別の利点もあります。作成する際には、質問者が問題を見つけ、他の人の答えを読むだけで学習する可能性が非常に高いです。 –

答えて

0

変数flagを初期化していません。これがなければ、あなたの変数は定義されていないかもしれません。したがって、U。次を使用します。

variable flag : std_logic_vector (1 downto 0) := "00"; -- initialize variable 
関連する問題