2016-12-03 10 views
0

VHDLでコードを記述し、Active HDL Student版を使用してテストベンチを使用してコードをコンパイルおよびシミュレートしています。私が500nsの間シミュレートすると、信号は変化しますが、波形上の信号は表示されずにUに張り付いています。私はこの問題の原因を見つけることができません。VHDLシミュレーションで波形が表示されない

これは、エンティティのための私のコードです:

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity idexreg is 
    port(
    rst_bar : in std_logic; 
    clk : in std_logic; 
    immediate_in : in std_logic_vector(63 downto 0); 
    reg0_in : in std_logic_vector(63 downto 0); 
    reg1_in : in std_logic_vector(63 downto 0); 
    instruction_in : in std_logic_vector(3 downto 0); 
    pc_in : in std_logic_vector(3 downto 0); 
    immediate_out : out std_logic_vector(63 downto 0); 
    reg0_out : out std_logic_vector(63 downto 0); 
    reg1_out : out std_logic_vector(63 downto 0); 
    instruction_out : out std_logic_vector(3 downto 0); 
    pc_out : out std_logic_vector(3 downto 0) 
    ); 
end idexreg;  

architecture idexreg_arch of idexreg is 
begin 
    arch: process(clk, rst_bar) 
    begin 
     if rst_bar = '0' then 
      immediate_out <= std_logic_vector(x"0000000000000000"); 
      reg0_out <= std_logic_vector(x"0000000000000000"); 
      reg1_out <= std_logic_vector(x"0000000000000000"); 
      instruction_out <= std_logic_vector(x"0"); 
      pc_out <= std_logic_vector(x"0");  
     elsif falling_edge(clk) then 
      immediate_out <= immediate_in; 
      reg0_out <= reg0_in; 
      reg1_out <= reg1_in; 
      instruction_out <= instruction_in; 
      pc_out <= pc_in; 
     end if; 
    end process; 
end idexreg_arch; 

これは、テストベンチのコードです:

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 
use ieee.std_logic_arith.all; 

entity idexreg_tb is 
end idexreg_tb; 

architecture test of idexreg_tb is 
--input signals 
signal rst_bar : std_logic; 
signal clk: std_logic; 
signal immediate_in : std_logic_vector(63 downto 0); 
signal reg0_in : std_logic_vector(63 downto 0); 
signal reg1_in : std_logic_vector(63 downto 0); 
signal instruction_in : std_logic_vector(3 downto 0); 
signal pc_in : std_logic_vector(3 downto 0); 

--output signals 
signal immediate_out : std_logic_vector(63 downto 0); 
signal reg0_out : std_logic_vector(63 downto 0); 
signal reg1_out : std_logic_vector(63 downto 0); 
signal instruction_out : std_logic_vector(3 downto 0); 
signal pc_out : std_logic_vector(3 downto 0); 

-- boolean to signify end of simulation 
signal end_sim : boolean := false; 

constant period : time := 50ns; 

begin 

UUT: entity idexreg 
    port map(
    rst_bar => rst_bar, 
    clk => clk, 
    immediate_in => immediate_in, 
    reg0_in => reg0_in, 
    reg1_in => reg1_in, 
    instruction_in => instruction_in, 
    pc_in => pc_in, 
    immediate_out => immediate_out, 
    reg0_out => reg0_out, 
    reg1_out => reg1_out, 
    instruction_out => instruction_out, 
    pc_out => pc_out); 


-- Generate the Clock signal 
clk_gen: process 
begin 
clk <= '0'; 
loop 
    wait for period/2; 
    clk <= not clk; 
    exit when end_sim = true; 
end loop; 
wait; 
end process; 

stim: process 
begin 
    -- reset the register file first 
    rst_bar <= '0'; 
    wait for 100ns; 
    rst_bar <= '1'; 


    --Test 1 
    immediate_in <= std_logic_vector(x"AAAAAAAAAAAAAAAA"); 
    reg0_in <= std_logic_vector(x"AAAAAAAAAAAAAAAA"); 
    reg1_in <= std_logic_vector(x"AAAAAAAAAAAAAAAA"); 
    instruction_in <= std_logic_vector(x"A"); 
    pc_in <= std_logic_vector(x"1"); 
    wait for 10ns; 
    --Test 2 
    immediate_in <= std_logic_vector(x"BBBBBBBBBBBBBBBB"); 
    reg0_in <= std_logic_vector(x"BBBBBBBBBBBBBBBB"); 
    reg1_in <= std_logic_vector(x"BBBBBBBBBBBBBBBB"); 
    instruction_in <= std_logic_vector(x"B"); 
    pc_in <= std_logic_vector(x"2"); 
    wait for 30ns; 
    --Test 3 
    immediate_in <= std_logic_vector(x"CCCCCCCCCCCCCCCC"); 
    reg0_in <= std_logic_vector(x"CCCCCCCCCCCCCCCC"); 
    reg1_in <= std_logic_vector(x"CCCCCCCCCCCCCCCC"); 
    instruction_in <= std_logic_vector(x"C"); 
    pc_in <= std_logic_vector(x"3"); 
    end_sim <= true; 

    wait; 
