Forum: FPGA, VHDL & Co. Tips für Einstieg CPLD


von Wolfgang S. (bluenature)


Lesenswert?

Vorweg: ich bin der absolute CPLD-DAU
Habe mir von Pollin das CPLD-Board gekauft und zusammengelötet um einen 
Einstieg in die CLD-Programmierung zu schaffen. Das löten war ja gar 
kein Problem. Die Probleme kamen erst mit dem Download der (kostenlosen 
anscheinend 30-day-trial) Software. Nach ewigem rumgetrickse hab ich 
endlich das ZIP-File gehabt und installiert. Dann kam die Lizenzierung 
mit seltsamen Angaben wie MAC-Adresse etc... gibt es irgendwo brauchbare 
(für Anfänger) praktikable Infos oder Ideen wie man den Einstieg packt?

http://wiesolator.gotdns.org/mcnet/installprob.png

Das Pollin-Board ist jetzt irreperabel defekt, müßte wenn neues kaufen.

http://www.pollin.de/shop/detail.php?pg=OA==&a=MTM5OTgxOTk=&w=OTk4OTU4&ts=0

Habe aber alternativ noch einen anderen Chip mit Trägerplatine, einen 
ISPLSI2032E110LJ44. Aber weder einen Adapterstecker, noch Ahnung was für 
eine Softwre man für diesen Derivaten braucht.

http://wiesolator.gotdns.org/mcnet/Lattice2032.jpg

Bin über jede Info dankbar

Grüße Wolfgang

von Gast (Gast)


Lesenswert?

Versuch mal Version 10.1
Die kommt ohne die Lizensierung aus.

von Stephan H. (stephan-)


Lesenswert?

die 10.x ist absolut übertrieben. Mehrere GB ....nutzlos für Dich.
Bei Xilinx gibt es auch die alten Versionen bei Classics. Nimm die.
Der Falk meinte die 6.x reicht aus. Kann ich nur bestätigen.
200 MB gegen 4 GB !!!
Ist DEUTLICH kleiner und tut es auch.
Schau in die Artikelsammlung, da sind Links für den Einstieg.

von aha (Gast)


Lesenswert?

Ja, die Software ist gratis, dafuer wollen die Hersteller wissen, wer 
die Software braucht. Daher ist die Software auf die MAC Nodengelockt. 
Ist doch kein Problem.
Alternativ kann man natuerlich die Profiversion kaufen, ein paar k$ 
abdruecken und hat diese Schnueffelei nicht.

von Wolfgang S. (bluenature)


Lesenswert?

aha schrieb:
> Ja, die Software ist gratis, dafuer wollen die Hersteller wissen, wer
> die Software braucht. Daher ist die Software auf die MAC Nodengelockt.
> Ist doch kein Problem.
> Alternativ kann man natuerlich die Profiversion kaufen, ein paar k$
> abdruecken und hat diese Schnueffelei nicht.

Die Schnüffelei war nicht das Problem, eher das ich nicht wußte was ich 
dort überall eintragen soll, weils ohne diese eben einfach nicht geht.

@Gast (Gast),
habe die Version 10.1 schon gleich nach der Info gesucht und gefunden... 
installiert noch immer... scheinen wirklich ordentlich Bytes zu sein

@Stephan Henning,
habe die 10.1er leider schon voll am install... leider ist wie immer das 
Problem das man vorher nie weiß was man nacher braucht. Und die ganze 
sucherei im Web hat nur noch viele ??? ausgelöst und bin schon wirklich 
fürs erste happy wenn ich einen simplen Inverter zum laufen bekomme :)

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


Lesenswert?

> Die Probleme kamen erst mit dem Download der (kostenlosen
> anscheinend 30-day-trial) Software.
Das ist dann (zumindest bei Xilinx) die falsche Version :-/
Die richtige heißt WebPack und ist dauerhaft komplett frei.
Erst ab Version 11 wird eine Lizenz auch für das WebPack benötigt.
Nur der Simulator Modelsim XE (Xilinx Edition) will lizensiert werden.


