Forum: FPGA, VHDL & Co. Quartus: IO-Standard und Pin Loc im Sourcefile festlegen?


von Klaus (Gast)


Lesenswert?

Moin!

Gibt es einen Weg über attribute oder ähnliches den IO-Standard und Pin 
Location von Top-Level-Ports im vhdl-Quelltext festzulegen? Ich benutze 
zur Zeit Quartusversion 11.0

Ich habs mit
attribute altera_attribute: string;
attribute altera_attribute of DATA_IN:signal is "-name IO_STANDARD 
LVDS";
versucht. Aber das scheint keine Auswirkungen zu haben.


Und damit es nicht zu einfach wird: Das ganze auch noch für einzelne 
Signale eine Vectors. Rein Syntaktisch geht das, indem man jedem 
Vektorelement einen alias gibt. Aber verstehen das die Quartus Synthese?

von cfgardiner (Gast)


Lesenswert?

Hier eine Suchanwiesung für die Altera Webseite:
http://www.altera.com/search?output=xml_no_dtd&sort=date%3AD%3AL%3Ad1&client=www_frontend&proxystylesheet=www_frontend&ie=UTF-8&oe=UTF-8&site=www&q=vhdl%20attribute%20pin%20location

S. auch Kap. 5 in 
http://www.altera.com/literature/hb/qts/qts_qii51008.pdf?GSA_pos=4&WT.oss_r=1&WT.oss=vhdl%20attribute%20pin%20location

Oder als Beispiel:
entity my_entity is
port(
my_pin1: in std_logic
);
end my_entity;
architecture rtl of my_entity is
attribute useioff : boolean;
attribute useioff of my_pin1 : signal is true;
attribute chip_pin : string;
attribute chip_pin of my_pin1 : signal is "C1";
begin -- The architecture body
end rtl;

Viel Erfolg,
Charles

von Marius W. (mw1987)


Lesenswert?

Constraints im VHDL sind aber ganz ganz eklig. VHDL sollte so weit wie 
möglich plattformunabhängig sein, damit der Code portabel bleibt.

Gruß
Marius

von Klaus (Gast)


Lesenswert?

Ok, also wenn ich das Attribut auf den ganzen Vektor anwende, geht es. 
Das Problem ist, ich müsste das für einzelne Vektorelemente machen.

Das geht:
1
entity Test is
2
   Port(
3
      DATA_IN : in std_logic_vector(4 downto 0)
4
   );
5
end Test;
6
7
architecture bla of Test is
8
  attribute altera_attribute: string;
9
  attribute altera_attribute of DATA_IN:signal is "-name IO_STANDARD LVDS";
10
begin
11
  ...
12
end bla;

Das geht nicht:
1
entity Test is
2
   Port(
3
      DATA_IN : in std_logic_vector(4 downto 0)
4
   );
5
end Test;
6
7
architecture bla of Test is
8
  alias Data0:std_logic is DATA_IN(0);
9
10
  attribute altera_attribute: string;
11
  attribute altera_attribute of Data0:signal is "-name IO_STANDARD LVDS";
12
begin
13
  ...
14
end bla;

Ist das so richtig? Warum erkennt Quartus das attribut nicht?

von P. K. (pek)


Lesenswert?

Warum hast Du so 'ne Abneigung gegen das *.qsf?
Dort kannst Du doch alles ganz einzeln machen...

von Klaus (Gast)


Lesenswert?

Peter K. schrieb:
> Warum hast Du so 'ne Abneigung gegen das *.qsf?
> Dort kannst Du doch alles ganz einzeln machen...

Weil ich ganz verrückte Sachen mache ;-) Das Topleveldesign wird 
automatisch aus xml-Datein ,die die verwendeten Features beschreiben, 
generiert. Glaub mir einfach, dass ich gründe habe, bestimmte 
assignments in den Code schreiben zu wollen :-)

von berndl (Gast)


Lesenswert?

Klaus schrieb:
> Peter K. schrieb:
>> Warum hast Du so 'ne Abneigung gegen das *.qsf?
>> Dort kannst Du doch alles ganz einzeln machen...
>
> Weil ich ganz verrückte Sachen mache ;-) Das Topleveldesign wird
> automatisch aus xml-Datein ,die die verwendeten Features beschreiben,
> generiert. Glaub mir einfach, dass ich gründe habe, bestimmte
> assignments in den Code schreiben zu wollen :-)

ah ja. Und du bist nicht in der Lage, aus deinem xml eine sinnvolle 
design-constraints file zu erzeugen? Hint: Da koennte man dann auch noch 
weitere Infos wie timing-constraints, driver-level, ... eintragen. Und 
das waere dann schoen Chip-spezifisch.
Und beim constraints-file reicht i.A. 1 Zeile. In VHDL musst du immer 
mehr als eine Zeile fuer den gleichen Zweck erzeugen...

Aber du magst ja deine Gruende dafuer haben...

von Klaus (Gast)


Lesenswert?

