我正在尝试在不使用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
答案 0 :(得分:2)
哦,这是完全错误的。我不认为任何人可以在没有给你关于Verilog的演讲的情况下提供帮助,但是......有些事情可以立即引起注意:
)
丢失)。prv_count
没用。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的好书。