Bei Lattice heißt die freie Version ispLEVER Starter.
Der ispLSI ist ein alter Baustein, damit würde ich nicht anfangen. Der 
ist bei Lattice als Mature gelistet, das ist kurz vor Obsolete.
Wenn dann nimm die ispMach Bausteine oder besser gleich deren Nachfolger 
MachXO. Das sind FPGAs, die Lattice in den CPLD-Markt platzieren will, 
und offenbar ganz gut damit fährt.
http://www.latticesemi.com/products/developmenthardware/developmentkits/machxominidevelopmentkit.cfm
http://www.hardware-design.de/products.html

von Wolfgang S. (bluenature)


Lesenswert?

Das WebPack 10.1 habe ich mittlerweile endlich installiert bekommen (2x 
vollabsturz). Der allgemeine Key war auf der Seite angegeben. Muß mich 
damit erst einmal einlesen was die ganzen Hyroglyphen da überhaupt sein 
sollen, versteh da mal garnichts. Sieht nur mal gut aus :o)
Die anderen Bausteine von Lattice schaue ich mir wohl danach auch einmal 
an, aber erst mal muß ich mal Grundlagen kapiern, sonst ist das alles 
nichts. Bisher habe ich leider nur "sehr genaue" Infos gefunden, nichts 
was wirklich für einen Einstieg taugt.

Grüße Wolfgang

von Wolfgang S. (bluenature)


Lesenswert?

Noch ein kleiner Nachtrag, da ich es dem vorherigen Artikel leider nicht 
mehr anfügen kann.
Hier habe ich ein Turtorial gefunden das gerade für den XILINX passt: 
http://www.unmuth.de/technik/projekte.htm
Denke ist auch für andere mit dem Board ganz interessant.
Werde mal das alles probieren und Fragen kommen sicher noch dazu.

Grüße Wolfgang

von Thomas R. (tinman) Benutzerseite


Lesenswert?

Wolfgang Schmid schrieb:
> Noch ein kleiner Nachtrag, da ich es dem vorherigen Artikel leider nicht
> mehr anfügen kann.
> Hier habe ich ein Turtorial gefunden das gerade für den XILINX passt:
> http://www.unmuth.de/technik/projekte.htm
> Denke ist auch für andere mit dem Board ganz interessant.
> Werde mal das alles probieren und Fragen kommen sicher noch dazu.
>
> Grüße Wolfgang

ich finde du solltest lieber ein buch wie "Experimente mit 
Programmierbarer Logik/Franzis Verlag/ISBN-9783772340260" holen.
Ich persönlich fand den gut und einfach.

Es ist auch heute noch einigermassen aktuell, VHDL ist VHDL, du solltest 
vielleich aber keine 5V CPLD mehr benutzen ( ok, wenn du schon welche 
hast ist was anderes ) - da die mehr strom verbrauchen und kosten mehr 
als die 3.3V versionen ( deren i/o ist auch 5V kompatible )

von Wolfgang S. (bluenature)


Lesenswert?

Danke für den Tip mit dem Buch, werde das wohl einmal genauer anschauen 
gehen.

Der CPLD funktioniert jetzt, habe bei Pollin das defekte File vom 
Download nun öffnen können. Dort war eine Anleitung zum Xilinx ISE 10.1 
mit dem (3,3V/5V-toleranten) XC95144XL. Konnte damit jetzt einen 
Binär-Counter mit acht Stages basteln und blinkt auch korrekt.

Zu den CPLD's die ich favorisiere: Sollten eben auch einfach zu bekommen 
sein (z.B. Reichelt), sonst bringt mir der schönste CPLD nicht viel.
http://wiesolator.gotdns.org/mcnet/cpld_reichelt.png
Solche Teile sind mir eben am Herzen gelegen für weitere Aktivitäten.

Nochmal danke für die vielen Infos. Werde jetzt bissen sehen was man mit 
dem 100-Füssler so anstellen kann und auch unters Oszi nehmen.

Grüße Wolfgang

von Thomas R. (tinman) Benutzerseite


Lesenswert?

Wolfgang Schmid schrieb:

>
> Zu den CPLD's die ich favorisiere: Sollten eben auch einfach zu bekommen
> sein (z.B. Reichelt), sonst bringt mir der schönste CPLD nicht viel.
> http://wiesolator.gotdns.org/mcnet/cpld_reichelt.png
> Solche Teile sind mir eben am Herzen gelegen für weitere Aktivitäten.

so ganz am rande,

