Forum: FPGA, VHDL & Co. Ram - Core Generator - k(aum)eine Verbindung


von Edgar C. (ec-develo)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin blutiger Anfänger, daher bitte Gnade, falls ich auf
eine der üblichen Tretminen gelaufen bin ;-)

Ich habe nach bestem Wissen und Gewissen gesucht, gegoogelt und
gelesen, aber ich weiß nicht mehr weiter.

Ich habe eine Top-Entity angelegt, mit dem Core Generator ein
Ram angelegt, die Anweisungen des entsprechenden Tutorials befolgt
(ug695), aber nach dem fehlerfreien Synthetisieren bekomme ich mit dem
RTL-Viewer das angehängte Bild zu sehen. Danach wird nur die
Clock "nach oben" durchverbunden?

Interpretiere ich das Bild falsch oder warum wird nur e_clk
durchverbunden?

Vielen Dank schon mal.

UUUps vergessen: ISE 12.1 Web Edition
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity Top is
5
Port ( e_clk : in  STD_LOGIC;
6
       e_we : in  STD_LOGIC_VECTOR (0 downto 0);
7
       e_addr : in  STD_LOGIC_VECTOR (10 downto 0);
8
       e_din : in  STD_LOGIC_VECTOR (7 downto 0);
9
       e_dout : out  STD_LOGIC_VECTOR (7 downto 0));
10
end Top;
11
12
architecture Behavioral of Top is
13
14
component Ram
15
port (
16
  clka: IN std_logic;
17
  wea: IN std_logic_VECTOR(0 downto 0);
18
  addra: IN std_logic_VECTOR(10 downto 0);
19
  dina: IN std_logic_VECTOR(7 downto 0);
20
  douta: OUT std_logic_VECTOR(7 downto 0));
21
end component;
22
23
attribute box_type : string;
24
attribute box_type of Ram : component is "black_box";
25
26
27
begin
28
29
myram : Ram
30
  port map (clka => e_clk,
31
            wea => e_we,
32
            addra => e_addr,
33
            dina => e_din,
34
            douta => e_dout);
35
36
end Behavioral;

von Duke Scarring (Gast)


Lesenswert?

Welche ISE-Version? Ich würde auf (den bekannten) Fehler im RTL-Viewer 
tippen. Der Code sieht gut aus. Gibt es Warnungen beim Synthetisieren?

Duke

von Edgar C. (ec-develo)


Lesenswert?

Also wie gerade nachgetragen: ISE Webpack 12.1.

Ich habe jetzt bis zu "Generate Programming File"
alles laufen lassen und es gibt keinen Fehler und keine Warnung.

Ich werde dann mal eine Testbench drumherum bauen und ein paar Daten
schreiben und lesen. Bis jetzt bin ich nicht auf diese Idee gekommen,
weil ich von einem Fehler im RTL-Vier nix wusste.

Allerdings sieht es im Technology Schematic genauso aus.
Also am RAM nur die Clock angeschlossen.

von Edgar C. (ec-develo)


Lesenswert?

Tja, zum Glück ist am Abend der Bart nachgewachsen,
sodass ich nachdenklich an ihm kratzen kann...

Denn sowohl eine Simulation als auch das Anschauen des FPGA
mit Implement Design, Place&Route, View/Edit Routed Design
zeigt, dass das Ram sehr wohl mit allen Anschlüssen angeschlossen
ist und (zumindestens in der Simulation) auch funktioniert.

Bleibt immer noch die Frage, warum in den Schematics nur ein
einziges Signal verbunden erscheint.

Außerdem ist dieser Anblick sehr verwirrend, denn schließlich
kann man mit dem Schaltplan mal nachschauen, was der Synthesizer
aus dem Quellcode übersetzt hat. Und wenn man sich dabei die Leitungen
denken muss????

Hat niemand einen Tipp?

von Stefan (Gast)


Lesenswert?

Vergiss einfach den RTL Viewer - bei etwas grösseren sachen wird das eh 
nur unübersichtlich. Und Xilinx ist schon seit X Versionen nicht in der 
Lage das Teil zu fixen. Manchmal hilft das Rein/rauszoomen oder 
Verschieben, fehlende Leitungen doch noch anzuzeigen.

