2017-02-16 2 views
0

Ich habe folgende Zeile in meinem VHDL Code:Array-Implementierung auf FPGA mit VHDL

prbs_reg_feed <= prbs_reg_ip(byte_indx); 

wo

type reg_type is array (0 to 63) of std_logic_vector(8 downto 0); 

signal prbs_reg_feed   : std_logic_vector(8 downto 0); 

signal prbs_reg_ip    : reg_type; 

Ich weiß, wollen die FPGA Umsetzung dieser.

Danke, Vijay

Antwort

1

Dies wird zu einer Menge von kombinatorischer Logik synthetisiert erhalten. Diese kombinatorische Logik wird fast 600 Eingänge und 9 Ausgänge haben.

Mit einem FPGA synthesier, wenn Sie um diese Linie einen Code schreiben sind:

prbs_reg_feed <= prbs_reg_ip(byte_indx); 

Code verhält sich eher wie ein RAM zu machen, dann würden Sie wahrscheinlich einen RAM erhalten. (Sie sollten die Berichtsdateien Ausgabe von Ihrem Synthesizer lesen sicher zu machen.)

process(clock) is 
    begin 
    if rising_edge(clock) then 
     if we = '1' then 
     prbs_reg_ip(byte_indx) <= datain; 
     end if; 
    prbs_reg_feed <= prbs_reg_ip(byte_indx); 
    end if; 
    end process; 

NB: dies setzt voraus, byte_indx ein integer ist.

+0

Danke Metthew ... – vijay

2

Mit Sorgfalt und etwas Wissen über Ihre Ziel-FPGA wird dies als ein Speicherblock anstelle von kombinatorischer Logik implementiert werden.

Eine typische Einschränkung ist, dass die Zuordnung
prbs_reg_feed <= prbs_reg_ip(byte_indx);
in einem getakteten Prozess platziert werden muss, da die Speicherblöcke typischerweise synchron sind.

Der einzige Weg, um sicher zu sein, ist, ein paar Minuten zu nehmen und diesen Block selbst zu synthetisieren und den Synthesebericht zu lesen. Und wenn es nicht funktioniert, lies zuerst die Dokumentation und experimentiere weiter.

Some examples here für RAM. ROM kann das gleiche sein, aber ohne Möglichkeit, es zu schreiben, und vielleicht prbs_reg_ip als Konstante erklärt anstelle eines Signals, zum Beispiel

constant prbs_reg_ip : reg_type := (0 => X"C3", 1 => "80", 2 => "FF", ...); 

Für einige FPGAs oder FPGA-Tools, müssen Sie ein Attribut hinzufügen das Signal (oder Typ), die den Speicher, beispielsweise

signal prbs_reg_ip    : reg_type; 
attribute ram_style : string; 
attribute ram_style of prbs_reg_ip : signal is "block"; -- or "distributed" 

Siehe this Xilinx answer für ein Beispiel dafür.