http://darisusgmbh.de/shop/index.php?cat=c891_CPLDs.html

hier gibt Altera, Xilinx und Lattice CPLD's ( und mehr) - die liefern 
auch an private personen.

Ich finde die argumentation das Xilinx 'besser' ist weil verfügbarkeit 
in deutschland besser als unsinn. Alles ist - falls wirklich irgendwo 
auf der Welt vorhanden - auch in deutschland lieferbar.

von Wolfgang S. (bluenature)


Lesenswert?

Wenn man es so sieht bekommt man wirklich "alles", nur eine Frage des 
nötigen Kleingelds ;)

Aber zum programmieren: Habe da ein gutes Lernmaterial zu VHDL gefunden, 
das arbeite ich jetzt mal durch. Dort steht soweit wirklich alles 
wissenswerte für mich bereit für einen guten Start.

http://www.vhdl-online.de/tutorial/deutsch/inhalt.htm

Grüße Wolfgang

von Wolfgang S. (bluenature)


Lesenswert?

Jetzt habe ich wohl wieder eine Frage :)

Ich habe hier seit gestern ein seltsames Phänomen in der XILINX-ISE 
10.1.
Ich hatte nebenbei auch einmal neben der VHDL mit der Schematic 
laboriert. Danach verschwanden im Source-Fenster meine Sources und meine 
Processes. Habe dann wirklich überall herumprobiert und die Soft 
wirklich komplett deinstalliert und neu aufgesetzt.
Das seltsame ist, wenn ich einen neuen Source hinzufüge, das dieser 
nicht in der Liste der Sources erscheint (kann daher das VHDL-Script 
nicht generieren). Öffnen geht, aber erscheint auch nicht in die 
Source-List. Wenn ich existierenden Source hinzufügen will (das zwar neu 
erstelllte, aber nicht angezeigte Script) dann meckert die ISE herum das 
dieses File schon im Projekt existiert.
Ich steh jetzt ziemlich auf dem Schlauch weil eine gesamte 
Neuinstallation und Neuanlegen des gesamten Projekts in neuen Ordnern 
alles nichts bringt.
Vieleicht kennt jemand dieses Phämnomen und eine Lösung, ich finde 
nirgends etwas brauchbares darüber. Die Version kann es weniger sein, es 
hat ja tadellos fast 2 Tage funktioniert.

Grüße Wolfgang

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


Lesenswert?

Hast du links über dem Project-Tree zufällig auf
"Sources for: Behavioral Simulation"
umgestellt?

von Wolfgang S. (bluenature)


Lesenswert?

Das hatte ich schon gemerkt mit der Implementation (bevor ich alles 
runtergehauen hatte). Ich habe eigentlich im normalen Fall an dieser 
Stelle nur mit Implementation zu arbeiten wenn ich code (Simulation ist 
mal vorerst nicht wichtig für mich) hab ja ein Ziel-Device auf einem 
Eval-Board.
Aber wenn ich alles wieder 'remove' und danach wieder 'add source', dann 
gehts manchmal wieder. Kann auch sein das nur ein so ein Top-Modul 
(grünes Icon im Source-Tree) funktioniert.
Bin gerade an den Demo-Beispielen zugange, diese anzuschauen wie die 
reagieren in ihrer Struktur. Dort habe ich gesehen das 'sch' eigentlich 
immer nur einmal existiert, 'vhd' aber mehrfach darunter. Muß das wohl 
irgendwie so hinbekommen. Was mich wundert ist, das ein anderer Source 
den ich auch angesehen hatte, viele vfd-files besitzt. Leider war der 
Source nicht als Projekt startfähig und damit auch keien richtige Basis 
zum Aufbau studieren. Davon eben nur das oberste als 'top modul'. Andere 
wiederum nur ein Modul. Ich glaube wenn man da einfach etwas versucht 
neu anzulegen, das man sich da irgendwie die Struktur zerstört und da 
seltsame Probleme herrühren.

Grüße Wolfgang

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


Lesenswert?

> Dort habe ich gesehen das 'sch' eigentlich
> immer nur einmal existiert, 'vhd' aber mehrfach darunter.
Manche (einige, viele) machen den Top-Level mit Schaltplänen und alles 
darunter mit VHD-Modulen.

Ich persönlich bin da eher Purist und verdrahte auch den Top-Level in 
VHDL ;-)

von Wolfgang S. (bluenature)


Lesenswert?

Das nenn ich mal ne Aussage :)
Mir liegt auch eher das coden in VHDL, weils mir eben nicht so die Hände 
bindet. Ich suche immernoch wirr mit F1 irgendwelche Infos im Handbuch. 
Nur je mehr ich herumstöbere, desto weniger kapier ich überhaupt noch 
wie ein gescheites VHDL-Projekt aufgebaut sein soll. Prinzipiell bauche 
ich doch nur eine simple Hauptmodul, die alle IO-Schnittstellen am CPLD 
irgendwie intus hat. Dann einige kleine Bausteine die ich irgendwie code 
und dann zu einem Gebilde irgendwie zusammensetze mit den 
IO-Deklarationen. Alles was ich bisher gefunden hab an Informationen ist 
eine einzige entry mit einer architecture und einem simplen process, wie 
das aussehen muß in mehreren Funktionen zusammen ist mir so ziemlich 
schleierhaft.
Apropos Buch, das genannte Buch habe ich mittlerweie Info auf meine 
Anfrage bekommen, es wird garnicht mehr aufgelegt.

Grüße Wolfgang

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


Lesenswert?

> entry mit einer architecture und einem simplen process
Eine Entity (kein Tippfehler, Entitity=Einheit) hat eine aktive 
Architecture, die kann dann aber einige Prozesse und 
Concurrent-Zuweisungen haben.
Andere Einheiten (=entities) werden als Komponente (=component) ind eine 
andere (höhere) Entity angebunden. Nur die oberste Entity (= Top Level) 
kann Verbindungen nach aussen haben.


Kauf dir Reichardt/Schwarz: VHDL-Synthese
Das ist meiner Meinung nach immer noch eines der besten 
(deuschsprachigen) Bücher zum Thema. Allein der Punkt Simulation kommt 
ein wenig kurz.

von Wolfgang S. (bluenature)


Lesenswert?

Das Buch sieht doch gar nicht so schlecht aus, wenn es ab den Grundlagen 
eingeht, ist es sicher genau das richtige. Jedenfalls sind auch 
FIR-Filter enthalten, was mich persönlich auch sehr interessiert. Habe 
es auch schon gefunden incl. ISBN:
http://users.etech.fh-hamburg.de/users/reichardt/buch.html
vieleicht kann ich morgen noch anfragen, ansonsten ist erst noch ein 
Wochenende dazwischen.
Wegen Entry, ist mir wohl ein Tipfehler unterlaufen, meinte wirklich 
entity, mit dem Frust tritt wohl langsam auch schon die Demenz ein :)

Werde jetzt erst noch versuchen den Prescaler mit Counter und Comperator 
irgendwie zu coden. Vieleicht klappt ja mal etwas.

Grüße Wolfgang

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


Lesenswert?

>> Entitity
Au weia...   :-/

von Stefan Salewski (Gast)


Lesenswert?

>Kauf dir Reichardt/Schwarz: VHDL-Synthese
>Das ist meiner Meinung nach immer noch eines der besten
>(deuschsprachigen) Bücher zum Thema. Allein der Punkt Simulation kommt
>ein wenig kurz.

Sollen sie etwa mit Simulations-Bildchen Seiten schinden? Und dann noch 
für Xilinx, Altera, Lattice...Dazu gibt es genug im Internet, ich glaube 
auch auf der Homepage der Autoren.

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


Lesenswert?

> Sollen sie etwa mit Simulations-Bildchen Seiten schinden?
Eine Waveform ist keine Simulation. Das sollte der Welt in kurzen 
Worten anhand eines einfachen Beispiels klargemacht werden. Wie gesagt: 
das Thema kommt ein wenig zu kurz...   ;-)

von Stefan Salewski (Gast)


Lesenswert?

@Lothar Miller
>Eine Waveform ist keine Simulation.

Ja.

In der Ausgabe von 2007 haben sie ganz vorne zweieinhalb Seiten zum 
Thema Simulation -- das war mir schon zu viel, dafür mag ich nicht gerne 
Geld ausgeben.

Gruß

Stefan

von Wolfgang S. (bluenature)


Lesenswert?

Zum Buch: Es wird gerade neu überarbeitet zu einer Neuauflage im August. 
Ich denke da lohnt es sich abzuwarten bis diese Auflage auf dem Markt 
erscheint. Simulationen sind so oder so nicht mein derzeitiges Problem, 
von daher würde ich es eh nur grob überlesen. Ansonsten sieht die 
Leseprobe doch ganz gut aus (28 Seiten davon die Hälfte Vorwort).

Grüße Wolfgang

von ohne ahnung (Gast)


Lesenswert?

ich stehe noch heute vor der selben problematik, auch wenn ich nicht der 
xilinx-fraktion angehöre.

was echt mal schön wäre wenn jmd mal kurz verbildlicht wie man ein 
vhdl-projekt aufbaut.

sprachlich und zur syntax wird das überall erklärt. im grunde auch der 
aufbau. doch die materie ist etwas komplexer als mal eben schnell ein 
kleines c-programm zusammen zu tackern.

von Wolfgang S. (bluenature)


Lesenswert?

Das ist genau das Problem an dem ich eben herum doktere. Alles was ich 
bisher gefunden habe basiert auf einem Beispiel-Modul, egal ob Buch oder 
Tutorial. Die relativ (für einen Anfänger) komplexen Sources beim 
Hersteller des CPLD's sind leider wieder so verwirrend, das man das 
nicht eindeutig erkennen kann wie es genau funktionieren soll.
Bisher weiß ich im Grunde nur, das es hirarchisch und in einer 
Baumstruktur organisiert wird. Aber die Deklaration und der 
Signalaustausch zwischen den Ebenen ist mir wirklich nicht klargeworden.

Grüße Wolfgang

von Christian R. (supachris)


Lesenswert?

Bei Xilinx geht das doch doch recht einfach über die Wizzards. Über "New 
Source..." ein VHDL Modul erzeugen, dann kann man gleich die Eingänge 
und Ausgänge in einer Tabelle generieren. ISE baut dann das Grundgerüst 
zusammen. Da schriebst du dann deine Prozesse und Anweisungen usw. rein. 
Für das Top-Level VHDL genauso, die IN, OUT und INOUT sind dort dann die 
physikalischen Pins des Chips. Willst du ein VHDL Modul in das Top-Level 
einbinden, kannst du es markieren und unten im Prozess-Explorer "Design 
Utilities" -> "View HDL Instantiation Template" doppelklicken. Dann 
erzeugt der eine Datei in der die Component Definition drin steht, und 
die Instanziierung als Template. Das kopierst du in dein Top Level 
(COMPONENT in die Architecture und die Instanziierung nach dem Begin) 
und verdrahtest die Ports des Moduls an die IN, OUT, INOUT oder interne 
Signale im Top-Level.

von Wolfgang S. (bluenature)


Lesenswert?

So, habe das was du eben hier sehr schön erklärt hast einmal probiert. 
Jetzt weiß ich auch was diese seltsame File soll, hatte ja überall 
herumprobiert als nichts mehr gieng (eben auch dort mal geklickt). Bei 
mir kommt nun diese File mit einer Art Port-Map, denke das sieht schon 
ganz nett aus, ist ein einfacher Clock-Teiler damit ich eben etwas 
humanere Taktungen hab für meine Programmierung.
1
  COMPONENT TimeBase
2
  PORT(
3
    ExtOSC : IN std_logic;          
4
    DivOut : OUT std_logic
5
    );
6
  END COMPONENT;
7
8
  Inst_TimeBase: TimeBase PORT MAP(
9
    ExtOSC => ,
10
    DivOut => 
11
  );

Denke damit kann man weitertüfteln, das mit den entstandenen Components 
dürfte irgendwie mit dem Top-Module zu patchen sein :)

Grüße Wolfgang

von Wolfgang S. (bluenature)


Lesenswert?

Jetzt habe ich es am Laufen, weiß nun wie man Module wieder zurückholen 
kann, die verschwinden einfach, aber das Problem ist das die Properties 
sich ab und zu ändern. Wenn man dies wieder manuell über den 2. Reiter 
korregiert kommen diese auch wieder. Nach Instantiierung passt nun auch 
die Hirarchie (Topmodule hat nun Untermodule).

Hier weil "ohne ahnung" fragte, habe ein lauffähiges Hauptmodul mit zwei 
Untermodulen hinbekommen in Instanzen:
1
-- CPLD_IO (Top-Module)
2
library IEEE;
3
use IEEE.STD_LOGIC_1164.ALL;
4
use IEEE.STD_LOGIC_ARITH.ALL;
5
use IEEE.STD_LOGIC_UNSIGNED.ALL;
6
7
--------------------------------------------------------------------------------
8
-- Main-Module
9
--------------------------------------------------------------------------------
10
11
entity CPLD_IO is
12
  port(
13
    LED    : out  std_logic_vector(7 downto 0);   -- Test-LED's  (auf dem Board)
14
   TAST   : in   std_logic_vector(4 downto 1);   -- Test-Taster (auf dem Board)
15
    RAMA   : out  std_logic_vector(16 downto 0);  -- RAM-Adressbus
16
   OSC    : in   std_logic);                     -- externer Oszilator (16MHz)
17
end CPLD_IO;
18
19
architecture Behavioral of CPLD_IO is
20
  -- Deklaration für TimeBase
21
  component TimeBase
22
    port(
23
     ExtOSC : in  std_logic;
24
      DivOut : out std_logic);
25
  end component;
26
  -- Deklaration für AdressCounter
27
  component AdressCounter
28
    port(
29
     ClkAdr : in  std_logic;
30
    AdrCnt : out std_logic_vector(16 downto 0));
31
  end component;
32
  -- interne Signale (zum patchen)
33
  signal Sig1 : std_logic;
34
  signal Val1 : std_logic_vector(16 downto 0);
35
begin
36
37
  -- Instanzierung der TimeBase
38
  Inst_TimeBase: TimeBase
39
    port map(ExtOSC => OSC, DivOut => Sig1);
40
  -- Instanzierung des AdressCounter
41
  Inst_AdressCounter: AdressCounter
42
    port map(ClkAdr => Sig1, AdrCnt => Val1);
43
  RAMA <= Val1;
44
  -- Zuweisung auf LED's (das man etwas sieht)
45
  LED(0) <= Val1(0);
46
  LED(1) <= Val1(1);
47
  LED(2) <= Val1(2);
48
  LED(3) <= Val1(3);
49
  LED(4) <= Val1(13);
50
  LED(5) <= Val1(14);
51
  LED(6) <= Val1(15);
52
  LED(7) <= Val1(16);
53
  
54
end Behavioral;
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
--------------------------------------------------------------------------------
7
-- programmierbare Time-Base
8
--------------------------------------------------------------------------------
9
10
entity TimeBase is
11
  port (
12
    ExtOSC : in  std_logic;     -- externer Oszillator 16MHz
13
    DivOut : out std_logic      -- Ausgangs-Takt
14
  );
15
end TimeBase;
16
17
architecture Behavioral of TimeBase is
18
  signal CntrTB : std_logic_vector(10 downto 0);
19
begin
20
21
  PreScaler: process(ExtOSC)
22
  begin
23
    if rising_edge(ExtOSC) then
24
      CntrTB <= CntrTB + 1;
25
    end if;
26
  end process PreScaler;
27
  
28
  DivOut <= CntrTB(0);
29
  
30
end Behavioral;
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
--------------------------------------------------------------------------------
7
-- 16-Bit Counter für Adress-Bus
8
--------------------------------------------------------------------------------
9
10
entity AdressCounter is
11
  port(
12
    ClkAdr : in  std_logic;
13
   AdrCnt : out std_logic_vector(16 downto 0)
14
  );
15
end AdressCounter;
16
17
architecture Behavioral of AdressCounter is
18
  signal TmpCnt: std_logic_vector(16 downto 0);
19
begin
20
21
  -- RAM-Adresse incrementieren
22
  RamAdrIncr: process(ClkAdr)
23
  begin
24
    if falling_edge(ClkAdr) then
25
     if TmpCnt < 40000 then
26
      TmpCnt <= TmpCnt + '1';
27
    end if;
28
   end if;
29
  end process RamAdrIncr;
30
  
31
  AdrCnt <= TmpCnt;
32
  
33
end Behavioral;

Hoffe das hilft weiter :)

Muß jetzt erst einmal wieder zum rechten Coden kommen, Kritik ist daher 
erwünscht, will ja auch was lernen dabei.

Grüße Wolfgang

von Christian R. (supachris)


Lesenswert?

Das schaut schon mal recht gut aus. Als Anfänger sollte man nur eine 
aktive Flanke benutzen, also entweder fallende oder steigende. Bei End 
Process kannst du den Prozess-Namen weglassen. Ebenso beim Begin, wenn 
dir kein sinnvoller Name einfällt (ist ja manchmal).
Desweiteren ist ein Reset sinnvoll, oder eine Vorbelegung der Signale, 
sonst hast du in der Simulation alles rot:

signal TmpCnt: std_logic_vector(16 downto 0) := (others => '0');

Initialisiert den Vektor mit Nullen.

Ansonsten bist du auf dem richtigen Weg.

von Wolfgang S. (bluenature)


Lesenswert?

Servus Christian,

die Flanken werte ich ja in beiden Counter-Modulen aus mit:
1
  if falling_edge(ClkAdr) then
2
    ...
und
1
  if rising_edge(ExtOSC) then
2
    ...
Es gibt nur eine andere Schreibweise mit event, die aber für ein 
Target-CPLD nacher gleich ist, in der Simulation anscheinend irgendwie 
andere Resultate bringt mit:
1
  if ExtOSC = '1' and ExtOSC'event then
2
    ...
Wobei der Process mit den angegebenen Variablen eigentlich nur im 
Wechsel einer Variablen ausgeführt werden sollte.
Muß da auch noch mit Doppelflanken und anderen Schreibweisen laborieren.

Auf die Vorgabe der Zustände hatte ich vorerst einmal verzichtet, das 
wird überall wie ich so die Tage gesehen habe gerne gemacht. Scheint 
wirklich simulations-relevant zu sein, zumal VHDL im Grunde primär eine 
Simulationssprache ist. Wollte nicht unnötig Ballast für erste 
Experimente einfügen, da ich den Simulator garnicht starten wollte.

Der process-name war irgendwie im Syntax-Check relevant, deswegen habe 
ich das so geschrieben. Nur ein process brachte einen Fehler.

Grüße Wolfgang

von Christian R. (supachris)


Lesenswert?

Naja, fallende und steigende Flanke innerhalb des CPLD/FPGA sollte man 
nur machen, wenn es wirklich erforderlich ist. Ansonsten kann man alle 
Signale, die intern etwas schalten mit der gleichen Flanke bearbeiten. 
Also Ausgabe mit der steigenden und Einlesen auch mit der (nächsten) 
steigenden. Dann ist sichergestellt, dass die Setup- und Hold Zeiten 
stimmen (naja, in den allermeisten Fällen...).
Und ohne Simulation sollte man bei solchen Sachen gar nix machen. Oder 
willst du eine Try and Error Orgie mit Fehler-Raten beginnen? Gewöhn dir 
dirzuliebe gleich von Anfang an eine Simulation an.

von Wolfgang S. (bluenature)


Lesenswert?

Simulationen setze ich von meiner Seite gerne dort ein, wo herkömmliche 
Mittel eine Aussage verweigern. Das Feeling für eine Sache ist mir 
persönlich wichtiger, weil sie das Basisproblem strikt (durch Wissen) 
umgehen. Im Finish mag eine Simulation ja gut sein um ein Optimum an 
Perfrmance aus einem System herauszuholen, aber das richtige methodische 
Programmieren ersetzt sie nicht, und das ist die Basis jedes Projekts. 
Daher erst einmal A, dann B wie Simulation. Danke für den netten 
Hinweis.

Grüße Wolfgang

von Christian R. (supachris)


Lesenswert?

Naja, bei größeren CPLD/FPGA Projekten wirst du damit nicht weit kommen. 
Ein Tippfehler kostet dich dann Stunden bis Tage an 
Sucharbeit...komisches Konzept. Welches "herkömmliche" Mittel sagt dir 
in einem VHDL Projekt denn, dass alles logisch korrekt ist? Ich mach das 
jetzt schon ein paar Jahre, ohne Simulation wär ich ja blöd 
geworden....alles immer probieren und nur anhand der Signale außen (wenn 
man denn ran kommt) rätseln, wo der Fehler sein könnte? Naja.....ist wie 
diese seltsame Meinung zu Debuggern. Die, die keine benutzen, (meist 
weil sie zu teuer sind) erzählen auch der ganzen Welt, das braucht kein 
Mensch. Naja. An solchen stellen trennen sich dann Bastler von 
professionellen.

von Wolfgang S. (bluenature)


Lesenswert?

Immer nett bleiben ;)

So jetzt die neuen Fragen:
Ich habe folgendes gemacht:

1) Angaben einstellen
   http://wiesolator.gotdns.org/mcnet/ModelSimOption.PNG
2) NewSource
3) VHDL TestBench
4) Simulation als Namen, Source selektieren => Finish
5) Sources/Files dort Simulation.vhd
6) File erscheint
   http://wiesolator.gotdns.org/mcnet/simulation.txt
7) ??? was ist zu tun damit ???

Evtl. eine andere Simulation möglich? Oder welche ist das optimalere um 
ein Modul unter XILINX-ISE zu simulieren?
Gibt es irgendwo Informationen darüber? Ich finde selbst nur kleine 
Details, die mir aber irgendwo nichts bringen, da immer irgend eine 
Information zum Gesamtvorgang fehlt.

Grüße Wolfgang

von Christian R. (supachris)


Lesenswert?

Naja, jetzt musst du dort die Stimuli für dein Modul reinschreiben. 
Genauso in VHDL, mit dem Vorteil dass du auch nicht.sythetisierbare 
Sachen wie zum Beispiel

TXData <= x"AA"
wait for 12 ns;
TXLoad <= '1';
wait for 12 ns;
TXLoad <= '0';

machen kannst. Macht zwar am Anfang etwas Arbeit, die TestBench zu 
schreiben, hilft aber ungemein bei der Fehlersuche.

von Wolfgang S. (bluenature)


Lesenswert?

Also praktisch in dem Teil der Simulations-File:
1
   -- Stimulus process
2
   stim_proc: process
3
   begin    
4
      -- hold reset state for 100ms.
5
      wait for 100ms;  
6
7
      wait for <clock>_period*10;
8
9
      -- insert stimulus here
  Deine genannten "sequencer"-artigen Signal-Informationen 
(10101010-Pattern)
1
      wait;
2
   end process;

Was meinen die in der File mit "<clock>"? Was muß ich da einsetzen? Den 
Pin? - Ein Signal? Oder darf/muß man das überhaupt nichts modifizieren?
Und was ich auch nicht finde, den Start der Simulation, der war in der 
anderen Simulation oben in der Tooolbox, aber eben grau hinterlegt, hier 
fehlt jedoch alles irgendwie für einen Start.

Grüße Wolfgang

von Christian R. (supachris)


Lesenswert?

Statt <clock> musst du bei dir wahrscheinlich SysClock einsetzen, das 
ist dann der Stimulus für den Takt. die 1ns ist auch bissl klein, das 
wäre ja 1GHz Takt. Da musst du die Periodendauer deiner Taktquelle rein 
schreiben.
Steht ja auch im Kommentar dort....

Du hast ModelSim SE ausgewählt, ich bezweifle, dass du das gekauft und 
installiert hast. Für die einfache Logik-Simulation reicht der ISE 
Simulator oder Modelsim XE Starter, die kosten nix. ModelSim XE Full 
kostet etwa 1000 Euro, die PE und SE Versionen 5-stellig. Stell also 
erst mal den ISE Simulator ein und probier mal.

die x"AA" waren nur ein Beispiel. Was weiß ich denn, was deine Schaltung 
machen soll.

von Wolfgang S. (bluenature)


Lesenswert?

Ich habe das am Anfang des Threats genannte Soft-Packet, die ISE10.1 
installiert. Wenn da nur spezielle Simulatoren funktionieren, woher soll 
ich das denn wissen? Die Anleitungen und Infos bei XILINX beziehen sich 
leider nun auch auf alles mögliche, nur nich auf das was ich benötige?

Grüße Wolfgang

von Christian R. (supachris)


Lesenswert?

Naja, das stimmt. Die Lernkurve bei Xilinx ist mühsam und steinig. Das 
sollte keine Kritik sein. Sorry, falls das so rüberkam.
Modelsim ist eine eigenständige Software, die haufen Geld kostet. Der 
ISE Simulator ist bei ISE dabei und erledigt einfache Simulation auch 
ganz gut.

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.