-1

我在 xilinx 中编写了一个程序,此代码在其中编译得很好,ModelSim但是当我在 xilinx 中编译它时出现此错误。

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

我注意到三(五)件事:

1) 我会在你的 always@ 语句中使用 'or' 而不是逗号来分隔 'clk' 和 'reset'

2)在真正的时钟逻辑中,您应该始终将阻塞分配用于您期望推断触发器的任何内容。阻塞赋值只能用于临时变量。

3)您将阻塞和非阻塞分配混合到“输出”。这是一个明确的禁忌。

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