Forum: FPGA, VHDL & Co. Content-Addressable-Memory in VHDL


von Heidi R. (heidi)


Angehängte Dateien:

Lesenswert?

Hallo Jungs. :)

Ich hab hier eine Aufgabe im Dateneingang beigelegt.

Ich weiß nicht recht, wie ich mit der Lösung anfagen soll.

Könnt ihr mir vielleicht helfen?

von Heidi R. (heidi)


Angehängte Dateien:

Lesenswert?

hier ist eine Vorlage, die soll ergänzt werden.

Ich weiß nicht wie.

von Gast (Gast)


Lesenswert?

Hast du denn gar keine Idee? Kannst das ja in Einzelschritten machen.
Zuerst versuchen, etwas in den Speicher zu schreiben (das array) und per 
normaler Adresse wieder auszulesen. Danach den Speicher durchsuchen, 
also jede Adresse aufrufen und vergleichen.

von Heidi R. (heidi)


Angehängte Dateien:

Lesenswert?

Gast wrote:
> Hast du denn gar keine Idee? Kannst das ja in Einzelschritten machen.
> Zuerst versuchen, etwas in den Speicher zu schreiben (das array) und per
> normaler Adresse wieder auszulesen. Danach den Speicher durchsuchen,
> also jede Adresse aufrufen und vergleichen.

Danke für deine Antwort.)
Wie lese ich den per normaler Adresse aus?
Könntest du ein Beispiel in VHDL geben?

von Gast (Gast)


Lesenswert?

In dem Fall machst du das so, wie du auch ein array in C ansprechen 
würdest, auch wenn das ein gefährlicher Vergleich ist.

Also einfaches lesen und schreiben z.B.
1
process(clk)
2
begin
3
4
 if clk'event and clk='1' then
5
  
6
  -- schreiben
7
  mem_array(addr)(7 downto 0) <= data_in(7 downto 0);
8
  
9
  -- lesen
10
  data_out(7 downto 0) <= mem_array(addr)(7 downto 0);
11
12
end process;

Möglicherweise musst du die Adresse noch nach Integer wandeln, bon grad 
nicht sicher.
Nun kannst du einen weiteren Prozess schreiben bzw. den ausbauen 
(if-else-Konstrukte), der bei einem eingehenden data_in eben alle 
Adresspositionen des array nacheinander absucht (pro Takt eine Position, 
Adresse pro Takt erhöhen -> interner Zähler, keine for-Schleife 
verwenden!) und vergleicht. Falls der Vergleich stimmt, gibst du die 
Adresse aus.

von Heidi R. (heidi)


Lesenswert?

Ist hier echt Keiner, der VHDL kann???

Ich wollte VHDL an diesem Beispiel verstehen, lernen.

Aber diese ganzen Fachwörter bringen mich aus der Fassung...

von Gast (Gast)


Lesenswert?

Zusatz: write_enable muss noch eingebaut werden, sonst wird immer 
geschrieben und gelesen -> if-else-Konstrukt.

von Heidi R. (heidi)


Lesenswert?

Gast wrote:
> Also einfaches lesen und schreiben z.B.


>
Danke GAst,) ich versuche es gerade nachzuvolziehen.

von Heidi R. (heidi)


Lesenswert?

Ich habe noch sowas hier, als case_Beispiel.



1
signal x_count: integer range 15 downto 0;
2
signal s1,s2,s3: std_logic;
3
4
--logic functions
5
begin
6
7
8
    case x_count is
9
    when 1 =>
10
      s1 <= '1';
11
      s2 <= '1';
12
      s3 <= '0';
13
    when 2 to 15 =>
14
      s1 <= '1';
15
      s2 <= '0';
16
      s3 <= '1';
17
    when 0 =>
18
      s1 <= '0';
19
      s2 <= '0';
20
      s3 <= '0';
21
    when others => null;
22
      end case;
23
24
25
end behavior;

wie kann man das hier noch in mein Bespiel einpflanzen?

:o)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Der Prof/Lehrer scheint mir recht realitätsnah:
1
* Verwenden Sie nur VHDL-Konstrukte, bei denen Sie wissen, welche 
2
  Schaltungselemente daraus entstehen.
Das sollte man sich doch zu Herzen nehmen  ;-)

PS: Ich seh mir das mal an, wenns wieder hell wird. Gute Nacht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich gebe mal den angehängten Vorschlag ab  ;-)
Das sollte nicht allzuweit von den Forderungen entfernt sein.

Ein wenig problematisch ist die Definition von
1
Enable:  mit der steigenden Flanke wird eine Schreib- oder Suchzyklus gestartet
Muss da jetzt tatsächlich eine Flankenerkennung reingehackt werden?
Was passiert, wenn enable während der Suche '0' wird?
Ich habe das Signal mal als ein statisches Signal betrachtet, das 
anliegen muß, solange eine Aktion gefordert ist. Eigentlich ist dieses 
Enable unnötig, weil die steuernde Schaltung eigentlich wissen sollte, 
was sie will und tut.

Besser wäre eine Definition von
1
type memory is array (15 downto 0) of bit_vector (7 downto 0);
Dann könnte man sich die Bit-Zuweisungen sparen.

BTW:
> Der Prof/Lehrer scheint mir recht realitätsnah
Diese Aussage muß ich etwas revidieren,
wegen der etwas unzeitgemäßen LIBs und der bit-Vektoren  :-/
Die Aussage zu den verwendeten VHDL-Elementen gilt aber uneingeschränkt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.