Ich erstelle einen Downcounter auf ISE 14.7. Ich setze einen asynchronen Reset (rst_n), wenn er 0 wird, wird der Wert von counter auf init_value gesetzt.Xst: 3002 in Verilog
Aber wie ich den Code syntheize, erscheint eine Warnung: Xst3002
Code:
`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
und die Meldung der Warnung:
ACHTUNG: Xst: 3002 - Diese Design enthält ein oder mehrere Register/Latches , die direkt mit der Spartan6-Architektur inkompatibel sind. Die beiden Hauptursachen hierfür sind entweder ein Register oder ein Latch beschrieben mit sowohl einem asynchronen als auch einem asynchronen Reset, oder ein Register oder Latch mit einem asynchronen Set oder Reset beschrieben, welches jedoch einen Initialisierungswert der entgegengesetzten Polarität (dh ) hat asynchroner Reset mit einem Initialisierungswert von 1). Während diese Schaltung gebaut werden kann, schafft sie eine suboptimale Implementierung in Bezug auf Fläche, Leistung und Leistung. Für eine optimale Umsetzung Xilinx empfehlen dringend, eine der folgende:
1) Remove either the set or reset from all registers and latches if not needed for required functionality 2) Modify the code in order to produce a synchronous set and/or reset (both is preferred) 3) Ensure all registers have the same initialization value as the described asynchronous set or reset polarity 4) Use the -async_to_sync option to transform the asynchronous set/reset to synchronous operation (timing simulation highly recommended when using this option)
Bitte beachten Sie http://www.xilinx.com Suchbegriff „Spartan6 asynchroner Set/Reset“ für weitere Details.
Liste der Registerexemplare mit asynchronen Setz- und Rücksetz: VALUE_0 in Einheit value_1 in Einheit value_2 in Einheit VALUE_3 in Einheit
es scheint, dass die Warnung erscheint, weil der [3: 0] -Wert . Aber ich habe keine Ahnung davon. Ich habe versucht, den asynchronen Reset auf 0 zu ändern, die Warnung ist verschwunden. Aber das ist nicht was ich will.
Nur ein Nebengedanke. Sie sollten beim Zurücksetzen einen Wert auf "borgen" legen. – sharvil111
Bitte Code mit Kommentaren aktualisieren, was Sie eigentlich wollen und was das mögliche Verhalten Ihrer Schaltung ist –