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 回答