2016-07-06 4 views
0

VHDLを書いてから数年が経ちました。プロシージャ内の信号に定数値を代入すると致命的なエラーが発生する

私は私が作ったモジュールのテストベンチを作っていますし、それがUUT上のレジスタに書き込むために、この手順を使用しています。それは、このメイン刺激プロセスから呼び出された

procedure write_data_proc (
constant data_value : in std_logic_vector; 
signal write_en : out std_logic; 
signal data_in : out std_logic_vector; 
signal clk : in std_logic 
) is 
begin 
    wait until falling_edge(clk); 
    write_en <= '1'; 
    data_in <= data_value; 
    wait until falling_edge(clk); 
    write_en <= '0'; 
end procedure; 

stim_process: process 
begin 
mask <= "0000000011111111"; 
reset <= '1'; 
wait for 2 ns; 
reset <= '0'; 
wait for 3 ns; 
write_data_proc("0000000011110000",write_en,data_in,clk); 
write_data_proc("0000000011001100",write_en, data_in,clk); 
write_data_proc("0000000010001001",write_en,data_in,clk); 
read_bytes(3,8,data_read, data_read_master, clk); 
end process; 
私が持っている

data_in <= data_value; 

ModelSimが私の手順で次の行に "FATAL ERROR" を与えます私の頭を奪って、私は私の方法で私を助けるためにほとんど見つけることができません。ここで何が起こっているのか理解してくれる人がいらっしゃることを願っています。より多くの情報が必要な場合は、私はより多くのコードを提供してくれるでしょう。

ありがとうございます!

+0

[MCVE](http://stackoverflow.com/help/mcve)に加えて、実際の完全なエラーメッセージ、および/または誰がシミュレータの表示を助けることができます。 Brianの答えは、コードスニペットが有効であるように見えるため、ツールの実装上の問題やコードスニペットの外部での問題(一般的に後者の可能性が高い)のいずれかを残します。問題を再現するためにMCVEを作成すると、問題が明らかになる傾向があります。 – user1155120

答えて

0

これはMCVEではありません。

これはちょっとしたコードの断片で、非常に重要なことがたくさんあります。

宣言と同様です。

これはMCVEです。私はそれをテストするとき

library ieee; 
use ieee.std_logic_1164.all; 

entity const_value is 
end const_value; 

architecture test of const_value is 

signal mask,data_in : std_logic_vector(15 downto 0); 
signal reset, clk, write_en : std_logic; 

    procedure write_data_proc (
    constant data_value : in std_logic_vector; 
    signal write_en : out std_logic; 
    signal data_in : out std_logic_vector; 
    signal clk : in std_logic 
) is 
    begin 
    wait until falling_edge(clk); 
    write_en <= '1'; 
    data_in <= data_value; 
    wait until falling_edge(clk); 
    write_en <= '0'; 
    end procedure; 

begin 

stim_process: process 
begin 
    mask <= "0000000011111111"; 
    reset <= '1'; 
    wait for 2 ns; 
    reset <= '0'; 
    wait for 3 ns; 
    write_data_proc("0000000011110000",write_en,data_in,clk); 
    write_data_proc("0000000011001100",write_en, data_in,clk); 
    write_data_proc("0000000010001001",write_en,data_in,clk); 
-- read_bytes(3,8,data_read, data_read_master, clk); 
end process; 

end test; 

は今、それは、コンパイル詳しく説明し、致命的なエラーなしでシミュレートします。

ghdl -a const_value.vhd 
ghdl -e const_value 
ghdl -r const_value 

実際、出力はまったくありません。出力が期待値に達していることをテストする刺激プロセス(または別のプロセス)でassert文を追加することによって、テストベンチの自己チェックを行うことをお勧めします。

上記のMCVEとまったく同じであるとすれば、Modelsimはどうなっていますか?

私の場合と同じ結果が得られたら、実際の問題を教えてください。今回はMCVEを作成してください。

+0

そして、[work](http://i.stack.imgur.com/DruKU.png)の手順でモデルをクロックするとします。 – user1155120

関連する問題