end process; 

end test; 

任意の助けをいただければ幸いです!

答えて

0

他の2つの標準準拠シミュレータでは、3種類のエラーが見つかりました。

セマンティックエラー

UUT: entity idexreg 

が使用句use.work.all; idexregが結合していない(表示されません以前に分析されたエンティティの宣言がなければ

UUT: entity work.idexreg 

をする必要があり、これは「会計処理します米国)。選択された名前は、名前が直接表示されない場合に使用できます。

IEEE STD 1076年から2008年12.3可視

をテキストで指定された場所での識別子の発生の意味により、過負荷宣言の場合にも、表示規則によって定義されルールのオーバーロード。この節で考慮される識別子には、予約語以外の識別子、または事前定義された属性を示す属性指示子が含まれます。この節では、字句要素(識別子など)が出現する箇所を考慮する。この節では、オーバーロードされた宣言は、サブプログラムと列挙リテラルの宣言です。

12.4使用句

使用句は、選択によって表示されている宣言の直接可視性を達成します。

(修正は上記に示す)コンテキスト宣言とパッケージSTANDARD以外

13.2デザインライブラリ

すべてのデザインユニットがそのコンテキスト句の一部として、以下の暗黙的なコンテキスト項目を含むものとします:

library STD, WORK; use STD.STANDARD.all;

ライブラリ名WORKはライブラリ句によって直接表示されますが、ライブラリ作業に分析されるデザイン単位は、use句なしでは直接表示されません。

戻る12。4 Use節:

use節の各選択名は、潜在的に直接可視になる1つ以上の宣言を識別します。選択された名前の接尾辞がタイプマーク以外の単純な名前であるか、または文字リテラルまたは演算子シンボルである場合、選択された名前は、その中に含まれる単純名、文字リテラル、または演算子シンボルの宣言のみを識別します選択された名前のプレフィックスによって示されるパッケージまたはライブラリ。
...
サフィックスが予約語allの場合、選択された名前は、選択された名前の接頭辞で示されるパッケージまたはライブラリ内に含まれるすべての宣言を識別します。


は、まず、あなたのシミュレータは、設計記述によって遵守を必要とせず、さらに2つのエラークラスがあります。

まず、構文規則

15.3字句要素、セパレータ、及び

少なくとも一つのセパレータは識別子または抽象リテラルと隣接識別子または抽象との間に必要とされるデリミタリテラル。

この規則を無視して、少なくとも1つの商用シミュレータが成功しています。 -2008のためにそれを無視するのは難しいです。

秒、別のセマンティックルール:

9.3.6型変換

- およびタイプが同じ次元を持っている場合にのみ場合、アレイタイプ密接に関連している配列、2つはタイプおよび要素型が密接に関連しています

文字列とstd_logic_vectorは型変換に密接に関連していません。あなたは、不要な型変換をドロップすることができます - ビット列の型が文脈からです:

9.3.6:

型変換のオペランドのタイプは、オペランドに12.5の規則を適用することによって決定されなければなりません完全な文脈とみなされる。 STD_LOGIC_VECTORがstd_ulogicまたはSTD_LOGIC要素を持っていながら、文字列として

std_logic_vector(x"0000000000000000") 

、文字要素型を持つ配列型:あなたが見るすべてが展開するビット列(15.8)、例えばある意味

タイプ(VHDLリビジョンによって異なる)。つまり、型変換のオペランドと型のマークは密接に関連していません。

このルールは無視しないでください。

9.3。2リテラル

文字列とビットストリングリテラルは、1次元の文字配列を表します。文字列またはビット列リテラルの型は、リテラル自体を除き、リテラルの型が文字型の1次元配列でなければならないという事実を利用して、リテラルが現れるコンテキストからのみ決定可能でなければならない。文字列とビット列リテラルの字句構造は15節で定義されています。

同様に、修飾された式を使用できます。

9.3.5認定式

修飾発現明示的発現または集合体であるオペランドのタイプ、及びおそらくはサブタイプを述べるために使用される基本的な操作(5.1を参照)であります。

両方の方法を以下に示します。ほとんどの場合、修飾された表現に変更され、追加の'文字のみが必要です。

あなたのコードは、その後、任意の標準に準拠しVHDLツールで正常に解析します:

library ieee; 
use ieee.std_logic_1164.all; 
-- use ieee.numeric_std.all; 

entity idexreg is 
    port(
    rst_bar : in std_logic; 
    clk : in std_logic; 
    immediate_in : in std_logic_vector(63 downto 0); 
    reg0_in : in std_logic_vector(63 downto 0); 
    reg1_in : in std_logic_vector(63 downto 0); 
    instruction_in : in std_logic_vector(3 downto 0); 
    pc_in : in std_logic_vector(3 downto 0); 
    immediate_out : out std_logic_vector(63 downto 0); 
    reg0_out : out std_logic_vector(63 downto 0); 
    reg1_out : out std_logic_vector(63 downto 0); 
    instruction_out : out std_logic_vector(3 downto 0); 
    pc_out : out std_logic_vector(3 downto 0) 
    ); 
