Wann sollte ich Negedge für ein Taktsignal verwenden?

Ich habe über Blockram gelesen und bin auf den folgenden Beitrag gestoßen. Ich stelle hier fest, dass derjenige, der den Code geschrieben hat, Negedge für das Taktsignal verwendet. Bisher verwenden fast alle Beispiele, die ich von Verilog gesehen habe, Posege für Taktsignale. Tatsächlich habe ich noch keine Always-Blöcke mit Negedge-Spezifikation gesehen. Ich frage mich nur, wann Sie das verwenden möchten und warum der folgende Code Negedge enthalten könnte?

module RAM_param(clk, addr, read_write, clear, data_in, data_out);
    parameter n = 4;
    parameter w = 8;

    input clk, read_write, clear;
    input [n-1:0] addr;
    input [w-1:0] data_in;
    output reg [w-1:0] data_out;

    reg [w-1:0] reg_array [2**n-1:0];

    integer i;
    initial begin
        for( i = 0; i < 2**n; i = i + 1 ) begin
            reg_array[i] <= 0;
        end
    end

    always @(negedge(clk)) begin
        if( read_write == 1 )
            reg_array[addr] <= data_in;
        if( clear == 1 ) begin
            for( i = 0; i < 2**n; i = i + 1 ) begin
                reg_array[i] <= 0;
            end
        end
        data_out = reg_array[addr];
    end
endmodule
Ein negativer Takt ist ein um 180 Grad verschobener gestellter Takt, wenn das Tastverhältnis 50 % beträgt. Es wird normalerweise für DDR-Datenübertragungen verwendet.

Antworten (2)

Wenn Sie ein Anfänger im digitalen Design sind, würde ich empfehlen, dass Sie nur durch negative Flanken getriggerte Register als Schnittstelle zu anderen Schaltungen verwenden, wenn dies erforderlich ist, um das richtige Timing zu erzielen. Ein Beispiel dafür ist eine DDR-Schnittstelle, wie @Paebbels in seinem Kommentar erwähnt.

Wenn Sie ein erfahrener Digitaldesigner sind, könnten Sie natürlich ein negativ flankengetriggertes Register in einem ansonsten positiv flankengetriggerten Design verwenden, um eine Schnittstelle zwischen ausgerichteten Taktdomänen herzustellen.

Der wichtigste Punkt, an den Sie sich erinnern sollten, ist, dass Sie positive und negative flankengetriggerte Register in einem Design nicht mischen sollten, es sei denn, Sie sind sich absolut sicher, dass Sie wissen, was Sie tun, da dies sonst zu Fehlern führen kann, die sehr schwer zu finden sind.

PS Der von Ihnen gezeigte Code wird von den meisten Synthesewerkzeugen nicht als Blockram implementiert, da das klare Signal den Inhalt auf Null setzt. Es wird höchstwahrscheinlich in diskreten Registern implementiert und sehr langsam sein.

Bearbeiten: Eine andere Möglichkeit, eine negativ flankengetriggerte Uhr in einem positiv flankengetriggerten Design zu verwenden, besteht in einem synchronen Block-RAM. Wenn Sie einen synchronen Block-RAM zwischen zwei positiv flankengetriggerten Registern haben und den Block-RAM auf der negativen Flanke takten, umgehen Sie die Eintaktverzögerung des ansonsten synchronen Block-RAM.

jedes Mal, wenn Sie etwas zwischen positiven Flanken tun möchten.

RAM hat RAS / ~ CAS an der negativen Flanke, von der Sie die andere Hälfte der Adresse usw. verriegeln möchten ...