berndl schrieb:
> ah ja. Und du bist nicht in der Lage, aus deinem xml eine sinnvolle
> design-constraints file zu erzeugen? Hint: Da koennte man dann auch noch
> weitere Infos wie timing-constraints, driver-level, ... eintragen. Und
> das waere dann schoen Chip-spezifisch.
> Und beim constraints-file reicht i.A. 1 Zeile. In VHDL musst du immer
> mehr als eine Zeile fuer den gleichen Zweck erzeugen...
>
> Aber du magst ja deine Gruende dafuer haben...

Es ist einfach so, dass wenn das mit den attributes funktioniert, es 
eine Menge Zeit spart, hier die Buildskripte anzupassen.

So, und hat nun evtl. noch jemand einen Hinweis zum eigentlichen Thema? 
:-)

von P. K. (pek)


Lesenswert?

Klaus schrieb:
> So, und hat nun evtl. noch jemand einen Hinweis zum eigentlichen Thema?

Ist einfach so, dass es auf gut neudeutsch "best practice" ist, das mit 
Cosntraints-Files zu lösen. Und darum wirst Du nicht sehr viele Leute 
finden, die wissen, wie man Attributes auf das Letzte ausreizt.

Wenn Du aber mit einem Workaround zufrieden bist (und das wirst Du sein, 
wenn Du den Aufwand scheust, die Build-Skripte anzupassen), dann nimm 
doch die fraglichen Busse auf dem Toplevel auseinander und mach 
Teilbusse oder Einzelsignale daraus, dann gibst Du jedem sein Attribut. 
Intern kannst Du sie ja dann wieder zusammenführen. Nicht überaus schön, 
aber funktional.

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


Lesenswert?

Klaus schrieb:
> Das Problem ist, ich müsste das für einzelne Vektorelemente machen.
Und was ist, wenn du das nicht über einen Alias machst, sondern 
direkter:
1
  attribute altera_attribute of DATA_IN(0):signal is "-name IO_STANDARD LVDS";

von Klaus (Gast)


Lesenswert?

Lothar Miller schrieb:
> attribute altera_attribute of DATA_IN(0):signal is "-name IO_STANDARD LVDS";

Das war natürlich mein erster Versuch :-) Quartus bringt dann die 
Meldung, dass die VHDL Syntax es nicht erlaubt, einzelnen 
Array-Elementen ein Attribut zuzuordnen

Quartus meckerte:
>


@Peter K. (pek): Es ist immer schön, wenn  man die ultimative Wahrheit 
kennt, nicht wahr? ;-) Ich hab hier ein XML, dass alle 
hardwareabhängigen Dinge beschreibt und eins, dass die internen Features 
beschreibt. Ob in den daraus generierten Files dann irgendwo Attribute 
auftauchen, oder nicht, interessiert den lieben Gott überhaupt nicht ;-) 
Und da ich in der realen Welt lebe und Projektzeit kostbar ist, hab ich 
nach nem schnellen Weg gesucht das Problem zu lösen. Wenns nicht geht, 
ok, dann müssen die Softwerker ebend doch die Buildtools anpassen. Btw.: 
Warum schreibt du nicht mal an Altera, wie die es nur wagen können 
Attribute in ihre Toolchain einzubauen. Sowas macht man schließlich 
nicht! (Nicht zu ernst nehmen bitte ;-) )

von Klaus (Gast)


Lesenswert?

Sorry, Fehlermeldung vergessen:

Quartus meckerte:
> Error (10612): VHDL attribute error at acA2000_u.vhd(875): Attribute
> specification contains illegal name


Und aus der Altera Quartus Hilfe:
> To set attributes on an array slice, use an alias to define a name for the
> slice and use this (now legal) name in the Attribute Specification.

von P. K. (pek)


Lesenswert?

Klaus schrieb:
> @Peter K. (pek): Es ist immer schön, wenn  man die ultimative Wahrheit
> kennt, nicht wahr? ;-) Ich hab hier ein XML, dass alle
> hardwareabhängigen Dinge beschreibt und eins, dass die internen Features
> beschreibt. Ob in den daraus generierten Files dann irgendwo Attribute
> auftauchen, oder nicht, interessiert den lieben Gott überhaupt nicht ;-)
> Und da ich in der realen Welt lebe und Projektzeit kostbar ist, hab ich
> nach nem schnellen Weg gesucht das Problem zu lösen. Wenns nicht geht,
> ok, dann müssen die Softwerker ebend doch die Buildtools anpassen.

Nicht so giftig, Colega ;-). Habe Dir ja einen Lösungsvorschlag 
pfannenfertig serviert. Dann drösel halt den Buss auf dem Toplevel auf, 
und setz' die Attribute.

von Klaus (Gast)


Lesenswert?

Sorry, sollte nicht giftig rüber kommen ;-)

Fazit des Threads: Es gibt nur die Möglichkeiten Buss ausdröseln, oder 
den Tools beibringen, ins .qsf zu schreiben.

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.