2016-04-27 13 views
-2

Ich schreibe einfachen Code mit ISE 14.7, um Taktsignal zu generieren, aber die Ausgabe in iSim ist immer 1, bis ich = = mit < ändern = dann funktioniert die Uhr, könnten Sie mir sagen, warum?Verilog-Taktgeneratorfehler?

module nonblocking(clk); 
output reg clk; 

initial 
    #10 clk =0; 

always @ (clk) 
#10 clk = ~ clk; // change to <= to work 

endmodule 
+0

Ist dieser Code für Synthese oder Simulation? Welchen Toolchain/Simulator/Synth-Tool/Compiler benutzen Sie? Was genau versuchen Sie zu erreichen, da Sie keine Verzögerung haben, bevor Sie den Wert von "clk" umdrehen und "always @ clk" verwenden? – hexafraction

+0

Ich bevorzuge einfach als: 'initial clk = 0; immer # 10 clk = ~ clk; ' – rahulcodesinverilog

Antwort

0

Dieser Code macht ehrlich gesagt keinen Sinn.

Ihr aktueller Code besagt, dass basierend auf clk der Wert clk~clk sein sollte. Wenn Sie <= verwenden, geben Sie mindestens eine nicht blockierende Zuweisung an, was etwas mehr Sinn ergibt, aber immer noch nicht.

Wenn Sie einen Taktgenerator zur Simulation möchten, verwenden Sie die folgende in einem Anfangsblock (eine 10ns Zeit zu geben):

forever begin 
    #5 clk <= ~clk; 
end 

Wenn Sie einen Taktgenerator für FPGA-Synthese wollen, entweder schließen Sie einen physischen Oszillator Wenn Sie den Takteingang Ihres Geräts verwenden oder einen integrierten Oszillator verwenden (sofern auf Ihrem Gerät verfügbar). Sie können immer ein DCM/PLL/CMT/MMCM/wie auch immer Ihr FPGA es nennt, um die Taktfrequenz einzustellen.

+1

das für immer in der Initiale sein muss. – Morgan

+0

Ich benutze ISE 14.7, und wie ich Ihnen gerade sagte, wenn ich nonblocking Zuordnung verwende, erscheint die Uhr in iSim –

+0

@ HayderAl-Amily Obwohl es funktionieren kann, ist es nicht eine klare Art, es zu tun. Wenn Sie eine Uhr generieren möchten, generieren Sie sie auf eine Weise, die anderen Lesern Ihres Codes klar ist. Die Tatsache, dass es in einem nicht-flankengetriggerten Prozess ist, der einem Register im Laufe der Zeit zuweist, lässt es nicht ähnlich erscheinen, wie Taktgeneratoren typischerweise für Testbenches gemacht werden, und dieser Code ist nicht konsistent mit dem, was geschrieben werden müsste, um synthetisierbar zu sein. – hexafraction