2017-11-23 7 views
0

Verilogでコードを逐次実行する必要があります 問題は、forループ/ forループを使用してループを実行しようとしたことです。 forループでは、ループアンローリングが起こり、すべてのことが並行して起こると強く信じています。繰り返しのプロセスを実行するために同じ概念を適用できるように、forループの順次実行を実装する方法を教えてください。あるいは、逐次的手順を実施するために使用できる他の技術はありますか?私は、UARTを使用して複数バイトのデータを転送するためのプロセスを使用しています。Verilogでシーケンシャルデータ転送を実行する際のループアンローリングを避ける

+0

verilogは並行言語です。シーケンシャルに実行されるのは、** always **ブロック内のステートメント**だけです。 'always'ブロック自体は自由に実行されます。生成ブロックの内部でも同じです。あなたは間違った言語を選ぶ。 Verilogでは、* sequential *アクションを行うためにすべてをフロップと同期させる必要があります。 – Serge

+0

私はこれについてはわかりませんが、あなたの説明に基づいて、あなたはソフトウェアではなくハードウェアについて話しているようには見えません。それが本当であれば、Verilogは理想的な言語ではないかもしれません。 –

答えて

0

ハードウェアで順次プロシージャを実装する通常の方法は、caseステートメントを使用してステートマシンを構築することです。

integer state, next_state; 
    parameter S0 = 0, S1 = 1, S2 = 2; 
    always @(posedge clock) state <= next_state; 
    always @(*) 
    case(state) 
     S0: begin 
      // ... code for sequence 0 
      next_state = S1; 
      end 
     S1: begin 
      // ... code for sequence 1 
      next_state = S2; 
      end 
     S2: begin 
      // ... code for sequence 2 
      next_state = S0; 
      end 
     endcase 

しかし、データ転送の場合、これはハードウェアの使用が非常に非効率的です。あなたのデータは、工場の組立ラインにある車と考えることができます。自動車は製造段階で段階的な段階を経ていますが、工場の各段階では、各段階が並行して動作するように、異なる段階で同じ手順を繰り返し実行しています。それはあなたのハードウェアを合成ツールに記述する方法です。シーケンシャルな記述を取り、それを並列化するようになってきたばかりのツールがいくつか登場していますが、現在利用可能な一般的なツールとはかけ離れています。

関連する問題