Wie zu folgern, block-RAM in Verilog

Ich habe ein sehr spezifisches problem mit einem Projekt beschäftigt, das verfolgt mich nun seit Tagen. Ich habe die folgenden Verilog-code für ein RAM-Modul:

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

Verhält es sich genau wie erwartet, jedoch, wenn ich gehe zu synthetisieren bekomme ich die folgende:

Synthesizing Unit <RAM_param_1>.
    Related source file is "C:\Users\stevendesu\---\RAM_param.v".
        n = 11
        w = 16
    Found 32768-bit register for signal <n2059[32767:0]>.
    Found 16-bit 2048-to-1 multiplexer for signal <data_out> created at line 19.
    Summary:
    inferred 32768 D-type flip-flop(s).
    inferred 2049 Multiplexer(s).
Unit <RAM_param_1> synthesized.

32768 flip-flops! Warum nicht einfach schließen, ein block-RAM? Dieses RAM-Modul ist so riesig (und ich habe zwei davon - eine für den Unterricht Speicher, einen für die Daten-Speicher), es verbraucht die gesamte verfügbare Fläche des FPGA... mal 2.4

Ich versuche schon alles, um ihn zu zwingen, zu schließen, ein block-RAM, statt 33k flip-flops, aber es sei denn, ich kann es herausgefunden bald, ich kann erheblich verringern Sie die Größe der meinen Speicher nur auf passen auf einen chip.

Haben Sie überprüft, die Datenblätter für den FPGA, um zu sehen, welche Art von rams die es bietet? Wahrscheinlich gibt es application notes über die Herleitung rams von Ihrem FPGA-Hersteller auch. Aus Spitze von meinem Kopf ich denke, dass die meisten rams wohl nicht über ein "entfernen" - Funktionalität, wischt sich den ganzen Widder, also vielleicht könnten Sie versuchen, entfernen.
Der synthesizer kann nicht "ableiten", eine Struktur, die nicht physisch vorhanden ist, auf dem FPGA und verschiedenen FPGAs haben unterschiedliche RAMs. Dies ist nicht eine Verilog-problem ist, müssen Sie zum Lesen der Handbücher für Ihr FPGA.
Sorry, ich update eine neue Antwort, dies ist für BRAM , nicht verteilt RAM. Wirklich Leid tut.

InformationsquelleAutor stevendesu | 2013-12-18

Schreibe einen Kommentar