Suche ein brauchbaren ROM/RAM-Bereich

Gast #3658924
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;
Angehängte Dateien:
Gast #3658940
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",
    .................
    .....................
    ....................
Moderator (Firma: Titel) Persönliche Seite #3659085
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".
Gast #3659093
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
Gast #3659328
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

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