Forum: FPGA, VHDL & Co. VHDL Lattice Pin ansteuern


von Steven (. (ovular) Benutzerseite


Lesenswert?

Hallo zusammen,

schon seit Stunden suche ich verzweifelt, wie man einen Pin in VHDL auf 
ein Signal legt.
Das kann ja nicht so schwer sein, nur finde ich nichts und mein Buch 
kommt erst nächste Woche.
Kann mir jemand helfen, wie ich das tue und welche LIB ich evtl. 
einbinden muss.

Mal der erste Teil meines Testprogramms:
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
library lattice;
6
use lattice.components.all;
7
8
entity myClock is
9
10
port( 
11
  clockout: out bit );
12
13
attribute location of clockout  : signal is "B1";
14
end myClock;
15
16
architecture behv of myClock is
17
.
18
.
19
.

Danke schonmal!

Gruß Steven

von Michael (Gast)


Lesenswert?

Hallo Steven,

hast Du es schon mal hiermit versucht?
1
clockout <= '1';

oder auch
1
clockout <= '0';

Gruß,
Michael

von Steven (. (ovular) Benutzerseite


Lesenswert?

Dankeschön, aber ich dachte eher daran dem internen signal ein pin 
zuzuweisen.
Hab mich ungenau ausgedrückt sorry.

Gruß Steven

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


Lesenswert?

Steven () schrieb:
> Dankeschön, aber ich dachte eher daran dem internen signal ein pin
> zuzuweisen.
Such mal nach "Constraints File" und "Constraints Editor":
Beitrag "Constraint Files in Lattice"
"Constraints" bedeutet "Beschränkung", und genau das willst du tun: der 
Toolchain keine freie Auswahl bei den Pins lassen, sondern die Auswahl 
auf 1 Pin beschränken.

> attribute location of clockout  : signal is "B1";
Mag sein, dass das ginge, es ist trotzdem eine Sackgasse, denn in eine 
VHDL-Beschreibung gehört so wenig wie möglich Hardwareabhängigkeit.

von bko (Gast)


Lesenswert?


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


Lesenswert?

Danke, ich hatte diesen Thread nicht mehr gefunden...  ;-)

von bko (Gast)


Lesenswert?

Ich war einfach nur zu langsam...

von cfgardiner (Gast)


Lesenswert?

Hallo Steven,

die Attribute heisst 'LOC' und nicht Location.

z.B.
Entity pcie_wb_01 is
   Port (
      i_refclkp               : in  std_logic;
      i_refclkn               : in  std_logic;
      i_rst_n                 : in  std_logic;
      i_hdinp0                : in  std_logic;
      i_hdinn0                : in  std_logic;

      o_dl_up                 : out std_logic;
      o_hdoutp0               : out std_logic;
      o_hdoutn0               : out std_logic;
      o_phy_ltssm_state       : out std_logic_vector(3 downto 0);
      o_phy_ltssm_substate    : out std_logic_vector(2 downto 0);
      o_wb_cycle              : out std_logic
      );

      --    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   attribute DRIVE      : string;   -- 20, 16, 12 (def.), 8, 4
   attribute IO_TYPE    : string;   -- LVTTL33, LVCMOS33 etc.
   attribute LOC        : string;
   attribute PULLMODE   : string;   -- UP, DOWN, NONE
   attribute SLEWRATE   : string;   -- FAST, SLOW

   attribute syn_keep : boolean;
      --    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   attribute LOC of i_rst_n               : signal is "E18";
   attribute LOC of o_dl_up               : signal is "U19";
   attribute LOC of o_phy_ltssm_state     : signal is "U18, AA21, Y20, 
W19";
   attribute LOC of o_phy_ltssm_substate  : signal is "V19, AA20, AB20";
   attribute LOC of o_wb_cycle            : signal is "B12";

End pcie_wb_01;

von Ulrich S. (voodoofrei)


Lesenswert?

Lothar hat recht, die Pinbelegung hat in den VHD-Files nichts zu suchen 
und gehört ins LPF-File!

von Steven (. (ovular) Benutzerseite


Lesenswert?

Super, danke an alle!

Dann kenne ich ja die Möglichkeiten und den Tipp es in die LPF-File zu 
schreiben.

Brauche ich für das LOC Attribute noch eine spezielle Include-File?
Und gibt es für die Befehle in der LPF-File auch eine Dokumentation?

Gruß Steven

von cfgardiner (Gast)


Lesenswert?

Ulrich S. schrieb:
> Lothar hat recht, die Pinbelegung hat in den VHD-Files nichts zu suchen
> und gehört ins LPF-File!

So ein Blödsinn! Wie kommst du zu dieser Aussage? Falsche Farbe? Zu 
viele Zeichen auf der Festplatte? Oder hast du doch etwas fundierteres 
zu bieten?

VHDL Attribute sind sehr wohl dafür geeignet Information in eine HDL 
Beschreibung zu plazieren, die von einem späteren Schritt in einem 
Design Flow (z.B. Layout Tools etc) ausgewertet werden. Andere Tools 
ignorieren diese Angaben einfach sofern sie nichts damit anfangen 
können. Und es bleibt trotzdem syntaktisch korrekt. Man kann es als eine 
einfache Objektbeschreibung des Komponenten betrachten, alles was zur 
'Interface Beschreibung' gehört, ist somit in der Entity Datei.

Und noch schöner, User Defined Attributes sind auch erlaubt. Somit ist 
das ganze Konzept je nach Bedarf bestens erweiterbar. Mit einem 
einfachen Parser (oder Regexp) holt man die Info an geeigneter Stelle 
wieder heraus. Ein grosser Vorteil gerade für automatisierte aber 
trotzdem offene Design Flows.

von Ulrich S. (voodoofrei)


Lesenswert?

Nur weil es funktioniert muss es noch nicht sinnvoll sein.

Man tut sich keinen Gefallen damit die I/O-Belegung ins den VHDL-Code zu 
packen.

von berndl (Gast)


Lesenswert?

cfgardiner schrieb:
> So ein Blödsinn! Wie kommst du zu dieser Aussage? Falsche Farbe? Zu
> viele Zeichen auf der Festplatte? Oder hast du doch etwas fundierteres
> zu bieten?
>
> VHDL Attribute sind sehr wohl dafür geeignet Information in eine HDL
> Beschreibung zu plazieren, die von einem späteren Schritt in einem
> Design Flow (z.B. Layout Tools etc) ausgewertet werden. Andere Tools
> ignorieren diese Angaben einfach sofern sie nichts damit anfangen
> können. Und es bleibt trotzdem syntaktisch korrekt. Man kann es als eine
> einfache Objektbeschreibung des Komponenten betrachten, alles was zur
> 'Interface Beschreibung' gehört, ist somit in der Entity Datei.
>
> Und noch schöner, User Defined Attributes sind auch erlaubt. Somit ist
> das ganze Konzept je nach Bedarf bestens erweiterbar. Mit einem
> einfachen Parser (oder Regexp) holt man die Info an geeigneter Stelle
> wieder heraus. Ein grosser Vorteil gerade für automatisierte aber
> trotzdem offene Design Flows.

Super, und jetzt schreibst du einen VHDL Design, den du vlt. auf 
mehreren Plattformen (verschiedene Chips eines Herstellers oder gar 
verschiedene Hersteller) verwenden moechtest. Und du darfst dann alles 
noch mal durchfilzen, nur weil du z.B. Pinbelegung in Attribute verpackt 
hast. In einer eingeschraenkten Welt und damit auch Sichtweise mag das 
ja sinnvoll sein... Aber wenn du Logik entwickelst und auch nur einen 
Millimeter ueber den Tellerrand schaust, dann ist das kompletter 
Bloedsinn!

Ich bin froh, dass ich meine Designs relativ leicht von einer Plattform 
auf eine andere ueberfuehren kann. Und Attribute haben da leider keinen 
Platz!

von cfgardiner (Gast)


Lesenswert?

berndl schrieb:
> Super, und jetzt schreibst du einen VHDL Design, den du vlt. auf
> mehreren Plattformen (verschiedene Chips eines Herstellers oder gar
> verschiedene Hersteller) verwenden moechtest.

Nun, dein hehres Ziel einer Technologie unabhängigen Beschreibung wird 
zwangsläufig an zwei stellen (mindestens) scheitern. Nämlich ganz unten 
wenn du z.B. Embedded RAM, IP-Cores, spezial Zellen usw. verwendest und 
ganz oben wenn deine 100% Hersteller unabhängige VHDL Beschreibung auf 
einem bestimmten FPGA/ASIC mit einer bestimmten Pinning zu einem Produkt 
wird und nicht mehr nur eine Studie oder akademische Spielerei ist. 
Genau an diesen Stellen haben VHDL Attributes ihre grosse Vorteile, 
zumindest wenn der Design Process ein wiederholbarer Flow ist.

>Und du darfst dann alles
> noch mal durchfilzen, nur weil du z.B. Pinbelegung in Attribute verpackt
> hast.

Tja, man muss es halt nur richtig machen. Dann ist gar nicht so viel 
'durchzufilzen'. Wenn ich den top-level von FPGA Technologie A nach 
Technologie B portiere muss so oder so eine neue Pin Beschreibung her, 
egal ob in einer constraint Datei oder angepasste top-level entity.

> In einer eingeschraenkten Welt und damit auch Sichtweise mag das
> ja sinnvoll sein... Aber wenn du Logik entwickelst und auch nur einen
> Millimeter ueber den Tellerrand schaust, dann ist das kompletter
> Bloedsinn!

Nun würde mich deine Definition von 'eingeschraenkt' interessieren. 
Endet vermutlich an den Rändern deines Badezimmerspiegels, alles was 
versucht sich hier hineinzudrängen ist wohl suspekt. Constraint Dateien 
sind meistens Tool/Hersteller spezifisch (z.B. von Synopsys/Synplify 
übernommen, kopiert etc). Attribute sind eigentlich dazu gedacht genau 
das Gegenteil zu sein. d.h. Informationen zu verpacken, die zwar durch 
alle Design Instanzen durchgereicht werden, aber nur da ausgewertet 
werden wo sie tatsächlich Bedeutung haben. Mit anderen Worten, tragen 
Information, die eben ausserhalb des aktuellen Tellerrands von Interesse 
sind. Und das Bezugsobjekt ist schlimmsten Falls mit etwas scrollen 
sofort identifizerbar.

>
> Ich bin froh, dass ich meine Designs relativ leicht von einer Plattform
> auf eine andere ueberfuehren kann. Und Attribute haben da leider keinen
> Platz!

Zwingt dich keiner dazu Attribute zu verwenden. Wenn du sie nicht 
verstehst wäre es sogar besser die Finger davon zu lassen (die 
kategorische Behauptung 'sie hätten keinen Platz' scheint diese 
Vermutung zu unterstützen). Aber jetzt muss ich mich doch outen, ohne 
Reue gebe ich zu, mindestens ein Design mit Constraint Dateien 
(möglicherweise sogar ganz ohne Attributes) erfolgreich abgeschlossen zu 
haben.

von Steven (. (ovular) Benutzerseite


Lesenswert?

Hi nochmal,

Bei mir findet er die Loc-Attribute nicht. Was muss ich machen?


Gruß Steven

von cfgardiner (Gast)


Lesenswert?

Hi Steven,

eigentlich muesste der Ausschnitt oben kompilieren wie es ist (fuer 
LFE3-35EA-8FN484C). Kannst du deine Entity posten oder die 
Fehlermeldungen. Welche Ziel Technologie verwendest du, ECPx?, MachXO? 
....Welches Gehäuse?

Wichtig ist nur, dass du die Bezeichner aus dem entsprechenden Handbuch 
nimmst. Es gibt auch auf der Lattice Webseite die *.csv Dateien, hieraus 
kann man auch die richtige Pin Bezeichner entnehmen.

z.B.
http://www.latticesemi.com/dynamic/index.cfm?fuseaction=view_documents&document_type=32&sloc=01-01-00-10&source=sidebar

oder

http://www.latticesemi.com/dynamic/index.cfm?fuseaction=view_documents&document_type=32&sloc=01-01-02-05&source=sidebar

von Ulrich S. (voodoofrei)


Lesenswert?

Ganz großes Kino!

Wie gut, das man sich an die Profis mit der großen Klappe hält.

Man könnte sich es auch einfach machen und im Diamond unter Tools das 
Spredsheet-View aufmachen.

Das ist übersichtlich, einfach und komfortabel - vor allem funktioniert 
es! ;)

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


Lesenswert?

Ulrich S. schrieb:
> Man könnte sich es auch einfach machen und im Diamond unter Tools das
> Spredsheet-View aufmachen.
Das wurde schon ganz weit oben aufgezeigt im 
Beitrag "Re: VHDL Lattice Pin ansteuern"

BTW:
> Spredsheet
Meinst du das Spreadsheet?

Aber ich habe den Verdacht, es klemmt da noch ganz woanders...


Also von vorn:
Steven () schrieb:
> ... welche LIB ich evtl. einbinden muss.
> Mal der erste Teil meines Testprogramms:
Lib einbinden? Programm?
Vergiss diese Softwaredenkweise. Du machst Hardwarebeschreibung.
> nur finde ich nichts
Was und wonach suchst du denn?
> und mein Buch kommt erst nächste Woche.
Welches Buch denn? Erwartest du darin die Lösung des Problems?
> use ieee.std_logic_arith.all;
> use ieee.std_logic_unsigned.all;
Siehe den Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"

BTW:
Früher (tm) hat man bei einem Problem einfach mal eine Weile rumprobiert 
und/oder die AppNotes/TechNotes der Hersteller gelesen.

von Ulrich S. (voodoofrei)


Lesenswert?

Lothar Miller schrieb:
> BTW:
>> Spredsheet
> Meinst du das Spreadsheet?

Ja.

Lothar Miller schrieb:
> Aber ich habe den Verdacht, es klemmt da noch ganz woanders...

Er hätte wenigstens die Fehlermeldung posten können.

von Steven (. (ovular) Benutzerseite


Angehängte Dateien:

Lesenswert?

Danke schonmal an alle...

@cfgardiner
Also ich benutze zum Einstieg das Pico-Board mit dem MachXO2 (1200ZE)
im Anhang ein Screenshot mit Fehlermeldung


@Lothar Miller
Ja ok, dann "Code"
Was ist dann das hier: "library ieee;" ?
>Was und wonach suchst du denn?
Nach einem guten Einstieg, damit Du deine Nerven beruhigen kannst.
>Welches Buch denn? Erwartest du darin die Lösung des Problems?
Ja

Gruß Steven

von cfgardiner (Gast)


Lesenswert?

Hi Steven,

ja, in deinem Code fehlt einfach die Zeile

   attribute LOC        : string;

Diese muss noch vor der folgenden Zeile erscheinen.
attribute LOC of clockout  : signal is "B1";

Zum Verständnis, zuerst muss die Attribute definiert werden. 'LOC' ist 
eine Anwenderdefinierte Attribute, theoretisch kann es vom beliebigen 
VHDL Typ sein, hier eben 'string'. Dann, nachdem du der Typ deiner 
Attribute definiert hast, kannst du eine Attributeninstanz mit enem VHDL 
Objekt verbinden. Dieser schritt machst du z.B. mit

attribute LOC of clockout  : signal is "B1";

Vielleicht noch eine nützlich Attribute, wenn du verhindern willst, dass 
Pins nur deswegen wegoptimiert werden, weil dein Design noch nicht 
fertig ist, kannst du folgende Zeilen verwenden:

attribute syn_keep : boolean;

attribute syn_keep of clkout : signal is true;

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


Lesenswert?

Steven () schrieb:
>>Was und wonach suchst du denn?
> Nach einem guten Einstieg
Der geht anders, du musst andere Fragen stellen. Wenn du nicht findest, 
welche Lib man einbinden muss, um einen Pin "anzusteuern", dann 
hauptsächlich deshalb, weil man eben keine Lib einbinden muss.

>>Welches Buch denn? Erwartest du darin die Lösung des Problems?
> Ja
Das war die Antwort auf die zweite Frage. Und: du wirst die Antwort in 
diesem Buch nicht finden...  ;-)

cfgardiner schrieb:
> ja, in deinem Code fehlt einfach die Zeile
>    attribute LOC        : string;
Das alles (und noch viel mehr) findet man auf der ersten Seite, wenn man 
mit Google nach den bisher gefallenen Begriffen sucht:
https://www.google.de/search?q=attribute+loc+lattice+diamond
Z.B. als Codebeispiel im Dokument
http://www.latticesemi.com/lit/docs/technotes/tn1091.pdf
unter Appendix A zusammen mit anderen Attributen (Pullup, Pulldown, 
OpenDrain...)

von cfgardiner (Gast)


Lesenswert?

Hi Steven,

noch etwas, schau dir bitte folgende *.csv Datei von der Lattice 
Webseite an.
http://www.latticesemi.com/dynamic/view_document.cfm?document_id=39442

Bei MachXO2, sind Bezeichner wie B1 eben nur die Pin Koordinate. In 
diesem Fall lautet der Bezeichner für die Pinbelegung "PL2A". Die 
Bezeichner stehen in Spalte 'B (Pin/Ball Function)' in der o.g. Datei.

d.h. dein Entity sollte wie folgt ausschauen:

Library IEEE;
Use IEEE.std_logic_1164.all;

entity myClock is

port(
  clockout: out std_logic );

  attribute LOC        : string;

  attribute LOC of clockout  : signal is "PL2A";

end myClock;

Wie du siehst, du brauchst nur die 1164'er Bibliothek. Ich würde auch 
'std_logic' statt 'bit' als Typ von deinem Ausgangssignal verwenden. Bit 
kann nur '0' oder '1' modellieren. std_logic dagegen kennt 9 Zustände
'0', '1', 'X' (undefined), 'U' (uninitialised), '-' (don't care), 'H' 
(weak high e.g. pull up), 'L' (weak low e.g. Pull down), 'Z' 
(tri-state), 'W' (weak undefined)

std_logic, std_logic_vector / std_ulogic, std_ulogic_vector erlauben 
eben ein genaueres modellieren des möglichen Signalverhaltens.

von Steven (. (ovular) Benutzerseite


Lesenswert?

danke @cfgardiner für die Tipps.

>Der geht anders, du musst andere Fragen stellen. Wenn du nicht findest,
>welche Lib man einbinden muss, um einen Pin "anzusteuern", dann
>hauptsächlich deshalb, weil man eben keine Lib einbinden muss.
Deswegen frag ich.

>Das war die Antwort auf die zweite Frage. Und: du wirst die Antwort in
>diesem Buch nicht finden...  ;-)
Gut das ich gefragt hab.

>Das alles (und noch viel mehr) findet man auf der ersten Seite, wenn man
>mit Google nach den bisher gefallenen Begriffen sucht:
Danke!

Gruß Steven

von Lattice User (Gast)


Lesenswert?

cfgardiner schrieb:
> Bei MachXO2, sind Bezeichner wie B1 eben nur die Pin Koordinate. In
> diesem Fall lautet der Bezeichner für die Pinbelegung "PL2A". Die
> Bezeichner stehen in Spalte 'B (Pin/Ball Function)' in der o.g. Datei.

Die Pinnummer, bzw Pinkoordinate ist ebenfalls erlaubt.

Beispiel aus dem Handbuch für den MachXO2:
1
--***Attribute Declaration***
2
ATTRIBUTE LOC : string;
3
--*** LOC assignment for I/O Pin***
4
ATTRIBUTE LOC OF input_vector: SIGNAL IS E3,B3,C3 ;

Das Handbuch enthält das Datenblatt und alle relevanten Technotes in 
einer PDF.
Die 1. Maßnahme bei Unklarheiten sollte doch das Durchforschen der 
Herstellerseite nach der Dokumentation sein.

von Steven (. (ovular) Benutzerseite


Lesenswert?

@Lattice User

werd mich dran halten in Zukunft.
Zudem war ich nicht fähig zu verstehen, das es Attribute gibt und wie 
ich sie ändern kann.

Gruß Steven

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.