mikrocontroller.net

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


Autor: Heidi Rasch (heidi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Heidi Rasch (heidi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier ist eine Vorlage, die soll ergänzt werden.

Ich weiß nicht wie.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heidi Rasch (heidi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

process(clk)
begin

 if clk'event and clk='1' then
  
  -- schreiben
  mem_array(addr)(7 downto 0) <= data_in(7 downto 0);
  
  -- lesen
  data_out(7 downto 0) <= mem_array(addr)(7 downto 0);

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.

Autor: Heidi Rasch (heidi)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Gast (Gast)
Datum:

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

Autor: Heidi Rasch (heidi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> Also einfaches lesen und schreiben z.B.


>
Danke GAst,) ich versuche es gerade nachzuvolziehen.

Autor: Heidi Rasch (heidi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe noch sowas hier, als case_Beispiel.




signal x_count: integer range 15 downto 0;
signal s1,s2,s3: std_logic;

--logic functions
begin


    case x_count is
    when 1 =>
      s1 <= '1';
      s2 <= '1';
      s3 <= '0';
    when 2 to 15 =>
      s1 <= '1';
      s2 <= '0';
      s3 <= '1';
    when 0 =>
      s1 <= '0';
      s2 <= '0';
      s3 <= '0';
    when others => null;
      end case;


end behavior;




 

wie kann man das hier noch in mein Bespiel einpflanzen?

:o)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
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
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.