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",
    .................
    .....................
    ....................
Gast #3659079
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?
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

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.