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
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
4
5
6
entitytestis
7
Port(LED:outSTD_LOGIC;
8
CLK:inSTD_LOGIC);
9
endtest;
10
11
architectureBehavioraloftestis
12
constantXTAL:integer:=50000000;--hier Frequenz des Quarzes eintragen
13
signalCOUNTER:integer:=0;--eventuell noch range 0 to xxx := 0;
14
signalLED_STATE:std_logic:='0';
15
16
begin
17
BLINKEN:process
18
begin
19
20
waituntilrising_edge(CLK);
21
if(COUNTER=XTAL-1)then
22
COUNTER<=0;
23
LED_STATE<=notLED_STATE;
24
else
25
COUNTER<=COUNTER+1;
26
endif;
27
endprocessBLINKEN;
28
LED<=LED_STATE;
29
30
endBehavioral;
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
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.
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?
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.
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).
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.
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.
...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.
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.
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 //////////