Ich für meinen Teil hab das Teil abgeschrieben, und schmeiss alles in 
den Simulator.

Für so einfache sachen brauchst übrigens keine VHDL Testbench erstellen.
Versuch mal Create Schematic Testbench

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


Lesenswert?

> Hat niemand einen Tipp?
Ich habe mit dem neuen RTL-Schematics von ISE12 auch meine liebe Not. 
Warum soll ich am Anfang auswählen, welche Signale ich sehen will?
Es dürfte doch klar sein, das hier die Defaulteinstellung "Alle" sein 
muß. Und wenn es dann unübersichtlich wird, kann ich ja das eine oder 
andere weglassen....  :-/

von Edgar C. (ec-develo)


Lesenswert?

Stefan schrieb:
> Vergiss einfach den RTL Viewer - bei etwas grösseren sachen wird das eh
> nur unübersichtlich.

Naja, bei den größeren Sachen bin ich noch nicht ;-)
Ich erhoffte mir gerade bei den ersten Versuchen
eine Unterstützung, indem ich per Schaltplan sehen
kann, was aus meinem VHDL synthetisiert wird.

> Und Xilinx ist schon seit X Versionen nicht in der
> Lage das Teil zu fixen. Manchmal hilft das Rein/rauszoomen oder
> Verschieben, fehlende Leitungen doch noch anzuzeigen.

Ist schon peinlich für so ein großes Unternehmen, so etwas nicht
in den Griff zu bekommen. Aber man kennt das ja leider von vielen
Programmen.

Mit Zoomen tut sich aber auch nichts. Da ist einfach nur die
Clock angeklemmt. Und die ist immer gut sichtbar.

> Ich für meinen Teil hab das Teil abgeschrieben, und schmeiss alles in
> den Simulator.
>
> Für so einfache sachen brauchst übrigens keine VHDL Testbench erstellen.
> Versuch mal Create Schematic Testbench

Hmmmm... So einen Befehl finde ich nicht.
Klicke ich rechts auf meine Top-Entity, danach New Source,
dann habe ich (neben anderen Punkten ) entweder "Schematic"
oder "VHDL Test Bench" zur Auswahl.
Aber ein "Schematic als Testbench" o.ä. wird mir nicht angeboten.

von Edgar C. (ec-develo)


Angehängte Dateien:

Lesenswert?

Isch habbet!

http://www.xilinx.com/support/answers/35615.htm

Mein Ram hieß "Ram". Das ist für den RTL-Viewer
ein reservierter Name. Ich habe das Ram jetzt mit dem
Core Generator unter dem Namen "Neuesram" angelegt
und eingebunden.... und jetzt ist alles wie erwartet.

Auch das Technology Schematic sieht aus wie zu erwarten.

Sarkasmus an:
Vielleicht hätte der Code für eine Warnung des RTL-Viewers
oder des Core Generators noch Platz in dem 2,6 Gigabyte
großen Installationspaket des ISE Webpacks gehabt. ;-)
Sarkasmus aus.

Naja, einem geschenkten Gaul...

Euch nochmal Danke für eure Antworten

Gruß Edgar

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


Lesenswert?

