Forum: FPGA, VHDL & Co. Spartan 3AN Constraints Problem


von André D. (glynx)


Lesenswert?

Moin

Ich hab nun seit ca. 3 Tagen mein Spartan 3AN Testboard und bin damit 
eigentlich auch recht zufrieden, hab mittlerweile die Toolchain 
eingerichtet und auch mal zwei einfache Testschaltungen in VHDL 
geschrieben.
Jetzt wollte ich mal die Taster verwenden (davor hab ich nur die 
Schalter verwendet beim 1. Test). Ich hab also in die Constraints wie 
folgt eingerichtet für den Test:
1
# kA was das genau bewirkt, ist aus der default uebernommen...
2
CONFIG VCCAUX = "3.3" ;
3
CONFIG ENABLE_SUSPEND = "FILTERED" ;
4
CONFIG POST_CRC = "DISABLE" ;
5
6
# LED Vector
7
NET "LED<0>"        LOC = "R20"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
8
NET "LED<1>"        LOC = "T19"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
9
NET "LED<2>"        LOC = "U20"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
10
NET "LED<3>"        LOC = "U19"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
11
NET "LED<4>"        LOC = "V19"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
12
NET "LED<5>"        LOC = "V20"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
13
NET "LED<6>"        LOC = "Y22"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
14
NET "LED<7>"        LOC = "W21"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
15
16
# Beispielsweise der South Button
17
NET "BTN_SOUTH"     LOC = "T15"  | IOSTANDARD = LVCMOS33 | PULLDOWN ;

Jetzt hab ich ein einfaches modul in VHDL geschrieben um die Schaltung 
zu implementieren:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity eq is
5
    Port (
6
    LED : out std_logic_vector(7 downto 0);
7
    BTN_SOUTH : in std_logic_vector(0 downto 0)
8
   );
9
end eq;
10
11
architecture Behavioral of eq is
12
begin
13
  LED <= "11111111" when BTN_SOUTH = "1" else "00000000";
14
end Behavioral;

Mein Problem ist nun jedoch, dass das Synthetisieren funktioniert, aber 
beim Translate bekomm ich folgende Fehlermeldung:
1
ERROR:ConstraintSystem:59 - Constraint <PULLDOWN ;> [s3astarter.ucf(27)]: NET "BTN_SOUTH" not found.  Please verify that:
2
   1. The specified design element actually exists in the original design.
3
   2. The specified object is spelled correctly in the constraint source file.

Jetzt frag ich mich einfach, wie kann ich das geradebiegen...in dem Buch 
was ich mir geholt hab ("FPGA prototyping by VHDL examples") hab ich bis 
jetzt noch nichts Hilfreiches für das Problem gelesen :/

Ich verwende als Setup hier:
Ubuntu 9.10
ISE 11.1
Spartan 3AN Testboard von Xilinx (aber das tut ja gerade nichts zur 
Sache ;))

Wäre wirklich cool wenn jemand mir da mal etwas helfen könnte...hab nun 
schon 3 Std erfolglos gegoogelt und nichts gefunden, außer einem Thread 
im Xilinx board, wo es aber um nicht benutzte Constraints ging, die hier 
eigentlich ja nicht auftreten sollten :/

MfG André

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


Lesenswert?

> BTN_SOUTH : in std_logic_vector(0 downto 0)
Der Button dürfte wahrscheinlich kein Vektor sein   :-o

Probiers mal so:
> BTN_SOUTH : in std_logic

Oder alternativ pass das UCF an:
NET "BTN_SOUTH<0>"     LOC = "T15"  | IOSTANDARD = LVCMOS33 | PULLDOWN ;
(Nein, lass das. Das war nur ein Scherz ;-)

von André D. (glynx)


Lesenswert?

Ich hab auch keine Ahnung warum das nen Vektor sein soll, wenn ich es 
jedoch als Boolean übernehme, bekomm ich die Meldung, dass es sich bei 
dem BTN_SOUTH nicht um einen boolean handle.
Gibts iwie ne Möglichkeit herauszufinden was es denn ist?

Schonma danke für deine Mühe, auch wenn es mich gerade net weiter 
bringt.

MfG André

von André D. (glynx)


Lesenswert?

Noch als kurzer Anhang, der Code sieht wenn ich normale bools verwende 
so aus:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity eq is
5
    Port (
6
    LED : out std_logic_vector(7 downto 0);
7
    BTN_SOUTH : in std_logic
8
   );
9
end eq;
10
11
architecture Behavioral of eq is
12
begin
13
  LED <= "11111111" when BTN_SOUTH else "00000000";
14
end Behavioral;

trotzdem bekomme ich wie gesagt nen Fehler, der lautet genau:
1
ERROR:HDLParsers:802 - "/ichBinEinPfad/eq.vhd" 
2
Line 14. BTN_SOUTH is not a boolean expression.
3
4
ERROR:HDLParsers:826 - "/idhBinEinPfad/eq.vhd" 
5
Line 14. When condition BTN_SOUTH is not of type BOOLEAN.

MfG André

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


Lesenswert?

> BTN_SOUTH nicht um einen boolean
Häh? Wer hat hier jetzt was von einem boolean geschrieben?
Woher kommt jetzt der boolean?

Machs dir doch einfach:
Es gibt in der harten Realität nur die Datentypen std_logic, 
std_logic_vector, signed, unsigned und integer. Und natürlich selbst 
definierte für Statemachines.

Aber keine bit, bit_vector, boolean ...

> Gibts iwie ne Möglichkeit herauszufinden was es denn ist?
BTN_SOUTH ist genau das, was du sagst, das es sein solle. Und es gibt 
nur 1 brauchbare Möglichkeit, die für die Synthese in Frage kommt: 
std_logic.

EDIT:
Die Fehlermeldung sagt es schon:
>>> BTN_SOUTH is not a boolean expression <<<
Ist es ja auch nicht, es ist ein std_logic. Vergiss die impliziten 
Konstrukte der C-Programmierung. Du machst hier VHDL. Und da mußt du 
explizit vergleichen:
1
   LED <= "11111111" when BTN_SOUTH = '1' else "00000000";
Hier wird BTN_SOUTH explizit mit '1' verglichen. Das Ergebnis dieses 
Vergleichs ist boolean (true/false). Und when braucht ein boolean.

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.