Xilinx中的模板错误

时间:2013-03-02 13:51:46

标签: verilog xilinx

我已经在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

此致

1 个答案:

答案 0 :(得分:3)

我注意到三(5)件事情:

1)我会用'或'而不是逗号分隔你总是@语句中的'clk'和'reset'

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