Forum: FPGA, VHDL & Co. einfache LED ansteuern mit deNano Board


von Hulk91 (Gast)


Lesenswert?

Hallo alle miteinander,

ich habe mir den deNano Board Cyc. IV mal besorgt und bin da relativ neu 
dabei. Ich habe mir versucht mal die Vhdl Grundlagen anzueignen.

Ich wollte nur mal versuchen eine User LED mal anzusteuern und bekomme 
andauernd ein Fehler.

Mein Code:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
5
6
entity test is
7
    Port ( LED : out  STD_LOGIC;
8
           CLK : in  STD_LOGIC);
9
end test;
10
11
architecture Behavioral of test is
12
constant XTAL : integer := 50000000; --hier Frequenz des Quarzes eintragen
13
signal COUNTER : integer := 0;  --eventuell noch range 0 to xxx := 0;
14
signal LED_STATE : std_logic := '0';
15
16
begin
17
BLINKEN : process
18
begin
19
20
wait until rising_edge(CLK);
21
  if (COUNTER = XTAL -1) then
22
    COUNTER <= 0;
23
          LED_STATE <= not LED_STATE;
24
   else
25
    COUNTER <= COUNTER + 1;
26
  end if;
27
end process BLINKEN;
28
LED <= LED_STATE;
29
30
end Behavioral;
ist eigentlich relativ einfach und übersichtlich. Der zeigt mir nur 
jedesmal ein Fehler an und kriege langsam die Krise :(.


Hier einmal den Fehlercode:

Info: 
*******************************************************************
Info: Running Quartus II 32-bit Analysis & Synthesis
  Info: Version 12.1 Build 177 11/07/2012 SJ Web Edition
  Info: Processing started: Wed Jun 28 18:28:18 2017
Info: Command: quartus_map --read_settings_files=on 
--write_settings_files=off light -c light
Warning (20028): Parallel compilation is not licensed and has been 
disabled
Info (12021): Found 2 design units, including 1 entities, in source file 
light.vhd
  Info (12022): Found design unit 1: test-Behavioral
  Info (12023): Found entity 1: test
Error (12007): Top-level design entity "light" is undefined
Error: Quartus II 32-bit Analysis & Synthesis was unsuccessful. 1 error, 
1 warning
  Error: Peak virtual memory: 380 megabytes
  Error: Processing ended: Wed Jun 28 18:28:19 2017

: Bearbeitet durch Moderator
von Hulk91 (Gast)


Lesenswert?

Ich habe den Nano zum erstenmal angeschlossen und habe versucht erstmal 
den Code zu Kompilieren, ohne irgendwelche Pin Einstellungen 
vorzunehmen. Ich habe nur ein Projekt angelegt und mein FPGA Typ 
ausgewählt.

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


Lesenswert?

Hulk91 schrieb:
> Mein Code:
Mach doch bitte die [vhdl] Tags um deinen Code (siehe in der kurzen 
Anleitung über jeder Eingabebox).

> Ich habe nur ein Projekt angelegt und mein FPGA Typ ausgewählt.
Dann brauchst du noch irgendwie ein Constraint File, das sagt, welcher 
Port deines Moduls an welchem Pin des FPGAs angeschlossen ist. Denn wenn 
du das nicht tust, dann hat die Toolchain alle Freiheiten und legt die 
Pins für CLK und LED dorthin, wo es ihr gefällt. Die Wahrscheinlichkeit 
ist hoch, dass das nicht zu deiner Hardware passt.

Hulk91 schrieb:
> Error (12007): Top-level design entity "light" is undefined
Offenbar passt da mit dem Projekt-Tree was nicht. Du willst eine Entity 
"light" implementieren, die du nicht hast.

Gibt es für das Board und die Toolchain nicht irgendein simples Tutorial 
für die allerersten Schritte?

: Bearbeitet durch Moderator
von Markus F. (mfro)


Lesenswert?

Lothar M. schrieb:
> Dann brauchst du noch irgendwie ein Constraint File, das sagt, welcher
> Port deines Moduls an welchem Pin des FPGAs angeschlossen ist.

Das ist bei Altera kein Constraint File (das ist hier nur für's Timing 
zuständig); für die Pin-Zuordnung zu Toplevel-Signalen gibt's den 
Assignment-Editor (Assignments->Assignment Editor) oder den Pin Planner 
(Assignments->Pin Planner). Wer weiß wie, kann auch gleich die 
.qsf-Datei direkt editieren.

Welche VHDL-Datei das Toplevel darstellt, wird durch einen rechten 
Mausklick auf den Dateinamen und Auswahl von "Set as Toplevel Entity" 
festgelegt.

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


Lesenswert?

Markus F. schrieb:
> Wer weiß wie, kann auch gleich die .qsf-Datei direkt editieren.
Dann ist das ein Constraint File...  ;-)

von Markus F. (mfro)


Lesenswert?

Lothar M. schrieb:
> Dann ist das ein Constraint File...  ;-)

Nö, das ist das *Q*uartus *S*ettings *F*ile ... Da steht so ungefähr 
alles drin, was das Projekt betrifft (letztendlich ist das schlicht 
tcl-Code).

