2016-05-27 17 views
0
module container(x1, x2, x3, NUMBER); 

input x1, x2, x3; 
output NUMBER; 
wire w0, w1; 

dec_counter U1 (x1, x2, x3, w0, w1); 
doz_counter U2 (w1, w0, NUMBER); 


endmodule 


module dec_counter(clk, reset, clk_enable, counter, terminal); 

    input clk; 
    input reset; 
    input clk_enable; 
    output reg [3:0] counter; 
    output reg terminal; 



always @(posedge clk, posedge clk_enable, posedge reset) 
     if(reset) 
     begin 
      terminal <= 1; 
      counter <= 0; 
     end 
     else if(clk && clk_enable) 
      if(counter < 9) 
      begin 
       terminal <= 1; 
       counter <= counter + 1; 
      end   
      else 
      begin 
       terminal <= 1; 
       counter <= 0; 
      end 
endmodule 



module doz_counter(dozens, unity, number); 

input dozens; 
input unity; 
output reg [7:0] number; 

initial begin 
    number = 8'd0; 
end  

always @(posedge dozens) 
    if(dozens) 
     number <= number + 1; 

endmodule 

Hallo! Ich bin neu bei Verilog, und ich habe mein erstes Problem. Ich habe das Modul dec_counter, das von 0 bis 9 zählt. Wenn es zu 9 + 1 kommt, zeigt es 0 und setzt "output terminal" auf 1. Jetzt wollte ich diesen Wert an mein nächstes Modul doz_counter als "dutzende Eingabe" übergeben. Ich habe versucht, Verdrahtung, wie Sie in Modul Container sehen können, aber in meiner Simulation Dutzende ist immer X, auch wenn Terminal ist 1.So verdrahten Sie Module und übergeben den Wert

Ich fühle mich wie ich mache einige kritische Designfehler.

Antwort

2

Der von Ihnen eingegebene Code funktioniert einwandfrei. Beachten Sie die folgende Abbildung für Anschlussverbindungsregeln. Der Ausgabeport kann reg oder wire sein, aber der Eingabeport ist immer ein wire.

Port connection

A paar Fehler sind wie folgt aufgelistet:

Sie haben verbunden, um einen 4-Bit-Port, reg [3:0] counter; in dec_counter Modul Einzelbit-Port, w0 in container Modul . Dies führt dazu, dass die Anschlussverbindungsbreite nicht übereinstimmt.

wire [3:0] w0; 
wire w1; 
// ... 

Ähnlich Einzelbit-PortNUMBER in container Modul ist mit 8-Bit-Portnumber in doz_counter Modul. Dies führt dazu, dass die Anschlussverbindungsbreite nicht übereinstimmt.

output [7:0] NUMBER; 
//... 

Auch könnte der Wert von terminal auf Null zurückgesetzt sein. Die if - else Bedingungen fahren den gleichen Wert von terminal. Es sollte verschiedene Werte von terminal als terminal <= 1 bzw. terminal <= 0; haben. Hier

ist ein Prüfstand für Ihren Code als Referenz:

module top(); 

bit x1, x2, x3; 
bit [7:0] NUMBER; 

container c(x1, x2, x3, NUMBER); 

always #5 x1 = ~x1; 

initial 
begin 
#6 x2 = 1; 
#6 x2 = 0; x3 = 1; 
#100 $finish; 
end 

endmodule