RAM shiften - Ersetzen der D-FFs durch RAM

Gast #2207561
Lesenswert?
• ▲
▼
Hallo!

Ich versuche gerade zu Übungszwecken ein bereits programmiertes Filter 
etwas zu optimiernen.
In der vorherigen Version werden D-FF als Verzögerungsspeicher des 
Eingangssignals x(n) eingesetzt.

Nun sollen die FF-Speicher in der neue Version durch einen RAM-Speicher 
ersetzt werden. Das speichern der Eingangswerte funktioniert auch soweit 
einwandfrei.
Mein Problem liegt nun darin, dass die gespeicherten Signale für spätere 
Auswertungen "verschoben" werden sollen, also quasi wie bei den 
vorherigen FFs sollen also alle Speicherelemente bei jedem Takt 
verschoben werden.

Nun bietet es sich wahrscheinlich nicht an alle RAM-Elemente zu 
verschieben. Ist es möglich dies über die Adresse zu regeln?

Das RAM wird bereits über einen Adresszähler angesprochen, der dafür 
sorgt, wenn der Speicherbereich voll ist, erneut wieder auf das erste 
RAM-Element geschrieben wird.


Hoffe mal die Erklärung ist verständlich ;)

Würde mich über jede Hilfe freuen....
Gruß Peter


Hier der Code:
1
type RAM_TYPE is array (0 to RAM_length-1) of std_logic_vector(7 downto 0);
2
signal RAM: RAM_TYPE := (others=>"00000000");
3

4
signal addr_cnt: integer range 0 to 7;    
5

6

7

8

9
type ary is array(0 to (RAM_length-1)) of signed(bit_width-1 downto 0);
10
signal data_out_buffer : ary;
11

12
begin
13

14
DO_RAM: process(clk)
15
  begin
16
    if rising_edge(clk) then
17
      if en='1' then                  -- falls RAM freigegeben
18
        if we = '1' then              -- SCHREIBEN
19
          RAM(addr_cnt) <= din;
20
        end if;
21
      end if;
22
    end if;
23
  end process DO_RAM;
24
  
25
  dout<=RAM(conv_integer(addr));          -- ASYNCHRONES LESEN
26

27

28
COUNT_ADDR: process(clk)
29
  begin
30
    if rst = '1' then
31
      addr_cnt<=0;
32
    elsif rising_edge(clk) then
33
      if addr_cnt<=RAM_length-2 then
34
        addr_cnt<=addr_cnt+1;
35
      else
36
        addr_cnt<=0;
37
      end if;
38
    end if;
39
  end process COUNT_ADDR;
Gast #2207629
Lesenswert?
• ▲
▼
Danke Uwe, aberhilft mir auch nicht wirklich.

Und es hat sich ein neues Problem ergeben:
Es soll auf alle "N" Registerinhalte gleichzeitig zugegriffen werden 
können. Lässt sich sowas überhaupt in einem RAM umsetzen?
Moderator (Firma: Titel) Persönliche Seite #2207653
Lesenswert?
• ▲
▼
Peter schrieb:
> Es soll auf alle "N" Registerinhalte gleichzeitig zugegriffen werden
> können.
Zeig mir ein RAM, das mehrere Datenwortausgänge hat...  :-o

> Lässt sich sowas überhaupt in einem RAM umsetzen?
Nur wenn mehrere RAMs parallelgeschaltet sind...

Also solltest du dich fragen:
"Warum brauche gerade ich was, was andere nicht brauchen?"
#2208274
Lesenswert?
• ▲
▼
Das gleiche habe ich gestern auch versucht, ein FIR filter mit 
generische Anzahl von Multiplizierer.

Dabei muss man soviel RAM Elemente haben wie der Anzahl der 
Multiplizierer um eben die Daten gleichzeitig holen zu können.

Aber wie man die richtige Adresse generiert bin ich immer noch am 
überlegen :)

Gruss,
Valentin

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