Der Begriff Constraint ist bei Altera für die .sdc (*S*ynopsis *D*esign 
*C*onstraint) Dateien schon benutzt (eigentlich auch "nur" .tcl-Code). 
Damit steuert man den TimeQuest Timing Analyzer (bzw. die 
Timing-Optimierte Synthese).

von Klakx (Gast)


Lesenswert?

Constraint ist der Überbegriff, der auch nicht vom Tool aus definiert 
wird.

Es gibt prinzipiell überall u.a. gibt Timing, Placement, IO, ... 
Constraints.

Wie explizit Altera das dann umbenennt und ggf. einen Editor überstülpt, 
ist eine andere Sache.

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


Lesenswert?

Klakx schrieb:
> Constraint ist der Überbegriff
"Constraint" bedeutet "Einschränkung, Zwang".

Und mit einer Einschränkung (egal aus welcher Datei oder mit welchem 
Tool) gebe ich Zielwerte vor und nehme der Toolchain die Möglichkeit, 
irgendwelche beliebige Resultate zu erzielen, die sich zudem noch mit 
jedem Durchlauf beliebig ändern können. Wie diese Einschränkungen 
formuliert sind, und wie die speichernden Dateien heißen, ist vorrangig 
egal.

Wobei mir eine einzige lesbare (toolchainversionsunabhängige) Textdatei, 
die alle relevanten Constraints enthält, für die Versionierung besser 
gefällt, als wenn die Constraints über beliebige Projektdateien hinweg 
verstreut sind.

Beitrag #5059682 wurde vom Autor gelöscht.
von Christian G. (Gast)


Lesenswert?

...naja egal ob ein sdc file fürs timning existiert oder nicht, nutze 
den Pin Planner um deine in / outputs festzulegen CLK ist bei DE0-nano 
PIN_R8 (die externe 50 MHz clock) LED musste im manual nachschlagen 
welche du halt ansteuern möchtest. Der PinPlanner ist etwas 
gewöhnungsbedürftig aber damit solltest du das hinkriegen, falls nicht 
schon passiert. Desweiteren findet der, wie schon vorher erwähnt wurde, 
das TopLevelEntity light nicht, deines heißt ja auch "test"... probier 
mal rechte Maustaste auf das vhdl file und dann set as top level 
entity... oder so ähnlich, dateiname = entity name kann auch nicht 
schaden, über den timing analyzer (mir ist grad der Name entfallen) 
stellste dann die clock,  etc. ein und erstellst dein sdc file. Aber das 
ist bei mir immer der letzte Schritt vorm synthetisieren des designs, 
fürs kompilieren (syntax error checking), simulieren etc brauchste das 
sdc file nicht. Ansonsten einfach mal n paar tutorials anschauen, ist 
zwar nicht der Weisheit letzter Schluss, das dürfte wohl datenblätter 
lesen und verstehen sein, aber hilft einem am Anfang wenn man wie der Ox 
vorm Berge steht doch schon mal weiter.

von Josef G. (bome) Benutzerseite


Lesenswert?

Jedenfalls bis Quartus 13.0 SP1 konnte man die
Pin-Zuordnung auch mittels csv-Datei eingeben.
Geht das etwa bei neueren Versionen nicht mehr ?

von Gustl B. (-gb-)


Lesenswert?

Doch, geht noch aber man muss diese CSV importierten und dann steht es 
im qsf. Sprich wenn man dann die CSV editiert dann wird das nicht 
beachtet wie bei xilinx mit der xdc oder ucf. Man müsste die CSV neu 
importieren oder eben gleich die qsf editieren.

von ElKo (Gast)


Lesenswert?

Ich vermute, es geht um das Terasic De0Nano-Board? Terasic bietet sehr 
gute Resourcen zu seinen Boards an. Schau auf der CD nach. Darin findest 
du einige einfach bis komplexe Beispielprojekte. Unter anderem auch das 
Golden Top Projekt, welches die komplette Konfiguration des Boards in 
einem sonst leeren Quartus-Projekt enthält. Da sind alle Pins bereits 
definiert, die du brauchst. Und du bekommst ein selbsterklärendes Modul 
zum anpassen.
1
module DE0_Nano(
2
3
  //////////// CLOCK //////////
4
  CLOCK_50,
5
6
  //////////// LED //////////
7
  LED,
8
9
  //////////// KEY //////////
10
  KEY,
11
12
  //////////// SW //////////
13
  SW,
14
15
  //////////// SDRAM //////////
16
  [...]
17
18
  //////////// 2x13 GPIO Header //////////
19
  GPIO_2,
20
  GPIO_2_IN,
21
22
  //////////// GPIO_0, GPIO_0 connect to GPIO Default //////////
23
  GPIO_0,
24
  GPIO_0_IN,
25
26
  //////////// GPIO_1, GPIO_1 connect to GPIO Default //////////
27
  GPIO_1,
28
  GPIO_1_IN 
29
);
30
[...]
31
32
//=======================================================
33
//  PORT declarations
34
//=======================================================
35
36
//////////// CLOCK //////////
37
input                   CLOCK_50;
38
39
//////////// LED //////////
40
output         [7:0]    LED;
41
42
//////////// KEY //////////
43
input          [1:0]    KEY;
44
45
//////////// SW //////////
46
input          [3:0]    SW;
47
48
[...]


Die CD gibts übrigens hier zum Download: 
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=139&No=593&PartNo=4

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.