2016-03-23 3 views
1

VHDLで0〜255の単純なカウンタを実装しました。それはFPGAボード上では期待通りに動作しますが、Modelsimでシミュレートすると、カウンタを変更しても、key(0)を変更する必要はありません。何かご意見は?信号変更を制御するときにカウンタがインクリメントされない

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

ENTITY PROC_TEST  IS 
    PORT(
    CLOCK_50: IN STD_LOGIC; 
    KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0); 
    LEDR: OUT STD_LOGIC_VECTOR(9 DOWNTO 0) 
    ); 
END PROC_TEST; 

ARCHITECTURE MAIN OF PROC_TEST IS 
    SIGNAL COUNTER: INTEGER RANGE 0 TO 255; 
BEGIN 

    LEDR(7 DOWNTO 0)<= STD_LOGIC_VECTOR (TO_UNSIGNED(COUNTER,8)); 

    PROCESS (CLOCK_50) 
    BEGIN 
    IF (KEY(0)'EVENT AND KEY(0) = '0')THEN 
     COUNTER<=COUNTER + 1; 
    END IF; 
    END PROCESS; 
END MAIN; 
+0

私はあなたのコードを美化し、あなたのテキストを改善しました、それは大丈夫だったと思います。ブラウザでページをリロードするか、質問の上にある通知をクリックしてください。 –

+0

ありがとう、私はあなたが行った変更を見ることができませんでした。 – luffyKun

答えて

1

シグナルKEY(0)がプロセス感度リストにありません。これは通常、FPGAのコードを合成するときに警告で示されます。

プロセスのみ/実行が再開:

  • 一度シミュレーション起動後、
  • たび感度リスト変更の信号のいずれか。

したがって、CLOCK_50が変更されているときにのみプロセスが実行されますが、シミュレータでKEY(0)を強制的に変更した場合は実行されません。このように、あなたがあなたのコードを変更する必要があります。

PROCESS (KEY(0)) 

この変更を行った後、シミュレーション出力はである10MHzのクロックで次のKEY(0)に適用:

simulation output


その他の備考:

私のシミュレーションのスクリーンショットからわかるように、信号LEDR(9)およびLEDR(8)には未定義( 'U')の値があります。これは、あなたのアーキテクチャでそれらを割り当てるのを忘れたために起こります。これは、合成によっても示されるべきである。多くの場合、シンセサイザーだけで明示的に達成することができ出力に「0」(低論理)を割り当てる:

LEDR(9 downto 8) <= "00"; 

これらは、未使用の入力であり、私は持っていないので、他の入力信号は、私のシミュレーションで未定義の値を持っています任意の波形を適用します。

関連する問題