www.mikrocontroller.net

Forum: FPGA, VHDL & Co. eigene Daten/Steuerregister erstellen


Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie bekomme ich es am leichtesten hin, im FPGA ein kleines Register zu 
erstellen, in dem ich Daten zum lesen/schreiben ablegen kann, die ich 
von Außen einlese?

Ich wollte das mit einer Adresse machen. Z.B.:

Ich übertrage vom µC zum FPGA ein Adressbyte und nachfolgend ein 
Datenbyte, über die zusätzliche R/W Steuerleitung weiß der FPGA, ob es 
einen Lese,- oder Schreibbefehl handelt.

Wenn nach einem Adressbyte ein Datenbyte folgt möchte ich das ganze im 
FPGA abspeichern, um dann später diese Daten für weitere Vorgänge im 
FPGA verwenden, in dem ich auslese, was auf der Adresse für ein 
Datenbyte gespeichert ist. Bis jetzt habe ich ca. 16-20 Bytes, die ich 
auf diese Art abspeichern möchte (viel mehr sollten es auch nicht 
werden). Kann mir da jemand was empfehlen, wie man sowas organisiert 
ohne IP Core für irgendwelche Speicherarten verwenden zu müssen?

Adr      data
0x00     0x55
...
...
0x07     0x0A

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  if (wr_n= '0') then
          case address is
            when x"00"   =>  Reg_0x00 <= write_data;
            when x"01"   =>  Reg_0x01 <= write_data;
            when x"02"   =>  Reg_0x02 <= write_data;
          end case;
   end if;

so oder so ähnlich (mit lesen entsprechend umgekehrt)

Dabei sind address und Reg_0x0x einfach std_logic_vector(7 downto 0)


Kest

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh man :D
An sowas dachte ich auch die ganze Zeit, aber das Mittagessen hat wohl 
die Hirnmasse verdrängt.

Danke!

Autor: Cheru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schöner wäre es wenn das Register in einem Array stehen würde, dann 
müsstest du nicht für jeden Fall einen case definieren..

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe bis jetzt mit Array' (in VHDL) nichts zu tun gehabt. Gibt es online 
was, was gut beschrieben ist?

Autor: Cheru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wüsste jetzt leider auch nichts, aber ev. kann dir mein Code, denn 
ich mal für ein Registerfile entwickelt habe, weiterhelfen:
entity reg_file is
  
  generic (
    registers_g : integer := registers_c);

  port (
    clk_i             : in  std_ulogic;
    res_i             : in  std_ulogic;
 
    reg_idx_i       : in  reg_idx_t;
    clk_en_reg_file_i : in  std_ulogic;
    
    reg_i             : in  data_vec_t;
    reg_o             : out data_vec_t);

end reg_file;

architecture rtl of reg_file is
   type    aRegisterFile is array (registers_g - 1 downto 0) of data_vec_t;
   signal  RegisterFile : aRegisterFile;
begin  -- rtl

   RegisterFileRead  : process(RegisterFile, reg_idx_i) is
   begin
      if (reg_idx_i = -1) then 
         reg_o <= (others => 'X');
      else
         reg_o <= RegisterFile(reg_idx_i); 
      end if; 
   end process RegisterFileRead;

   RegisterFileWrite : process (clk_i, res_i) is
   begin
       --Reset
      if (res_i = '0') then
        for i in 0 to registers_g - 1 loop
              RegisterFile(i)    <= (others => '0');
         end loop;
      --Clock
      elsif (clk_i'event AND clk_i = '1') then
  if (clk_en_reg_file_i = cActivated) then
    if (reg_idx_i = -1 or reg_a_idx_i >= registers_g) then
          report "Index - Decode Fehler" severity faiulure;
        else
           RegisterFile(reg_idx_i) <= reg_i;
         end if;
     end if;
   end if;
   end process RegisterFileWrite;

end rtl;

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, habe alles brav hinbekommen :) war doch leichter als ich dachte und 
mal wieder was dazugelernt.

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Array ist nicht unbedingt von Vorteil. Denn es gibt Fälle wo nur 
Read-Only oder Write-Only Register verwendet werden sollen. Da muss man 
es dann doch mit case alles schreiben

Kest

Autor: Cheru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für Readonly wären wohl ROM Elemente (die man aus Blockrams generieren 
kann) am besten, fall im FPGA welche vorhanden sind.


Aber wann braucht man WriteOnly Register?

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Xilinx gibt es fertigen Cores für RAMs, ROMs etc. Darauf wollte ich 
verzichten. Ein array reicht mir völlig aus, da ich es zum Ablegen von 
Steuer,- und Statusbytes brauche.

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber wann braucht man WriteOnly Register?

ich würde mal vermuten das man das braucht wenn man ressourcen sparen 
möchte (man braucht dann nur noch einen mux statt zwei), und wenn der 
registerinhalt woanders vorgehalten wird (z.b. in einem uC).
readonly muß ja nicht nur rom sein, können ja auch statusregister sein 
:-)

Autor: Cheru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh danke ist klar, ich hatte bei der Frage wohl nen Knoten im Kopf ;)

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.