Ich implementiere ein TRNG auf einem FPGA. Dieses TRNG basiert auf Jitter, der vom Ringoszillator erzeugt wird, und ich würde gerne wissen, wie der gegebene Ringoszillator auf dem FPGA implementiert wird, damit Jitter erzeugt wird.
module rng(start, r_out);
input start /* synthesis keep */;
reg rout /* synthesis keep */;
output r_out;
wire n0 /* synthesis keep */;
wire n1 /* synthesis keep */;
wire n2 /* synthesis keep */;
wire n3 /* synthesis keep */;
wire n4 /* synthesis keep */;
wire n5 /* synthesis keep */;
wire n6 /* synthesis keep */;
and a(n6,r0,start);
mynot x1(n6,n0);
mynot x2(n0,n1);
mynot x3(n1,n2);
mynot x4(n2,n3);
mynot x5(n3,n4);
mynot x6(n4,n5);
mynot x7(n5,r_out);
endmodule
module mynot(
input x,
output wire y
);
not(y,x);
endmodule
Dies ist mein Code für den Ringoszillator.
module rng_tb;
reg start;
wire q;
rng uut(start,q);
initial
begin
start=0;
#50 start=1;
end
endmodule
Dies ist der Code für Testbench.
Die Ausgabe ist jetzt don't care.
Dies ist kein Ringoszillator, da r0 unbekannt ist. Sie meinten wahrscheinlich r_out:
and a(n6,r_out,start);
Siehe auch: Router vs. r_out.
Wenn Sie Ihre Topologie korrigieren, werden Sie auf ein weiteres Problem stoßen: Eine Timing- (Delta-) Schleife, im Grunde ein korrekter Ringoszillator ohne Verzögerungen, wird Ihren Simulator zum Zeitpunkt 0 aufhängen. Sie müssen eine Verzögerung in Ihr "mynot"-Makro einfügen, um das Verlassen der Delta-Schritte ab Zeit 0 zu ermöglichen.
Eugen Sch.
Avanish Singh
Eugen Sch.
Eugen Sch.
Alter Furz
Avanish Singh
Avanish Singh
Greg
mynot
ist falsch. Sie definieren es als Eingabe, Ausgabe, instanziieren jedoch die Verbindungsreihenfolge als Ausgabe, Eingabe. Henser_out
hat keine Quelle. Ich bin überrascht, dass es kompiliert wurde, da(r_out&start)
es sich um eine illegale Ausgangszuweisung handelt. Zu Ihrer Information, selbst mit der Korrektur der Port-Reihenfolge kann es aufgrund der Compiler-Optimierung immer noch nicht oszillieren.Avanish Singh
Vance
Avanish Singh
Vance
Avanish Singh
Vance
Avanish Singh