Edgar C. schrieb:
> Mein Ram hieß "Ram". Das ist für den RTL-Viewer ein reservierter Name.
Das ist ja eine ellenlange Liste, und darin ein paar recht naheliegende 
Namen: adder,... counter, decoder...
DAS ist böse. Da kann man schon mal drüber stolpern  :-(
Hoffentlich weiß ich das noch, wenns mir auch mal passiert...

von Stefan (Gast)


Lesenswert?

>Hmmmm... So einen Befehl finde ich nicht.
Stimmt, in der Aktuellen ISE ist er nicht mehr drin. In meiner alten 8.2 
war er noch da. Schematic Testbench war echt schön einfach um mal 
schnell was zu testen ohne einen VHDL Testbench schreiben zu müssen.
Gibt es dieses Feature echt nicht mehr ?

von Michael ". (Firma: Gast) (foyet)


Lesenswert?

Hallo Zusamen,

ich beschäfte mich gerade mit Core Generator von Xilinx version 10.1.

Also ich habe diese unterstehende Code geschrieben, alle läuft gut aber 
ich weiß genauer nicht was ich unter process (e_clk) eingeben soll um 
den Rom Speicher Inhalt zu lesen.

Ich freue mich auf eure Antwort

Gruß Micha



------------------------------------------------------------------------ 
----------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
--use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity top is
    Port ( e_clk  : in  STD_LOGIC;
           e_dout : out  STD_LOGIC_VECTOR (15 downto 0);
           e_addr : in  STD_LOGIC_VECTOR (11 downto 0));
end top;

architecture Behavioral of top is
  COMPONENT bram0
  PORT (
      clka : IN STD_LOGIC;
      addra : IN STD_LOGIC_VECTOR(11 DOWNTO 0);
      douta : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
      );
END COMPONENT;

  attribute box_type : string;
  attribute box_type of bram0 : component is "bytecode";
begin
    bram0_instance : bram0
      PORT MAP (
        clka => e_clk,
        addra => e_addr,
        douta => e_dout
        );
    process (e_clk)
    begin

--???      if (e_clka = '1' and e_clk'event) then
--???    e_dout <= ??? (to_integer(unsigned(e_addr(4 downto 0))));
--       end if;
             end process;
end Behavioral;

von dito (Gast)


Lesenswert?

Michael "N." schrieb:
> Also ich habe diese unterstehende Code geschrieben, alle läuft gut aber
> ich weiß genauer nicht was ich unter process (e_clk) eingeben soll um
> den Rom Speicher Inhalt zu lesen.

Den Process lässt du weg und schreibst stattdessen:
e_dout <= douta;

von Michael ". (Firma: Gast) (foyet)


Lesenswert?

Hallo Dito,

Danke schon mal für deine schnelle Antwort.

Also die Anweisung bringt gar nicht. ich bekomme diese Fehlermeldung:
- Undefined symbol 'douta'.

ich warte immer noch auf euere Antwort, da ich bis jetzt keine Lösung 
gefunden habe.

Gruß Micha

von dito (Gast)


Lesenswert?

Ups, mein Fehler.

Das müsste aber funktionieren:
1
 bram0_instance : bram0
2
       PORT MAP (
3
         clka => e_clk,
4
         addra => e_addr,
5
         douta => e_dout
6
         );

von Michael ". (Firma: Gast) (foyet)


Lesenswert?

Hallo Dito,

der Speicher habe ich mit Werte Initialisiert(sieh programm Code oben 
"bytecode"), und möchte jetzt auf diese Werte zugreigen.
wie kann ich diese Werte am e_dout rausbekommen?

wenn ich so einfach(e_dout <= douta;), was ist dann mit der Adresse?

Gruß Micha

von Christian R. (supachris)


Lesenswert?

Die Adresse musst du entsprechend an addra anlegen dann kommt der Wert 
an douta raus.

von Michael ". (Firma: Gast) (foyet)


Lesenswert?

hier ist mein Testbench mit entsprechende Adresse

und diese Fehler habe ich immer noch(douta is not declared)


LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;

ENTITY tb IS
END tb;

ARCHITECTURE behavior OF tb IS

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT top
    PORT(
         e_clk : IN  std_logic;
         e_dout : OUT  std_logic_vector(15 downto 0);
         e_addr : IN  std_logic_vector(11 downto 0)
        );
    END COMPONENT;


   --Inputs
   signal e_clk : std_logic := '0';
   signal e_addr : std_logic_vector(11 downto 0) := (others => '0');

   --Outputs
   signal e_dout : std_logic_vector(15 downto 0);

  --signal rom : rom_type;

   -- Clock period definitions
   constant clka_period : time := 5 ns;

BEGIN

  -- Instantiate the Unit Under Test (UUT)
   uut: top PORT MAP (
          e_clk   => e_clk,
          e_dout   => e_dout,
          e_addr   => e_addr
        );

   -- Clock process definitions
   clka_process :process
   begin
    e_clk <= '0';
    wait for clka_period;
    e_clk <= '1';
    wait for clka_period;
   end process;


   -- Stimulus process
   stim_proc: process
   begin
    e_addr <= "000000000000" after 5 ns,
              "000000000001" after 30 ns,
              "000000000010" after 60 ns,
              "000000000011" after 80 ns,
              "000000000100" after 110 ns;

      wait;
   end process;

END;

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.