2016-12-21 4 views
0

ich zur Zeit eine Uhr zu machen, dass wir mal mit immer ein Problem zu starten und mit einstellen @()Probleme, mit Block immer in Verilog

always @ (posedge clk or posedge reset or posedge sw3 or posedge sw4) begin 
    if(reset == 1) begin //reset signal is not a pulse therefore this could do the thing needed for keep pressing the reset button 
     tmp_second = 0; 
     tmp_minute = 0; 
     tmp_hour = 0; 
    end 

der oben ist nur ein Teil des vollständigen Code und der Rest davon ist etwa die Zeit von SW3 und SW4 einstellen, aber wenn ich versuche, dieses Modul Synthetisiere folgende Fehler aufkommt

ERROR:Xst:2089 - "first_mode.v" line 69: This sensitivity list construct will match none of the supported FF or Latch templates. 

wenn ich ändern blockieren die immer wie

always @ (posedge clk or posedge reset) begin 

ich nicht die Fehlermeldung erhalten, aber ich will posedge SW3 und SW4

wäre es eine Möglichkeit sein, unabhängig von clk arbeiten immer zu verwenden, blockieren diejenigen 4

+0

Sie sollten von Hardware prospektiv für jede Art von HDL-Design denken. Die Hardware-FlipFlops haben einen Takt (flankensensitiv) und einen Reset-Pin. In Ihrem Code haben Sie jedoch mehrere flankensensitive Signale für den always-Block angegeben, und deshalb zeigt der Synthesizer den Fehler an. Besser zuerst zeichnen Sie etwas grobe Hardware und dann entsprechend. Warum brauchst du 'posedge sw3' und' posegege sw4' statt nur 'sw3' und' sw4'? –

Antwort

0

einschließlich Wenn Synthetisierung, ist es ratsam zu sein, konsistent durch Festhalten an einer Vorlage. Hier ist eine solche Vorlage für sequentielle Logik mit einem asynchronen Reset, die alle Synthese-Tools verstehen sollten:

always @(posedge CLOCK or posedge RESET) // or negedge 
    begin 
    // PUT NO CODE HERE 
    if (RESET == 1'b1) // or (RESET == 1'b0) for an active-low reset 
     // set the variables driven by this always block to their reset values 
     // MAKE SURE YOU USE NON-BLOCKING ASSIGNMENTS (<=) 
    else 
     // do things that occur on the rising (or falling) edge of CLOCK 
     // stuff here gets synthesised to combinational logic on the D input 
     // of the resulting flip-flops 
     // MAKE SURE YOU USE NON-BLOCKING ASSIGNMENTS (<=) 
end 

Hier sind die entsprechende Vorlage für einen sequentiellen Prozess ohne einen asynchronen Reset:

always @(posedge CLOCK) // or negedge 
    begin 
    // do things that occur on the rising (or falling) edge of CLOCK 
    // stuff here gets synthesised to combinational logic on the D input 
    // of the resulting flip-flops 
    // MAKE SURE YOU USE NON-BLOCKING ASSIGNMENTS (<=) 
end 

Und schließlich , hier ist die Vorlage für kombinatorische Logik:

always @(*) 
    begin 
    // implement your combinational logic here 
    // MAKE SURE YOU USE BLOCKING ASSIGNMENTS (=) 
end 

Ihr Code entspricht keiner dieser drei Vorlagen oder einer anderen. Deshalb verstehen Sie das Synthese-Tool nicht.

Verwandte Themen