-1

ザイリンクスでプログラムを作成しました。このコードは でModelSim正常にコンパイルされますが、ザイリンクスでコンパイルするとこのエラーが発生します。

ERROR:Xst:899 - line 78: The logic for <iterator> does not match a known FF or Latch template. The description style you are using to describe a register or latch is not supported in the current software release.

なぜこのエラーが発生するのかわかりません。コードは次のとおりです。

module BcdCounter( input clk,input reset, output reg [3:0]out
);

reg [23:0]iterator;

always @(posedge clk,negedge reset)
begin

if(~reset)
begin

out=0;
iterator=0;

end

else
// clock divider
if(iterator==50000000) // 50Mhz clock divider
begin

out<=out+1;
iterator=0;

end

iterator=iterator+1;

end


endmodule

よろしく

4

1 に答える 1

4

私が気づいた3つのこと:

1)always@ステートメントで「clk」と「reset」を区切るために、コンマの代わりに「or」を使用します

2) 実際のクロック ロジックでは、フロップを推測するものに対して常にブロッキング割り当てを使用する必要があります。ブロック割り当ては、一時変数にのみ使用する必要があります。

3) 'out' へのブロッキング割り当てと非ブロッキング割り当てを混在させています。それは明確なノーノーです。

4)イテレータのインクリメントは、実際にスパナをスローするリセットif/elseの外にあります。

5) 余談ですが、ブロックをインデントしてください。すべてを左揃えにして、どの行がどのブロックに関連付けられているかを判断するのは非常に困難です。

module BcdCounter (
   input            clk,
   input            reset,
   output reg [3:0] out
);

reg [23:0] iterator;

always @(posedge clk or negedge reset) begin
   if(!reset) begin
      out      <= 0;
      iterator <= 0;
   end else begin
      // 50MHz clock divider
      if (iterator == 50000000) begin
         out      <= out + 1;
         iterator <= 0;
      end else begin
         iterator <= iterator + 1;
      end
   end
end

endmodule
于 2013-03-02T15:50:17.293 に答える