Forum: FPGA, VHDL & Co. Rom Baustein initialisieren


von Michael Sauron (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich will eine 2 kb grosse Tabelle in ein Rom packen. Dazu 
verwende ich den Coregen für einen Single Port Block Ram und lade dort 
ein coe File, die Konfiguration habe ich angehängt)

Jedoch bekomme ich beim lesen aus dem Rom (simulation) immer nur 
Undefiniert (X)

Selbst wenn ich das Rom nur mit nullen initialisieren lasse, bekomm ich 
nur X zurück.

Hier mal ein Testprogramm um das Problem zu verdeutlichen
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6
entity test is
7
    Port ( 
8
        clk        : in   STD_LOGIC;
9
        table_out    : out   STD_LOGIC_VECTOR (7 downto 0);
10
        count_out    : out   STD_LOGIC_VECTOR (10 downto 0)
11
              );
12
end test;
13
14
architecture Behavioral of test is
15
16
component gamma_table 
17
  port(
18
  dout: out std_logic_vector ( 7 downto 0);
19
  addr: in std_logic_vector (10 downto 0);
20
  clk : in  std_logic
21
    );
22
end component;
23
24
signal count : std_logic_vector (10 downto 0):=(others =>'0');
25
26
begin
27
28
process (clk) begin
29
if rising_edge (clk) then
30
  count <= count + 1;
31
end if;
32
end process;
33
34
count_out <= count;
35
36
u0 :gamma_table
37
port map(
38
  addr   =>  count,
39
  dout   => table_out,
40
  clk  =>  clk
41
      );
42
43
end;

Dieses eigentlich recht simple Rom treibt mich seit Tagen in die 
verzweifelung

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


Lesenswert?

Hier ein paar Stichworte, evtl. hilft das weiter:
1
entity ROM_512x32 is
2
  port (
3
    CLK  : in  std_logic;
4
    ADDR : in  std_logic_vector(8 downto 0);
5
    DATA : out std_logic_vector(31 downto 0)
6
  );
7
end ROM_512x32;
8
9
architecture wrapper of ROM_512x32 is
10
  component RAMB16_S36
11
    generic (
12
      INIT     : bit_vector := X"000000000";  --  Value of output RAM registers at startup
13
      SRVAL    : bit_vector := X"000000000";  --  Ouput value upon SSR assertion
14
      WRITE_MODE : string   := "WRITE_FIRST"; --  WRITE_FIRST, READ_FIRST or NO_CHANGE 
15
      INIT_00  : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000"; 
16
      INIT_01  : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000"; 
17
      INIT_02  : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000"; 
18
      INIT_03  : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000"; 
19
      INIT_04  : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000"; 
20
      INIT_05  : bit_vector := X"0000000000000000000000000000000000000000000000000000000000000000"; 
21
:
22
:

von bko (Gast)


Lesenswert?

eventuell eine Alternative zum Coregen:
im XST-User Guide unter "RAMs and ROMs HDL Coding Techniques"
wird im Kapitel "Initializing RAM Coding Examples"
beschrieben wie man die Xilinx-RAM-Resourcen vorbelegt.

Den Coregen benutze ich nicht mehr für ROMs, ich hab mir einfach das 
VHDL/Verilog-Beispiel  "Initializing Block RAM (External Data File)"
aus dem Manual kopiert. Da wird der ROM-Inhalt (genauer die RAM
initialisierung) aus einem externen File gelesen (geht ab ISE 9.2
auch bei der XST-Synthese).

von Michael Sauron (Gast)


Lesenswert?

Ich habe das auch mal versucht, allerdings müssen dann die werte als hex 
oder bin zahlen vorliegen.
in coe dateien gehen auch dezimalzahlen, aus dem grund verwende ich das.

Ich habe die Tabelle mit Excel erstellt, und excel kann kein hex

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


Lesenswert?

> und excel kann kein hex
Schreib dir ein kleines Makro, dann geht das... ;-)

von Gast (Gast)


Lesenswert?

bezüglich excel: DEZINHEX() ??

von Michael Sauron (Gast)


Lesenswert?

> bezüglich excel: DEZINHEX() ??
Hab leider nur open office , da geht das nicht

Das geht doch alles (leider) an der Ursprünglichen Fragestellung vorbei. 
So langsam glaube ich, das der Coregen in der Initialisierungsfunktion 
fehlerhaft ist.

von Christian R. (supachris)


Lesenswert?

Michael Sauron schrieb:
>> bezüglich excel: DEZINHEX() ??
> Hab leider nur open office , da geht das nicht
>
> Das geht doch alles (leider) an der Ursprünglichen Fragestellung vorbei.
> So langsam glaube ich, das der Coregen in der Initialisierungsfunktion
> fehlerhaft ist.

Hast du denn die aktuelle Version mit allen Service Packs?

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


Lesenswert?

Wie war das nochmal mit den unisim-libs zur Simulation von 
Xilinx-Komponenten? Im Wrapper der Komponente gamma_table sollte 
irgendwo sowas stehen:
1
library UNISIM; 
2
use UNISIM.all;
http://www.xilinx.com/itp/xilinx5/data/docs/sim/sim0054_10.html

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.