Ich habe ein Problem beim Verbinden verschiedener Module in einem oberen Modul. Ich möchte eine sehr einfache PWM mit einem Zähler und einem Komparator machen.
Schalter:
module counter
#(parameter N = 6)
(
input wire clk,
input wire enable,
output wire [N-1:0] q
);
reg [N-1:0] r_reg=0, r_next=0;
always @(posedge clk) begin
r_reg <= r_next;
end
always @(*) begin
if (enable)
r_next = r_reg +1;
else
r_next = r_reg;
end
assign q = r_reg;
endmodule
Komparator:
module pwm
#(parameter N = 6)
(
input wire [N-1:0] cin,
output wire pwmsig
);
reg [N-1:0] threshold;
reg d = 0;
initial threshold = 6'b011111;
always @(*) begin
if (threshold > cin)
d = 1'b1;
else
d = 1'b0;
end
assign pwmsig = ~d;
endmodule
Die Module funktionieren gut und wenn ich alles in ein Modul stecke, funktioniert es wie vorgesehen. Aber wenn ich versuche, sie in einem Top-Modul zu verbinden:
module top
#(parameter N=6)
(
input wire clk, enable,
output wire pwmled
);
wire [N-1:0] connection;
counter cnt1(
.clk(clk),
.enable(enable),
.q(connection)
);
pwm pwm1(
.cin(connection),
.pwmsig(pwmled)
);
endmodule
Ich bekomme eine Fehlermeldung:
FEHLER - Port 'clk' ist nicht verbunden. FEHLER - Port 'enable' ist nicht verbunden.
Die RTL-Simulation funktioniert einwandfrei (ich nehme nur das Top-Modul in meine Testbench auf). Es lässt mich einfach nicht 'clk' und 'enable' mit tatsächlichen Pins verbinden.
Ich verwende Lattice Diamond 3.1.
Bearbeiten: Ich erhalte die folgenden Warnungen im Kartenbericht:
WARNUNG - Zuordnung: Fehlender E/A-Puffer für Top-Level-Port-Ena...Logik wird verworfen. WARNUNG - map: IO-Puffer fehlt für Top-Level-Port clk...Logik wird verworfen.
Ich habe das Design durch Quartus II laufen lassen und Arbeitsergebnisse erhalten ... irgendwelche Ideen, wo ich mit Diamond falsch liege?
Ich bin auf ein ähnliches Problem gestoßen. Mein Problem war, dass ich während des Debuggens die Submodulausgänge vom Hauptmodul getrennt hatte. Wenn der Optimierer sieht, dass die Ausgänge nicht verbunden sind, geht er davon aus, dass das Modul nicht benötigt wird, und entfernt es, um Platz zu sparen. Als Ergebnis bleiben die Eingänge erdfrei; Dies wird die Fehler verursachen, die Sie sehen.
Wenn Sie das Modul irgendwann trennen möchten, weisen Sie einen der Modulausgänge einer Dummy-Last (wie einer Debugging-LED) zu, und Sie werden in Ordnung sein.
Ich hatte dieses Problem auch mit dem Synthesetool Synplify Pro. Es stellte sich heraus, dass ich versehentlich ein Leerzeichen in den Namen des Entity-Ports vor dem Tab eingefügt hatte.
Xcodo
FarhadA