2016-05-03 9 views
0

Also arbeite ich an einem einfachen Register, das einen synchronisierten Eingang nimmt und, sobald die Eingabe bestätigt wird, diesen Zustand hält, bis der Reset aktiviert ist.Verwendung von Reg-Ausgabe als Eingabe Verilog

Mein Code sollte ziemlich selbsterklärend sein. Wird diese Überprüfung der reg-Ausgabe Probleme verursachen?

module walk_reg(
     input Walk_Sync, //pedestrian set walk-request 
     input WR_Reset,  //FSM reset, for during the walk service 
     input clk,  //clock 
     output reg WR //output 
     ); 


    always @(posedge (clk)) 
    begin 
     if(WR_Reset) //if reset enables, output goes to 0 
      WR <= 1'b0; 
     else if (WR) //if WR is already on, keep it on 
      WR <= WR; 
     else 
      WR <= Walk_Sync; //if reset is not enabled and WR isn't already one, assign output to Walk_Sync 
    end 

    endmodule // walk_reg 

EDIT Changed Name der Variablen, vergessen es im Code beantworten

+0

Möglicherweise liegt ein Problem vor, wenn WR_Reset nicht mit clk synchronisiert ist. – toolic

+0

Entschuldigung, Walk_Sync und WR_Request sind die gleiche Variable, ich hatte sie umbenannt und vergessen, sie tatsächlich im Code zu ändern. Dies ist jetzt behoben. Außerdem wird WR_Reset synchronisiert – qasddd

+0

Dann sehe ich kein Problem. – toolic

Antwort

2

nicht für einen Kommentar, aber zu viel zu ändern.

always @(posedge (clk)) 
    begin 
     if(WR_Reset) //if reset enables, output goes to 0 
      WR <= 1'b0; 
     else if (WR) //if WR is already on, keep it on 
      WR <= WR; 
     else 
      WR <= Walk_Sync; //if reset is not enabled and WR isn't already one, assign output to Walk_Sync 
    end 

ist das gleiche wie:

always @(posedge clk) 
begin 
    if (WR_Reset) //if reset enables, output goes to 0 
    WR <= 1'b0; 
    else if (!WR)  
    WR <= Walk_Sync; 
end 

Flip-Flops halten ihren Wert, wenn keine Bedingung erfüllt ist.

Noch besser Vorschlag von duskwuff:

always @(posedge clk) 
begin 
    if (WR_Reset) //if reset enables, output goes to 0 
    WR <= 1'b0; 
    else if (Walk_Sync)  
    WR <= 1'b1; 
end 
+1

Oder alternativ, vielleicht ein bisschen klarer: '... sonst if (Walk_Sync) WR <= 1'b1'. – duskwuff

0

auf einer Seite beachten, wird die WR_Reset nur den Flop nur zurückgesetzt, wenn die Uhr arbeitet. In den meisten Flop-Designs verwenden wir ASYNC Reset Edge Detection und dann die Reset-Erkennung basierend auf dem Takt.

always @(posedge (clk)) vs always @(posedge (clk) or posedge(WR_Reset))

Ansonsten kein Problem bei der WR für bedingte Zuweisung verwenden.