2016-05-24 1 views
0

私は、(FPGA上で)16ビットのデジタル信号を読み込み、何らかの処理を行い、16ビットの処理済み信号を書き出すために使用されるいくつかのVHDLコードに取り組んでいます。現在のところ、10クロックサイクルごとに入力を読み込み、次のクロックサイクルで何らかの処理を行うように設定されています(現在は何もせず、入力を出力するだけです)。残りの8クロックサイクルでカウンタを増分します。使い方条件が10クロックサイクルに1回「何か」を行う場合。 「何か」に1クロックサイクル以上かかる場合はどうなりますか?

処理が完了するまでに1クロックサイクル以上の時間がかかる場合はどうなりますか?終了するまでカウンタをインクリメントして停止するまで続行しますか?または、カウンタが信号を処理している間に、カウンタが同時にインクリメントし続けますか?

8クロックサイクルが上がる前に(出力に書き込むために)プロセスが完了するように設定します。

擬似コードは次のようなものになります。それはすべてあなたがコードを書く方法によって異なり

Do (on rising clock edge): 
if (n = 10) then 
    n <= 1; 
    Output <= ProcessedSignal; 
    InputSignal <= Input; 
elsif (n = 1) then 
    n <= n + 1 
    Output <= Output; 
    -- do some signal processing here (e.g. a filter) 
    ProcessedSignal <= InputSignal; 
else 
    n <= n + 1; 
    Output <= Output; 
    ProcessedSignal <= ProcessedSignal; 
end if; 
+2

あなたの質問は時期尚早です。 [良い質問をするにはどうすればいいですか?](http://stackoverflow.com/help/how-to-ask)を参照してください。実際のVHDLコードを記述してシミュレートすると、複製可能な問題について特定の質問をすることができます[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)を参照してください。 – user1155120

答えて

1

を。どんな種類の行動も可能です。あなたの疑似コードはほぼ有効なVHDLであり、私があなたを正しく理解していれば、あなたが望むことをするでしょう。ここでは実際のコードのための提案は次のとおりです(アーキテクチャ/信号宣言せずに、またリセットが欠落)

process (clock) 
begin 
    if rising_edge(clock) then 
    n <= n + 1; -- default assignment 

    if (n = 10) then 
     n <= 1; -- overrides default assignment 
     Output <= ProcessedSignal; 
     InputSignal <= Input; 
    elsif (n = 1) then 
     -- do some signal processing here (e.g. a filter) 
     ProcessedSignal <= InputSignal; 
    elsif (n = 2) then 
     -- do more processing 
    end if; 
    end if; 
end process; 

は、クロックド過程で自分自身に信号を書き込む必要がないことに注意してください、あなたはそれを明示したい場合を除き信号が古い値を保持していることを示します。

+0

ありがとう、本当に役に立ちます。信号が古い値を保持していることを明示的に示さなかった場合、出力がクロックサイクル間の値を保持するかどうかはわかりませんでした。私がSystemVerilogを最初に学んだときにデフォルトの割り当てを上書きできることは知っていて、SystemVerilogでこれを行うことができるかどうかは分かりません。同じ出力に2つの異なることを書いているというエラーが出ます。 – SomeRandomPhysicist

関連する問題