mikrocontroller.net

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


Autor: Edgar C. (ec-develo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Top is
Port ( e_clk : in  STD_LOGIC;
       e_we : in  STD_LOGIC_VECTOR (0 downto 0);
       e_addr : in  STD_LOGIC_VECTOR (10 downto 0);
       e_din : in  STD_LOGIC_VECTOR (7 downto 0);
       e_dout : out  STD_LOGIC_VECTOR (7 downto 0));
end Top;

architecture Behavioral of Top is

component Ram
port (
  clka: IN std_logic;
  wea: IN std_logic_VECTOR(0 downto 0);
  addra: IN std_logic_VECTOR(10 downto 0);
  dina: IN std_logic_VECTOR(7 downto 0);
  douta: OUT std_logic_VECTOR(7 downto 0));
end component;

attribute box_type : string;
attribute box_type of Ram : component is "black_box";


begin

myram : Ram
  port map (clka => e_clk,
            wea => e_we,
            addra => e_addr,
            dina => e_din,
            douta => e_dout);

end Behavioral;

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Edgar C. (ec-develo)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Edgar C. (ec-develo)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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....  :-/

Autor: Edgar C. (ec-develo)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Edgar C. (ec-develo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Michael "N." (Firma: Gast) (foyet)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Michael "N." (Firma: Gast) (foyet)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, mein Fehler.

Das müsste aber funktionieren:
 bram0_instance : bram0
       PORT MAP (
         clka => e_clk,
         addra => e_addr,
         douta => e_dout
         );

Autor: Michael "N." (Firma: Gast) (foyet)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Adresse musst du entsprechend an addra anlegen dann kommt der Wert 
an douta raus.

Autor: Michael "N." (Firma: Gast) (foyet)
Datum:

Bewertung
0 lesenswert
nicht 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;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.