Content-Addressable-Memory in VHDL

Gast #1117967
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.
#1118038
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?
Angehängte Dateien:
Gast #1118112
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.
#1118141
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)
Moderator (Firma: Titel) Persönliche Seite #1118288
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.
Angehängte Dateien:

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