0

verilogでループ命令を使用せずにループを実装しようとしているので、カウンターモジュールを作成し、シミュレーションは完全に実行されましたが、FPGAに実装しようとすると、このようなマッピングで多くのエラーが発生しました

ERROR:MapLib:979 - LUT4 symbol
"Inst_Count/Mcompar_GND_1105_o_xcount[7]_LessThan_25_o_lut<0>" (output
signal=Inst_Count/Mcompar_GND_1105_o_xcount[7]_LessThan_25_o_lut<0>) has
input signal "Inst_Count/Madd_x[9]_GND_1105_o_add_0_OUT_cy<0>" which will be
trimmed. See Section 5 of the Map Report File for details about why the input
signal will become undriven. 

これらのエラーは、このモジュールをループ命令モジュールに置き換えたときにのみ発生したので、このモジュールの何が問題になっているのでしょうか。

これにあなたの時間を与えてくれてありがとう:)

module average( input rst , output reg [7:0]
reg [7:0] count;
reg [7:0] prv_count;

reg clk;

initial
begin

count = 8'd0;

end

always @ (posedge rst)
begin

clk = 1'b0;

end

always @ (clk)
begin

prv_count = count ;
count = prv_count + 1'b1;

end

always @ (count)
begin

if (count == 8'd255)
G_count= count;
else
begin

clk = ~clk;
G_count= count;

end

end
endmodule
4

1 に答える 1

2

あ、これは単純に間違っています。Verilog の講義をせずに、ここで誰も助けてくれる人はいないと思いますが、... すぐにわかるいくつかのことは次のとおりです。

  1. モジュールのパラメーター リストに明らかな構文エラーがあり、それを閉じていません (つまり)、行方不明になっています)。
  2. クロックはモジュールへの入力である必要があります。リセット入力のみに依存し、レジスタを「クロック」として使用しても機能しません (論理的には、壊れている必要がある組み合わせループがあります)。
  3. 合成可能であるべきコードで初期ブロックを使用しないでください。
  4. prv_count役に立たない。
  5. オーバーフローを手動で処理する必要はありません (255?8'd255が正確8'b11111111であることを確認し、1'b1 を追加すると 0 にリセットされるなど)。

そして、明白な疑問を提起する他の多くのこと — Verilog に関する本、できれば言語の合成可能な部分を扱った本を読んだことがありますか? :)とにかく、あなたがやろうとしていることは(私が理解できる限り)おそらく次のようになります:

module average(input clk, input rst, output reg [7:0] overflow_count);
   reg [7:0] count;

   always @(posedge clk or negedge rst) begin
      if (~rst) begin
         count <= 8'b0;
         overflow_count <= 8'b0;
      end else begin
         count <= (count + 1'b1);
         if (count == 8'b0)
           overflow_count <= (overflow_count + 1'b1);
      end
   end
endmodule

お役に立てば幸いです。HDL に関する優れた書籍をご覧になることをお勧めします。

于 2013-01-26T06:58:57.157 に答える