Forum: FPGA, VHDL & Co. Suche ein brauchbaren ROM/RAM-Bereich


von peter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, guten Tag.
Ich suche ein ROM/RAM-Bereich für mein Vorgaben.

http://www.lothar-miller.de/s9y/categories/4-FPGA
Ich habe etwas bei Lothar Miller gefunden und  mal teile davon mit 
Quartus compiliert.

Könnte man so ein Konstruct für ein RAM/ROM auf einem DE1 nutzen mit bis 
zu 64KB. Dieses RTL sieht eigentlich brauchbar aus ohne das man vermutet 
das da irgend etwas den Bach runtergeht?

Danke.
Gruss
1
library IEEE; 
2
use IEEE.STD_LOGIC_1164.ALL; 
3
use IEEE.NUMERIC_STD.ALL; 
4
5
entity rom is
6
  port(
7
    clk : in  std_logic;
8
    led_g : out std_logic_vector(7 downto 0)
9
    );
10
end rom;
11
12
architecture Behavioral of rom is
13
signal c : integer range 0 to 10000000 := 0; 
14
15
signal Result   : signed (7 downto 0);
16
signal RomAddr  : integer range 0 to 127;
17
  
18
type Rom64x8 is array (0 to 127) of signed (7 downto 0); 
19
  constant R_Rom : Rom64x8 := (
20
    x"ff",  x"ff",  x"81",  x"82",  x"83",  x"11",  x"14",  x"17",
21
    x"1a",  x"1d",  x"20",  x"23",  x"26",  x"29",  x"2c",  x"2f",
22
    x"32",  x"36",  x"39",  x"3c",  x"3e",  x"40",  x"43",  x"46",
23
    x"48",  x"4b",  x"4d",  x"50",  x"52",  x"54",  x"57",  x"59",
24
    x"5b",  x"5d",  x"5f",  x"62",  x"64",  x"65",  x"67",  x"69",
25
    x"6b",  x"6d",  x"6e",  x"70",  x"71",  x"73",  x"74",  x"75",
26
    x"76",  x"77",  x"79",  x"79",  x"7a",  x"7b",  x"7c",  x"7d",
27
    x"7d",  x"7e",  x"7e",  x"7f",  x"7f",  x"7f",  x"7f",  x"7f",
28
    x"01",  x"02",  x"04",  x"08",  x"0e",  x"11",  x"14",  x"17",
29
    x"1a",  x"1d",  x"20",  x"23",  x"26",  x"29",  x"2c",  x"2f",
30
    x"32",  x"36",  x"39",  x"3c",  x"3e",  x"40",  x"43",  x"46",
31
    x"48",  x"4b",  x"4d",  x"50",  x"52",  x"54",  x"57",  x"59",
32
    x"5b",  x"5d",  x"5f",  x"62",  x"64",  x"65",  x"67",  x"69",
33
    x"6b",  x"6d",  x"6e",  x"70",  x"71",  x"73",  x"74",  x"75",
34
    x"76",  x"77",  x"79",  x"79",  x"7a",  x"7b",  x"7c",  x"7d",
35
    x"7d",  x"7e",  x"7e",  x"7f",  x"7f",  x"7f",  x"7f",  x"7f");
36
37
begin
38
39
process(clk)
40
begin
41
  if rising_edge(clk) then  
42
    if (c<9000000 ) then        
43
      c <= c+1; 
44
    else                         
45
      c <= 0; 
46
      
47
      RomAddr <= RomAddr +1;
48
      if (RomAddr < 128) then      
49
        Result <= signed(R_Rom(RomAddr));   
50
        led_g  <= std_logic_vector(Result);    
51
      else  
52
        RomAddr <= 0;
53
      end if;  
54
    end if; 
55
  end if;
56
end process;
57
58
end Behavioral;

von peter (Gast)


Lesenswert?

Hallo, wie kann man bitte so eine Constante mit 1024 Byte nachladen ohne
das dieses als lange Liste mit im Hauptprogramm steht?

Danke.
Gruss

----------------------------------------------------------------------
constant R_Rom : Rom64x8 := (
    x"ff",  x"ff",  x"81",  x"82",  x"83",  x"11",  x"14",  x"17",
    x"1a",  x"1d",  x"20",  x"23",  x"26",  x"29",  x"2c",  x"2f",
    x"32",  x"36",  x"39",  x"3c",  x"3e",  x"40",  x"43",  x"46",
    .................
    .....................
    ....................

von lulu (Gast)


Lesenswert?

Ach herrlich: Wie und wo nachladen? Vor der Synthese? Zur Laufzeit?

Hast du dich eigentlich schonmal gefragt, ob du bei deiner Entwicklung 
nicht schneller wärst, wenn du nicht ständig hier nachfragen müsstest 
und auf Antworten warten?

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


Lesenswert?

peter schrieb:
> Hallo, wie kann man bitte so eine Constante mit 1024 Byte nachladen
Wenn du eine Konstante änderst, ist es keine Konstante mehr. Du brauchst 
also eine Schnittstelle zum "Laden" und ein RAM, in das die Daten 
abgelegt werden...

> Hauptprogramm
Peter, ich weigere mich jetzt fürderhin zu antworten, solange du 
behauptest, du schriebest irgendwelche "Programme".

von peter (Gast)


Lesenswert?

Ich wollte den ganzen Text nicht im Hauptprogramm sehen von 4096 Daten 
im Textmodus , sondern irgendwie als "Include" welche dann beim 
compilieren eingebunden wird.

Gruss

von peter (Gast)


Lesenswert?

----------------------------------------------------
Wenn du eine Konstante änderst, ist es keine Konstante mehr.
----------------------------------------------------

Ich möchte diesen Programmteil auslagern und ein Platzhalter setzen wo 
dann beim compilieren dieser Platzhalter durch diesem entsprechenden 
Programmteil ersetzt wird.

Gruss

von Christian R. (supachris)


Lesenswert?

Och nee Peter, Programm, Compiler, Include....alles Sachen die nicht 
wirklich zum FPGA passen. Lagere das in ein Package aus und statt 
include nimmst du use. Ich hab alle eigenen Typen-Definitionen und 
Konstanten in Packages, das macht es übersichtlich.

von Strubi (Gast)


Lesenswert?

Moin,

eine Weile lang habe ich mal mit dem cpp (C Preprozessor) getrickst.
Beispiel:
1
package memory_initialization is
2
3
  constant BOOTROM_PROG_INIT: iram_bank_t := (
4
  (
5
#include "iram_init_h.tmp"
6
  ),
7
  (
8
#include "iram_init_l.tmp"
9
  )
10
  );
11
...
12
13
end package;

Sowas macht aber nur Sinn, wenn man Makefile-basiert arbeitet, ansonsten 
schiesst man sich schnell mal ins Knie.
Gerade wenn man aber aus genau einem Sourcefile diverse andere Files wie 
auch VHDL-Code generieren will, sind cpp/Make prima Tools.

Grüsse,

- Strubi

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.