我在ISE 14.7上创建了一个计数器。我设置了异步重置(Rst_n),每当它变为0时,计数器的值将被设置为init_value。
但是当我合成代码时,会出现一个警告: Xst3002
代码:
`timescale 1ns / 1ps
module downcounter(value, borrow, clk, rst_n, decrease, init_value, limit);
output reg [3:0]value; //value of counter
output reg borrow; //borrow indicator
input clk, rst_n, decrease; //clock; active low reset; to decrease
input [3:0]init_value, limit; //initial value; counter limit
reg [3:0]value_tmp, init_value_tmp; //for always block
//Combinational logic
always @(value or decrease or limit or borrow)begin
if(~decrease) begin value_tmp = value; borrow = 0; end //if decrease is 0, the counter stops counting down.
else begin
if(value == 0)begin value_tmp = limit; borrow = 1; end //if the value is 0, the next value would be the limit.
else begin value_tmp = value + 4'b1111; borrow = 0; end //Ex: limit = 9, so that value(now) = 0, then value(next) = 9 in decimal.
end
end
//Sequentical logic
always @(posedge clk or negedge rst_n) begin
if(~rst_n) value <= init_value_tmp; //asynchronous reset. set the value to initial value
else begin
value <= value_tmp;
end
end
endmodule以及警告信息:
警告:Xst:3002-此设计包含一个或多个与Spartan6体系结构直接不兼容的寄存器/锁存器。造成这种情况的两个主要原因要么是异步集和异步复位所描述的寄存器或锁存,要么是由异步集或复位描述的寄存器或锁存,而后者具有相反极性的初始化值(即初始化值为1的异步复位)。虽然这个电路可以建立,但它在面积、功率和性能方面创造了一个次优的实现。为了实现更好的实现,Xilinx强烈建议使用以下方法之一: 1)如果不需要从所有寄存器和锁存中删除set或reset (如果不需要的话) 2)修改代码以产生同步集和/或重置(两者都是首选) 3)确保所有寄存器的初始化值与所描述的异步集或复位极性4相同))使用-async_to_sync选项将异步集/复位转换为同步操作(使用此选项时强烈建议进行定时模拟) 有关详细信息,请参阅http://www.xilinx.com搜索字符串"Spartan6异步设置/重置“。 异步设置和重置的寄存器实例列表:单元中的value_0,单元中的value_1,单元中的value_2,单元中的value_3
似乎出现警告是因为3:0值。但我对此一无所知。我试图将异步重置更改为0,警告就消失了。但这不是我想要的。
发布于 2016-03-27 13:10:44
这个设计有几个问题。首先,init_value_tmp似乎没有一个值集。其次,由于它是一个非常量,斯巴达-6体系结构可能无法使用内置重置功能实际重置到该值。更改value <= init_value_tmp;,以便为value分配一些有意义的常量。
至于异步复位,它似乎是有效的,但由于我没有一个斯巴达-6设备,你必须合成它,并尝试自己。我担心的是,无论您使用什么常量值,都可能会遇到以前得到的极性警告。很可能同步重置会“工作”,因为它只是一个进入数据输入的CLB中的mux。
编辑:关于使用非常量重置值的目标,您几乎必然需要同步重置(这更像是赋值而不是重置):
always @(posedge clk) begin
if(~rst_n) value <= init_value_tmp;
else begin
value <= value_tmp;
end
endhttps://stackoverflow.com/questions/36245628
复制相似问题