我已经在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
此致
答案 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