Zu viele Signale zwischen zwei Komponenten?

Gast #843190
Lesenswert?

Hallo,

folgendes Problem.

Die erste Komponente errechnet mit einem Prozess 24 Werte a 64 Bit die 
an die zweite Komponente (24 Signale a 64 Bit) übergeben werden.

Der Prozess der zweiten Komponente benötigt die 24 Werte zur Berechnung.

Wie kann ich nun die Signalleitungen (1536) minimieren, a la Speicher.
Also sozusagen einen Adressbus für 24 Adressen und einen 64 Bit 
Datenbus.

Das Problem bei einem Prozess ist, dass er Signalleitungen nur am Ende 
des Prozesses aktualisiert, ich also während des Prozesses die einzelnen 
Werte nicht abftragen kann.

Besten Dank im Voraus

Gruß

Peter
Gast #843267
Lesenswert?

Hallo Blockram

a la

entity ram is

  port
  (
    clk        : in std_logic;
    wr         : in std_logic;
    write_addr : in std_logic_vector(4 downto 0);
    read_addr  : in std_logic_vector(4 downto 0);
    data_in    : in std_logic_vector(63 downto 0);
    data_out   : out std_logic_vector(63 downto 0)
  );

end ram;
------------------------------------------------------------------------ 
---
architecture ram_arch of ram is

  type ram_t is array (32 downto 0) of std_logic_vector(64 downto 0);
  signal ram : ram_t;

-------------------------------------------------
begin

process(clk)
begin

  if(clk'event and clk = '1') then

    if(wr = '1') then
      ram(conv_integer(write_addr)) <= data_in;
    end if;

    data_out <= reg(conv_integer(read_addr));

  end if;

end process;
------------------------------------------------------------------------ 
---
end ram_arch;

wirft bei mir zwei Probleme auf.

1. type ram_t is array (32 downto 0) of std_logic_vector(64 downto 0);

hatte ich als Lösung um ein Signal vom Typ ram_t zwischen den Komonenten 
zu erzeugen, ist aber nicht Synthetisierbar (nur eindimensionale 
Felder).

2. Wie oben schon erwähnt werden im Prozess erst am Ende die Signale 
aktualisiert, ich müsste aber schon im Prozess mehrere Adressen anlegen 
und auslesen.

Totzdem besten Dank, jeder Hinweis hilft weiter.

Gruß

Frank
Gast #843667
Lesenswert?

Hallo Jan

genau das meine ich ja.

Wenn ein Prozess logich abgearbeitet wird,
kann er in einem Durchlauf aus eine Blockram nicht mehrere Werte 
auslesen,
da die Signale erst mit Beendigung des Prozesses aktualisiert werden.

Ich müsste aber im Prozess Zugriff auf alle Werte bekommen.

Hoffe ich habe es verstanden :-)

Gruß

Frank
#846123
Lesenswert?

Also wenn Du 24x64 Bit gleichzeitig anliegen haben musst, kommst Du wohl 
nicht drum herum alle Leitungen direkt an die Komponente zu legen. ist 
halt ein wenig Schreibarbeit oder vielleicht kannst Du das Ganze auch 
über Generics lösen ?

Kommt auf die Geschwindigkeit und Auslastung an ... wenn in jedem Takt 
neue Daten anliegen und berechnet werden, dann musst/köntest Du es so 
machen. Wenn Du Zeit zwischen den Berechnungen hast, dann kannst Du das 
ganze vielleicht "seriell" übertragen ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren