Forum: FPGA, VHDL & Co. Infos zum Umgang mit "Lattice Diamond"?


von Michael D. (etzen_michi)


Angehängte Dateien:

Lesenswert?

Tut mir leid wenn ich hier so rumspäme ... aber ich komme einfach nicht 
weiter.

Bin absolut neu in sachen VHDL, FPGA und habe vorher nur mit AVR 
gearbeitet.

Habe nun hier das Breakoutboard mit dem MachXO2 von Lattice aus der 
Sammelbestellung.

Zu Anfang bin ich noch dabei ein VHDL Tutorial durch zu gehen, gehe aber 
zwischenzeitlich immer mal wieder in das Programm "Lattice Diamond" um 
das lernen nicht ganz so einseitig zu haben.

Habe nun mehrfach das "Tutorail" von Lattice zu diesem Programm 
durchgearbeitet, aber das ist meiner Meinung nach so besch*ssen das man 
da kaum was versteht...

Ich weiß jetzt ... garnichts.

>Kann mir hier zufällig jemand helfen bzgl. Infos zum Programm, alternative 
>Programme.


Mein Problem beim Tutorial von Lattice: Man erstellt ein neues Projekt 
und fügt fertige Datein (Programmteile) ein, welche kein bisschen 
erklärt werden. Dann editiert man diese nach genauer Vorgabe auch hier 
ist die erklärung eher oberflächig.

Ich habe keine Ahnung wo ich in diesem Programm meinen Code schreiben 
kann ... ich weiß jetzt nur wie ich die Laufzeiten eines fertigen 
Programms errechnen lassen kann was für mich für den Einstieg erstmal 
total Wumpe ist.

Habe mal die tolle .pdf angehängt.

von Lattice User (Gast)


Lesenswert?

Dieses Tutorial richtet sich leider nicht an blutige Anfänger, sondern 
da geht es darum auch die fortgeschrittenen Möglichkeiten insbesondere 
eines Mixed Language Designs zu zeigen.

Lade einfach mal eines von Lothars VHDL Beispielen herrunter, z.B. 
Lauflicht.

Lege ein neues Projekt an.
Wähle den FPGA aus.
Füge die heruntergeladene VHDL Datei hinzu.
Gehe auf Process.
Doppelclick auf Place & Route umd das alles zu kompilieren.

Im Spreadsheetview kannst du anschliessend unter anderen Pins zuordnen.
Dann nochmal Place & Route
Dann hacken bei BitStream file unter "Export Files"
Doppelclick auf Export Files.

Dann im Toolmenu bzw mit dem entsprechenden Icon in der Toolleiste den 
Programmer aufrufen.

von Michael D. (etzen_michi)


Lesenswert?

Vielen Dank.

Habe ich so gemacht, nur das ich anstelle von "BitStream" "JEDEC File" 
aktiviert habe, da es dieses nicht gab.

Sobald ich das rübergespielt habe leuchten die LED`s alle auf. 
Vermutlich da ich keinen Clock habe.

Daher habe ich einen 1kHz sowie 1MHz Clock mal an einen Pin gehängt und 
diesen als CLK_in eingestellt. es leuchten weiterhin alle LED`s.

Also habe ich mal einen LED`s Pin verstellt um zu schauen ob ich die 
richtigen Pin`s eingestellt habe: Die Verstellte LED leuchtet nun 
dunkler.

Daher das ich nun wirklich noch sogut wie garnichts kann wollte ich mal 
fragen ob mir jemand zufällig auf das Lauflicht einen internen Takt 
geben kann?

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


Lesenswert?

Michael D. schrieb:
> Habe ich so gemacht, nur das ich anstelle von "BitStream" "JEDEC File"
> aktiviert habe, da es dieses nicht gab.
Einen Bitstrom gibts auch "nur" für FPGAs mit externem Flash.

Michael D. schrieb:
> Also habe ich mal einen LED`s Pin verstellt um zu schauen ob ich die
> richtigen Pin`s eingestellt habe: Die Verstellte LED leuchtet nun
> dunkler.
Wie wärs ganz am Anfang mit dem einfachsten aller Projekte: einen 
Eingang auf einen Ausgang? Sowas wie das hier:
1
entity DasAllerersteProjekt is
2
   Port ( Taster: in  STD_LOGIC;
3
            LED : out STD_LOGIC);
4
   
5
end DasAllerersteProjekt;
6
7
architecture Behavioral of DasAllerersteProjekt is
8
begin   
9
    LED <= Taster;
10
end;
Ganz ohne Takt, reinste Verdrahtung....

von W.S. (Gast)


Lesenswert?

Mach doch als allererstes ein Projekt mit einem Schematic als Quelle. 
Sobald das durchgelaufen ist, kannst du dir den generierten VHDL- oder 
Verilog-Code anschauen und so lernen, wie man das Ganze macht.

Wenn du dann in VHDL oder Verilog weitermachen willst, dann wirf das 
Schematics aus deinem Projekt heraus und füge das o.g. generierte File 
als Quelle ein.

W.S.

von Michael D. (etzen_michi)


Lesenswert?

Hört auf zu hassen ... es funktioniert ^^.

Problem war: Schlechter Kontakt des Taktes.

Programm ohne Takt: Habe aktuell keine Taster aufn Board :Þ
Schematics: Wenn ich nicht muss würde ich diesen Teil gerne auslassen.

Weiter gehts ... auf ins Verderben.


Vielen Dank für die Hilfe.

von Lattice User (Gast)


Lesenswert?

Ich kenne das Board nicht, hat es den keinen Onboard Oscillator?

Wenn nicht, kann man die Onchip RC Oscillator verwenden. Der ist leider 
nicht über IPExpress zugänglich, warum auch immer.

Hier mal das Lauflicht mit RC Oscillator, Funktion kann ich aber Mangels 
MachXO2 Board nicht garantieren.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
library MACHXO2;
6
use MACHXO2.components.all;
7
8
entity Lauflicht is
9
    Port ( leds : out  STD_LOGIC_VECTOR (7 downto 0));
10
end Lauflicht;
11
12
architecture Behavioral of Lauflicht is
13
  component Clockdivider is
14
    Generic ( fclk     : integer;
15
              frequenz : integer);
16
    Port    ( clk : in  STD_LOGIC;
17
              clken : out  STD_LOGIC);
18
  end component;
19
  signal clk    : std_logic;
20
  signal clken  : std_logic;
21
  signal sr : std_logic_vector (7 downto 0) := "10000000";
22
begin
23
24
   OSCInst0: OSCH  GENERIC MAP ( NOM_FREQ => "2.56" )
25
                   PORT MAP ( OSC=> clk );
26
27
   clocken: Clockdivider GENERIC MAP( fclk => 10000000, frequenz => 3)
28
                         PORT MAP   ( clk => clk , clken => clken );
29
   process begin
30
      wait until rising_edge(clk);
31
      if (clken='1') then
32
         if (sr="00000001") then
33
            sr <= "10000000";
34
         else
35
            sr <= '0' & sr(7 downto 1);
36
         end if;
37
      end if;
38
   end process;
39
   leds <= sr; 
40
end Behavioral;

von Michael D. (etzen_michi)


Lesenswert?

Es ist zwar vorhanden ein Pad X2 mit im Schaltplan eingezeichneten 50MHz 
Oscillator aber dieser ist nicht bestückt :Þ

Werde mir bei der nächsten Bestellung mal einen Oscillator mitbestellen.


Vielen Dank für das kleine Progrämmchen.
Beim Überfliegen schaut das gut aus (vergleich mit standard Programm des 
Boards).


Würde es einen Unterschied machen wenn man in diesem Programm anstelle 
von:
1
wait until ...
2
3
if ...
verwenden würde?

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


Lesenswert?

Michael D. schrieb:
> Würde es einen Unterschied machen wenn man in diesem Programm
Vorneweg: es ist kein Programm, es ist eine Hardwarebeschreibung.
> anstelle von:
> wait until ...
> if ...
> verwenden würde?
Nein, aber außer Nachteilen hat man keine Vorteile...  ;-)
http://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html
http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess

von Duke Scarring (Gast)


Lesenswert?

W.S. schrieb:
> kannst du dir den generierten VHDL- oder
> Verilog-Code anschauen und so lernen, wie man das Ganze macht.
Aus per Schematic-Entry generiertem Code möchte ich aber nicht VHDL 
lernen wollen. Hast Du da schon mal reingeguckt?

Duke

von Michael D. (etzen_michi)


Lesenswert?

Habe nun mal das Programm erstmal "as is" übernommen. Daher das ich 
einen Error bekommen habe dann auch etwas herumversucht, bekomme es aber 
nicht hin.

ERROR - ngdbuild: logical block 'clocken' with type 'Clockdivider' is 
unexpanded

Wenn ich richtig gegoogled habe bedeutet das soviel das zwei 
verschiedene Prozesse auf eine Variable zugreifen ... (clk?).

Kann mir zufällig (hoffentlich das letzte mal jemand wieder helfen?).
1
   OSCInst0: OSCH  GENERIC MAP ( NOM_FREQ => "2.56" )
2
                   PORT MAP ( OSC=> clk );
3
4
   clocken: Clockdivider GENERIC MAP( fclk => 10000000, frequenz => 3)
5
                         PORT MAP   ( clk => clk , clken => clken );

von Lattice User (Gast)


Lesenswert?

das Beispiel ist von Lothar, ich hatte nur den externen Clockeingang 
durch den internen MachXO2 Oscillator ersetzt. Für den Rest siehe:

http://www.lothar-miller.de/s9y/index.php?serendipity[action]=search&serendipity[searchTerm]=lauflicht&serendipity[searchButton]=%3E

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


Lesenswert?

Michael D. schrieb:
> zwei verschiedene Prozesse auf eine Variable zugreifen ... (clk?).
Obacht: clk ist keine Variable, sondern ein Signal. Und die Prozesse 
"grifen" nicht darauf zu, sondern das Signal ist an mehrere Komponenten 
verdrahtet...
Fazit: in Hardware denken! Auch dort gibt es z.B. ein Taktsignal, das an 
mehrere Komponenten verdrahtet werden kann.

>>  OSCInst0: OSCH  GENERIC MAP ( NOM_FREQ => "2.56" )
>>                     PORT MAP ( OSC=> clk );
Ich verweise hier auf die Technical Note TN1199 von Lattice:
http://www.latticesemi.com/documents/TN1199.pdf
Auf Seite 13-27 der OSCH

von W.S. (Gast)


Lesenswert?

Duke Scarring schrieb:
> Hast Du da schon mal reingeguckt?

Ja. Eher trocken, aber funktioniert. Zumeist nur Zuweisungen, die auf 
Bibliothekselemente verweisen. Aber das Drumherum geht so. Bei Xilinx 
gibt es da was Netteres: Man kann von vornherein ansagen, was für Inputs 
und Outputs man haben will und die ISE generiert einem damit den ganzen 
Rumpf, den man dann bloß noch mit den Prozeßinhalten ausfüllen muß. Ist 
sehr hilfreich gegen Vergeßlichkeitsfehler, wenn man nicht jeden Tag mit 
VHDL umgeht und nach ein paar Wochen "was ganz anderes machen" mal 
wieder sich um's Programmieren kümmern muß.

W.S.

von Christian R. (supachris)


Lesenswert?

W.S. schrieb:
> Mach doch als allererstes ein Projekt mit einem Schematic als Quelle.

Duke Scarring schrieb:
> Aus per Schematic-Entry generiertem Code möchte ich aber nicht VHDL
> lernen wollen. Hast Du da schon mal reingeguckt?

W.S. schrieb:
> Man kann von vornherein ansagen, was für Inputs
> und Outputs man haben will und die ISE generiert einem damit den ganzen
> Rumpf, den man dann bloß noch mit den Prozeßinhalten ausfüllen muß.

Naja, das macht ISE auch, wenn man ein neues VHDL Modul File erstellt. 
Dazu muss man nicht die Krücke von Schematic Editor verwenden.

von W.S. (Gast)


Lesenswert?

Christian R. schrieb:
> Naja, das macht ISE auch

Hehe.. hier ging es doch wohl um Lattice Diamond - oder?

W.S.

von Holger (Gast)


Lesenswert?

http://www.youtube.com/watch?v=-sbJ-2qhNbw
Für den Anfang erst mal ein Projekt aus der Referenz zu diesem
Board zu laden.
Ich habe den Control Dev Kit.
Da sind spezielle Ref-Files zum testen auf der Homepage mit dabei.
Gruss Holger.

von Chris2k (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich wärme den etwas älteren Thread hier mal auf. Ich habe das gleiche 
Problem wie der OP, kaum Kenntnisse vorhanden und das MachXO2-Board soll 
programmiert werden. Ich hatte das gleiche Problem wie er mit dem 
Lauflicht. Im Anhang eine funktionierende Lösung des Knight 
Rider-Lauflichts von Lothar Miller, angepasst für das 
MachXO2-Breakoutboard unter Verwendung des internen FPGA-Oszillators 
(2,08 MHz). Über die Timings (Zählerstände/Signale) bin ich mir noch 
unsicher, so ganz genau hintergestiegen bin ich noch nicht. Aber der 
angehängte Code läuft auf meinem Board prima.

Gruß
Chris2k

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.