HDLBits-Verilog-Lernaufzeichnung | Verilog Language-Basics (2)

9.Drähte deklarieren | Drahtdekl

Problem: Implementieren Sie die folgende Schaltung. Erstellen Sie zwei Zwischendrähte (mit einem beliebigen Namen), um die UND- und ODER-Gatter miteinander zu verbinden. Beachten Sie, dass der Draht, der das NOT-Gatter speist, tatsächlich ein Drahtausgang ist, sodass Sie hier nicht unbedingt einen dritten Draht angeben müssen. Beachten Sie, dass Drähte von genau einer Quelle (Ausgang eines Gatters) angesteuert werden, aber mehrere Eingänge speisen können.

Wenn Sie der Schaltungsstruktur im Diagramm folgen, sollten Sie am Ende vier Zuweisungsanweisungen erhalten, da es vier Signale gibt, denen ein Wert zugewiesen werden muss.

Fügen Sie hier eine Bildbeschreibung ein

`default_nettype none
module top_module(
    input a,
    input b,
    input c,
    input d,
    output out,
    output out_n   ); 
    
    wire ab_out;
    wire cd_out;
    wire abcd_out;
    assign out = (a & b) | (c & d);
    assign out_n = ~((a & b) | (c & d));

endmodule

Hinweis:
1. „default_nettype none“ wird später in Vectors erwähnt.
2. Nach dem Ausführen stellte ich plötzlich fest, dass die definierten drei Zeilen ab_out, cd_out und abcd_out nicht verwendet wurden (damals war es wirklich nutzlos, es war einfach zu befolgen). Die Regeln (ohne nachzudenken), nachdem ich die drei Anweisungen gelöscht hatte, wurde die Operation ebenfalls erfolgreich durchgeführt. Logischerweise macht das natürlich auch dann Sinn, wenn es nicht läuft. Obwohl dadurch die Anzahl der Codezeilen eingespart wird, ist die Logik jeder Codezeile sehr kompliziert und entspricht nicht der Idee der Modularisierung, wenn sich dahinter ein kontinuierlicher Schaltplan befindet.
Da die erwartete Anzahl an Codezeilen 5 beträgt, ist die Verbesserung wie folgt.

`default_nettype none
module top_module(
    input a,
    input b,
    input c,
    input d,
    output out,
    output out_n   ); 
   
    wire ab_out, cd_out;   //可以直接连续赋值
    assign ab_out = a & b;
    assign cd_out = c & d;
    assign out = ab_out | cd_out;
    assign out_n = ~out;

endmodule

Es gibt keine einheitliche Antwort, Sie können selbst mehr ausprobieren

10. 7458-Chip

Problem: Erstellen Sie ein Modul mit der gleichen Funktionalität wie der 7458-Chip. Es verfügt über 10 Eingänge und 2 Ausgänge. Sie können eine Zuweisungsanweisung verwenden, um jede der Ausgangsleitungen anzusteuern, oder Sie können (vier) Leitungen zur Verwendung als Zwischensignale deklarieren, wobei jede interne Leitung durch den Ausgang eines der UND-Gatter angesteuert wird. Versuchen Sie es zur zusätzlichen Übung in beide Richtungen.

Fügen Sie hier eine Bildbeschreibung ein

Im Fragenabschnitt wurden zwei Methoden erwähnt. Probieren wir sie beide aus.
Dann sind 2 bis 10 Zeilen erforderlich.
1. Sie können eine Zuweisungsanweisung verwenden, um jede der Ausgangsleitungen anzusteuern,
und es dann versuchen. Es werden nur 2 Zeilen verwendet, genau wie bei der vorherigen Frage. Eine Zeile drückt die Logik direkt vollständig aus .

assign p1y = (p1a & p1b & p1c) | (p1f & p1e & p1d);
assign p2y = (p2a & p2b) | (p2c & p2d);

2、Sie können auch (vier) Drähte zur Verwendung als Zwischensignale deklarieren, wobei jeder interne Draht vom Ausgang eines der UND-Gatter angesteuert wird.

	wire and1, and2, and3, and4;
	
    assign and1 = p1a & p1b & p1c;
    assign and2 = p1f & p1e & p1d;
    assign and3 = p2a & p2b;
    assign and4 = p2c & p2d;
    
    assign p1y = and1 | and2;
	assign p2y = and3 | and3;

Je suppose que tu aimes

Origine blog.csdn.net/qq_43374681/article/details/132447090
conseillé
Classement