end idexreg;  

architecture idexreg_arch of idexreg is 
begin 
    arch: process(clk, rst_bar) 
    begin 
     if rst_bar = '0' then 
      immediate_out <= std_logic_vector'(x"0000000000000000"); 
      reg0_out <= std_logic_vector'(x"0000000000000000"); 
      reg1_out <= std_logic_vector'(x"0000000000000000"); 
      instruction_out <= std_logic_vector'(x"0"); 
      pc_out <= std_logic_vector'(x"0");  
     elsif falling_edge(clk) then 
      immediate_out <= immediate_in; 
      reg0_out <= reg0_in; 
      reg1_out <= reg1_in; 
      instruction_out <= instruction_in; 
      pc_out <= pc_in; 
     end if; 
    end process; 
end idexreg_arch; 

library ieee; 
use ieee.std_logic_1164.all; 
-- use ieee.numeric_std.all; 
-- use ieee.std_logic_arith.all; 

entity idexreg_tb is 
end idexreg_tb; 

architecture test of idexreg_tb is 
--input signals 
signal rst_bar : std_logic; 
signal clk: std_logic; 
signal immediate_in : std_logic_vector(63 downto 0); 
signal reg0_in : std_logic_vector(63 downto 0); 
signal reg1_in : std_logic_vector(63 downto 0); 
signal instruction_in : std_logic_vector(3 downto 0); 
signal pc_in : std_logic_vector(3 downto 0); 

--output signals 
signal immediate_out : std_logic_vector(63 downto 0); 
signal reg0_out : std_logic_vector(63 downto 0); 
signal reg1_out : std_logic_vector(63 downto 0); 
signal instruction_out : std_logic_vector(3 downto 0); 
signal pc_out : std_logic_vector(3 downto 0); 

-- boolean to signify end of simulation 
signal end_sim : boolean := false; 

constant period : time := 50 ns; 

begin 

UUT: entity work.idexreg -- ERROR HERE was entity idexreg 
    port map (
    rst_bar => rst_bar, 
    clk => clk, 
    immediate_in => immediate_in, 
    reg0_in => reg0_in, 
    reg1_in => reg1_in, 
    instruction_in => instruction_in, 
    pc_in => pc_in, 
    immediate_out => immediate_out, 
    reg0_out => reg0_out, 
    reg1_out => reg1_out, 
    instruction_out => instruction_out, 
    pc_out => pc_out); 


-- Generate the Clock signal 
clk_gen: process 
begin 
clk <= '0'; 
loop 
    wait for period/2; 
    clk <= not clk; 
    exit when end_sim = true; 
end loop; 
wait; 
end process; 

stim: process 
begin 
    -- reset the register file first 
    rst_bar <= '0'; 
    wait for 100 ns; 
    rst_bar <= '1'; 


    --Test 1 
    immediate_in <= x"AAAAAAAAAAAAAAAA"; -- std_logic_vector'(x"AAAAAAAAAAAAAAAA"); 
    reg0_in <= std_logic_vector'(x"AAAAAAAAAAAAAAAA"); 
    reg1_in <= std_logic_vector'(x"AAAAAAAAAAAAAAAA"); 
    instruction_in <= std_logic_vector'(x"A"); 
    pc_in <= std_logic_vector'(x"1"); 
    wait for 10 ns; 
    --Test 2 
    immediate_in <= std_logic_vector'(x"BBBBBBBBBBBBBBBB"); 
    reg0_in <= std_logic_vector'(x"BBBBBBBBBBBBBBBB"); 
    reg1_in <= std_logic_vector'(x"BBBBBBBBBBBBBBBB"); 
    instruction_in <= std_logic_vector'(x"B"); 
    pc_in <= std_logic_vector'(x"2"); 
    wait for 30 ns; 
    --Test 3 
    immediate_in <= std_logic_vector'(x"CCCCCCCCCCCCCCCC"); 
    reg0_in <= std_logic_vector'(x"CCCCCCCCCCCCCCCC"); 
    reg1_in <= std_logic_vector'(x"CCCCCCCCCCCCCCCC"); 
    instruction_in <= std_logic_vector'(x"C"); 
    pc_in <= std_logic_vector'(x"3"); 
    end_sim <= true; 

    wait; 
end process; 

end test; 

と固定上記のエラーを述べたあなたの「Uのほかに何かを与える:

1][something besides 'U's

immediate_inは、ビット列リテラルのタイプを判別するための9.3.2のルールに代わる、修飾された式を使用しないテスト1のシグナル割り当てです。最も内側の完全な文脈(12.5)は、ビット列リテラルタイプを決定するために使用され、代入文そのものです。

immediate_inを割り当てる方法は、通常、好ましい方法として広く使用されます。タイプは割り当てのターゲットから取得されます。

関連する問題