Mein Verilog-Code sieht so aus. Das Modul implementiert ein Nachschlagetabellen-ROM mit einem Adreßregister, das an einem Taktimpuls inkrementiert. Die Ausgabe davon wird dekodiert, um eine 32-Bit-Zahl zu ergeben. Ich verstehe nicht, warum k ein Register sein muss. Tatsächlich möchte ich nicht, dass k eine getaktete Verzögerung hat, nachdem sich das Adressregister geändert hat. Wie soll die Dekodierung addr
spezifiziert werden?Debugging-Fehler "prozedurale Zuweisung zu einem Nicht-Register k ist nicht zulässig"
(Beachten Sie, dass scheint nicht verwandt mit der ähnlich genannten anderen Frage auf SO, da ich schon überprüft, dass ich - ich will kein Register auf der Ausgabe. Ich möchte nur asynchrone Decodierung der Ausgabe eines Zählregisters. Vielleicht ich bin verwirrt über die < = Operator, nehme ich an immer ein getaktetes Register erzeugen, aber vielleicht sollte ich < = verwenden immer.)
module k_rom (input clk, input reset, output [31:0] k);
// Constants defined by the SHA-2 standard.
reg [5:0] addr;
always @ (addr)
begin
case(addr)
6'h00: k = 32'h428a2f98;
6'h01: k = 32'h71374491;
6'h02: k = 32'hb5c0fbcf;
6'h03: k = 32'he9b5dba5;
6'h04: k = 32'h3956c25b;
6'h05: k = 32'h59f111f1;
6'h06: k = 32'h923f82a4;
6'h07: k = 32'hab1c5ed5;
6'h08: k = 32'hd807aa98;
6'h09: k = 32'h12835b01;
6'h0a: k = 32'h243185be;
// other constants not shown for brevity
6'h3c: k = 32'h90befffa;
6'h3d: k = 32'ha4506ceb;
6'h3e: k = 32'hbef9a3f7;
6'h3f: k = 32'hc67178f2;
endcase
end
always @ (posedge clk)
begin
if(reset)
addr <= 6'b0;
else
addr <= addr + 6'b1;
end
endmodule
Ich denke, dass ein Großteil meiner Verwirrung darauf zurückzuführen ist, wann es eine Verriegelung gegen kombinatorische Logik erzeugen wird: die Hardware-Instanziierung mit den Sprachkonstrukten in Bezug setzen. Reg klingt wie ein Register, aber ich glaube nicht. Also, wenn ich das verstehe, ist es eigentlich nur die Tatsache, dass die Empfindlichkeit, die erzeugt wird, eine tatsächliche getaktete Verriegelung erzeugt? Ich habe Verilog an anderer Stelle gefunden, die <= auch für kombinatorische Logik verwendet. – Robotbugs
Dies ist ein sehr weites Diskussionsthema. Verweisen Sie auf diese Frage (http://electronics.stackexchange.com/questions/91688/difference-between-blocking-and-nonblocking-assignment-verilog) für "=" und "<=" Unterschied. – sharvil111
Verriegelungen sorgen für viel Zeit und Probleme beim Entwurf. Latches werden nicht nur durch fehlende "posedge" -Stücke, sondern auch durch das Fehlen von "else" in 'if ..else'-Anweisung, fehlende 'default'-Anweisung usw. Siehe [this link] (http://stackoverflow.com/questions/22459413/what-is-inferred-latch-and-how-it-is-created-when-it -is-missing-else-statement-i) und [this link] (http://electronics.stackexchange.com/questions/38645/why-are-inferred-latches-bad) für grundlegende Idee über Latches. – sharvil111