2016-03-23 6 views
0

私は、すべての着信ビットを探し、受信したビットの総数が1でないかどうかを追跡するプロセスを作成しています。値を参照値に設定します。プロセスは以下の通りです:関連するすべての信号が定義されている間にシグナルが不定に降下する

ここ
parity_tester : process(clk, sub_rst, barrel_data_in, barrel_enable, parity_test, parity_ref) 
     variable last_known_enable  : boolean := false; 
     variable last_known_data  : STD_LOGIC := '0'; 
     variable parity_error_out  : STD_LOGIC := '0'; 
     variable parity_ref_reg   : STD_LOGIC := '0'; 
     variable even     : STD_LOGIC := '1'; 
    begin 
     if sub_rst then 
      last_known_enable := false; 
      last_known_data  := '0'; 
      parity_error_out := '0'; 
      even    := '1'; 
     elsif rising_edge(clk) then 
      if barrel_enable then 
       last_known_enable := true; 
       last_known_data  := barrel_data_in; 
      else 
       if last_known_enable then 
        last_known_enable := false; 
        if last_known_data = '1' then 
         even := not even; 
        end if; 
       end if; 
      end if; 

      if parity_test then 
       case parity_bit_in_type is 
        when 0 => 
         parity_error_out := even xnor parity_ref; 
        when 1 => 
         parity_error_out := even xor parity_ref; 
        when 2 => 
         parity_error_out := parity_ref; 
        when 3 => 
         parity_error_out := not parity_ref; 
        when others => 
         parity_error_out := '1'; 
       end case; 
      end if; 
     end if; 
     parity_error <= parity_error_out; 
    end process; 

私が問題に遭遇:プロセス・センシティビティリストに定義されたすべての信号が定義されていますが、GHDL(シミュレータ)未定義の値の変化に応じてparity_testがtrueになったときに: Signals 私は間違っていますか?

私はノートパソコンに変更したときにエラーが変更されたため、ここにあるものを削除しました。そのケーススイッチについてです。私はまだ理由を知りません。 parity_bit_in_typeは、範囲(0〜3)を持つ汎用Naturalです。私が必要とするステートメント(この場合は0)を取り出し、ケースを削除すると、すべてが期待通りに機能します。 WebPack ISEはそれについて不平を言っているようではないので、GHDLのバグのように感じ始めます。

GHDLのバージョン:

/Downloads/ghdl-gcc-git » ghdl --version 
GHDL 0.34dev (20151126) [Dunoon edition] 
Compiled with GNAT Version: 5.3.0 
mcode code generator 
Written by Tristan Gingold. 

Copyright (C) 2003 - 2015 Tristan Gingold. 
GHDL is free software, covered by the GNU General Public License. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

ので

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity uart_receiv_parity is 
    generic (
     parity_bit_in_type  : Natural range 0 to 3 
    ); 
    port (
     rst      : in boolean; 
     clk      : in STD_LOGIC; 
     parity_error   : out STD_LOGIC -- Signals that the parity check has failed, is zero if there was none 
    ); 
end entity; 

architecture Behavioral of uart_receiv_parity is 
begin 
    parity_tester : process(clk, rst) 
     variable parity_error_out  : STD_LOGIC := '0'; 
    begin 
     if rst then 
      parity_error_out := '0'; 
     elsif rising_edge(clk) then 
      case parity_bit_in_type is 
       when 0 => 
        parity_error_out := '1'; 
       when 1 => 
        parity_error_out := '0'; 
       when 2 => 
        parity_error_out := '1'; 
       when 3 => 
        parity_error_out := '0'; 
       when others => 
        parity_error_out := '1'; 
      end case; 
     end if; 
     parity_error <= parity_error_out; 
    end process; 
end Behavioral; 
+0

いいえ、わかりません。不思議なことは、私がparity_error_out:= evenに変更すると、定義されていないことがもう起こりません。 – Cheiron

+0

GHDLのバージョンとバックエンドは何ですか?赤いゾーンが入力データに依存するまでの時間ですか?赤の値は 'U'か' X'ですか? – Paebbels

+0

新しいアーキテクチャにプロセスを配置し、そのプロセスにスティミュラスを適用すると、エラーは発生しますか? –

答えて

0

同じ挙動を示し、最小限の例、それは結局私のせいだった:テストベンチで信号が2つのソースから駆動されました。従って、 '1'は信号が '1'と '0'の両方によって駆動され、 'x'につながる。信号が '0'であると仮定すると、出力は実質的にゼロであった。

関連する問題