2017-01-04 9 views
0

サー、 私はalwaysブロック内のforループに関するいくつかの疑問があります。すべての繰り返しは1クロックサイクルで完了しましたか? forループがいつもブロック内にある別のforループ内にあるときはどうなるでしょうか? 次programm.Thankあなたの間違いループ内の常にposedgeクロック

reg [5:0] c; 
reg [2:0] m; 
reg G[5:0][2:0] = {{1'b1,1'b0,1'b0},{1'b0,1'b1,1'b0},{1'b0,1'b0,1'b1}, {1'b1,1'b1,1'b0},{1'b0,1'b1,1'b1},{1'b1,1'b0,1'b1}}; 
integer i; 
integer j; 
always @(posedge clk1) 
begin 
    for(i=0;i<6;i=i+1) 
     begin 
      c[i]=0; 
      for(j=2;j>=0;j=j-1) 
       begin 
        c[i] <= c[i]^(m[j]&G[2-j][i]); 
       end 
     end 
end 
+0

あなたのコードは 'C'コードのようです。ソフトウェアコードとしてHDLにコードを書き込まないでください。まず、ハードウェアについて考える必要があります。作成する場合は、それに応じてコードを作成する必要があります。あなたのデザインは何ですか? –

答えて

0

を見つけるために私を助けてくださいそのモデルのハードウェアの少しのソフトウェアを少しとしてalwaysブロックを考えます。 機密性リストはトリガーのリストであり、これらのトリガーが変更されたときに、ソフトウェアは新しい出力をどのように計算するかを計算します。すべての入力が(@(*)構築物を使用して)、感度リストであるので、任意の入力が変化した場合、ハードウェアの少しの出力はかなり(組み合わせロジックの定義を変更することができる組合せalwaysブロックについて

)。したがって、入力のいずれかが変更された場合、ソフトウェアは、組合せ論理の少しの新しい出力がどのようになるかを計算するために実行されます。

シーケンシャルalwaysブロックの場合、他の入力が直接出力を変化させないため、クロックリストと(存在する場合は)非同期リセットが感度リストにあります。したがって、シーケンシャルブロックの場合、クロック(または非同期リセット)が変化すると、ソフトウェアが実行されて、シーケンスロジックの小さなビットの新しい出力がどのようになるかが計算されます。

したがって、alwaysブロックがあり、の非同期リセットはありません。それは少しの逐次的な論理をモデル化する少しのソフトウェアです。このシーケンシャルロジックの出力は、クロックが変化した場合にのみ変化します(clk1の立ち上がりエッジがある場合)。したがって、clk1に立上りエッジがある場合、ブロックcの新しい値を計算するために、alwaysブロック内のコードが実行されます(変数が割り当てられているため、順序ロジックの出力この特定のalwaysブロック)。この特定のコードでループが発生するという事実は重要ではありません。 clk1に立ち上がりエッジがある場合、cの新しい値を計算するために、ループは完全に実行されます(clk1の立ち上がりエッジを待たずに)。

関連する問題