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
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.
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?
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
> 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.... :-/
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.
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
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...
>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 ?
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;
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;
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
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
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;