eigene Daten/Steuerregister erstellen

Gast #542862
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
Gast #542875
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
Gast #543581
Lesenswert?
• ▲
▼
Ich wüsste jetzt leider auch nichts, aber ev. kann dir mein Code, denn 
ich mal für ein Registerfile entwickelt habe, weiterhelfen:
1
entity reg_file is
2
  
3
  generic (
4
    registers_g : integer := registers_c);
5

6
  port (
7
    clk_i             : in  std_ulogic;
8
    res_i             : in  std_ulogic;
9
 
10
    reg_idx_i       : in  reg_idx_t;
11
    clk_en_reg_file_i : in  std_ulogic;
12
    
13
    reg_i             : in  data_vec_t;
14
    reg_o             : out data_vec_t);
15

16
end reg_file;
17

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

23
   RegisterFileRead  : process(RegisterFile, reg_idx_i) is
24
   begin
25
      if (reg_idx_i = -1) then 
26
         reg_o <= (others => 'X');
27
      else
28
         reg_o <= RegisterFile(reg_idx_i); 
29
      end if; 
30
   end process RegisterFileRead;
31

32
   RegisterFileWrite : process (clk_i, res_i) is
33
   begin
34
       --Reset
35
      if (res_i = '0') then
36
        for i in 0 to registers_g - 1 loop
37
              RegisterFile(i)    <= (others => '0');
38
         end loop;
39
      --Clock
40
      elsif (clk_i'event AND clk_i = '1') then
41
  if (clk_en_reg_file_i = cActivated) then
42
    if (reg_idx_i = -1 or reg_a_idx_i >= registers_g) then
43
          report "Index - Decode Fehler" severity faiulure;
44
        else
45
           RegisterFile(reg_idx_i) <= reg_i;
46
         end if;
47
     end if;
48
   end if;
49
   end process RegisterFileWrite;
50

51
end rtl;
Gast #544917
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 
:-)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.