Forum: FPGA, VHDL & Co. EIn- und Ausgänge zusammenfassen(VHDL).


von GS (chromosoma)


Lesenswert?

Hallo.
Da bin wieder.
Ich wil man endlich  den SRAM auf meinem DE1 Board nutzen. Ist rein 
technisch nichts besonderes, aber

SRAM hat  18 Pins für die Adresse und noch 16 Pins für Dataflow.
Diese OUTPUTS und INOUTS wollte ich für die weitere elegante Nutzung 
zusammenfassen.
Anstatt von:

ADDR1<=ADRESSE(1),
ADDR2<=ADRESSE(2),
.
.
.
ADDRn<=ADRESSE(n),
wobei ADRESSE IS STD_LOGIC_VECTOR(n-1 downto 0) :))

Würde ich gerne sowas haben

ADDR <= ADRESSE;
Wobei ADDR is ein ARRAY , das alle ADDR-Engänge zusammenfasst.

Nun habe ich volgendes gemacht:
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.all;
3
USE ieee.numeric_std.all;
4
5
PACKAGE PRT  IS
6
TYPE ADDR IS ARRAY (0 to 17) OF STD_LOGIC;
7
TYPE DATA IS ARRAY (0 to 15) OF STD_LOGIC;
8
END PRT;

Und dann kommt die RAM Entity:
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.all;
3
USE ieee.numeric_std.all;
4
USE work.PRT.all;
5
6
ENTITY RAM IS
7
PORT(
8
ADRL: OUT ADDR;
9
DATL: INOUT DATA;
10
NUMBERR: OUT STD_LOGIC_VECTOR(15 downto 0);
11
SAVE:IN STD_LOGIC;
12
NUMBERW: IN STD_LOGIC_VECTOR(15 downto 0);
13
LOCATION:IN STD_LOGIC_VECTOR(17 downto 0);
14
CE,OE,WE: OUT STD_LOGIC;
15
CLK: IN STD_LOGIC
16
17
);
18
END RAM;
19
20
ARCHITECTURE MEM OF RAM IS
21
BEGIN
22
CE<='0';
23
PROCESS(CLK)
24
BEGIN
25
IF(CLK'EVENT AND CLK='1') THEN
26
IF(SAVE='1')THEN
27
WE<='0';
28
OE<='1';
29
ADRL<= LOCATION;
30
DATL<= NUMBERW;
31
ELSE 
32
WE<='1';
33
OE<='0';
34
ADRL<= LOCATION;
35
NUMBERR<= DATL;
36
END IF;
37
END IF;
38
END PROCESS;
39
END MEM;


Doch der Kompiler schimpft:"type identifiert LOCATION does not agree 
with with its usage as ADDR type"
Sieht so aus, als funktioniert meine geniale Idee nicht:)

Kann mir jemand da weiterhelfen, wie ioch meine Idee realisiere:)

von user (Gast)


Lesenswert?

wie wäre es mit einfach immer std_logic_vector verwenden?

von Georg A. (georga)


Lesenswert?

Warum nimmst du nicht gleich ein std_logic_vector, notfalls als Type?

von GS (chromosoma)


Lesenswert?

Bei PinAssigment darf ich einen PIN nicht als Teil eines Vectors 
nennen, zB als ADDR(1) etc
Aber als Teil eines Array geht es: zB ADDR[1]
Deswegen die Array-Geschichte:)

von No Y. (noy)


Lesenswert?

Hey ist zwar jetzt OT aber könntest du mir ein paar Fragen zum DE1 Board 
beanworten?

Bin momentan auch am überlegen mir es zu kaufen.

1. Sind die USB-Blaster Pins nach außen geführt damit man mal einen 
externen FPGA programmieren kann?

2. Würdest du es dir wieder kaufen?

3. Was hälst du von den Waveshare Altera Sets? 
http://www.ebay.de/itm/EP2C8-EP2C8Q208C8N-ALTERA-Cyclone-II-FPGA-Development-Board-20-Module-Kits-/261127484293?pt=LH_DefaultDomain_0&hash=item3ccc693385

4.Warum ist das DE1 aktuell obwohl es schon längst Cyclone IV und V 
gibt? Also kaufe ich mit dem DE1 veraltete Hardware?

5. Gibt es irgendwelche Vorteile beim DE0 gegenüber des DE1 außer das es 
ein Cyclone 3 ist?

6. Warum hast du dich für Altera entschieden und nicht Xilinx?

Achja bin momentan hier im Thread viel am Fragen stellen weil ich ein 
perfektes FPGA Anfänger Board suche:
Beitrag "Kann man so etwas als Dev-Board missbrauchen?"

Vielen Dank!

von Georg A. (georga)


Lesenswert?

> Bei PinAssigment darf ich einen PIN nicht als Teil eines Vectors

Ach Quark. Schau doch noch mal genau nach. Im Xilinx-UCF heisst das zB. 
addr<0>.

von GS (chromosoma)


Lesenswert?

No y. schrieb:
> Hey ist zwar jetzt OT aber könntest du mir ein paar Fragen zum DE1 Board
> beanworten?
>
> Bin momentan auch am überlegen mir es zu kaufen.
>
> 1. Sind die USB-Blaster Pins nach außen geführt damit man mal einen
> externen FPGA programmieren kann?

Nicht das ich das es 100% weiss, aber links vom USB-Blaster-Chip 
befinden sich 10 unbestetzte Pads. Darüber steht JP3. Ein USB Blaster 
hat ja bekanntlich auch 10 Pins. Vllt. ist das für die externe 
Programierung:)


> 2. Würdest du es dir wieder kaufen?

Ja, mir reicht es vollig aucs, DE1 hat sehr viel Spielraum, und selbst 
die rel. grösse VHDL Programme besetzen bei mir so um 1000-2000 LE. Mit 
knapp 19000 LE  auf DE1 bin ich für den nächsten 1-2 Jahren noch gut 
bedient:D

> 3. Was hälst du von den Waveshare Altera Sets?
> 
http://www.ebay.de/itm/EP2C8-EP2C8Q208C8N-ALTERA-Cyclone-II-FPGA-Development-Board-20-Module-Kits-/261127484293?pt=LH_DefaultDomain_0&hash=item3ccc693385
Für den Preis würde ich schon lieber ein fertiges Markenprodukt kaufen:) 
zB DE1 Board:))
Nicht das du es später ratest ob ein Fehler an dem Billig-Board oder 
doch an VHDL-Kode liegt.Außerdem hat das gelieferte FPGA nur 8000 LE...

> 4.Warum ist das DE1 aktuell obwohl es schon längst Cyclone IV und V
> gibt? Also kaufe ich mit dem DE1 veraltete Hardware?
Hm, weil es so billig ist?:)
> 5. Gibt es irgendwelche Vorteile beim DE0 gegenüber des DE1 außer das es
> ein Cyclone 3 ist?
DE0 hat zwar Cyclone III aber "nur" 15.5 kLE (DE1 hat fast 19 kLE)
DE0 hat kein SRAM:)
DE1 hat 3 Oszillatoren zur Auswahl(ob das eine grosse Rolle spielt, 
weiss ich aber nicht:)
DE1 ist meine Meinung nach um einiges besser.
> 6. Warum hast du dich für Altera entschieden und nicht Xilinx?
 Das Wort Altera kling für mich irgendwie freundlicher und sicherer:))
> Achja bin momentan hier im Thread viel am Fragen stellen weil ich ein
> perfektes FPGA Anfänger Board suche:
> Beitrag "Kann man so etwas als Dev-Board missbrauchen?"
>
> Vielen Dank!

von GS (chromosoma)


Lesenswert?

Georg A. schrieb:
>> Bei PinAssigment darf ich einen PIN nicht als Teil eines Vectors
>
> Ach Quark. Schau doch noch mal genau nach. Im Xilinx-UCF heisst das zB.
> addr<0>.

Stimmt! Nur das was unter PinAssignment mit [] gemeint ist, ist kein 
Array , sondern ein Vector.
Maaannnn, wer macht denn sowas:))

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


Lesenswert?

Anton R. schrieb:
> Bei PinAssigment darf ich einen PIN nicht als Teil eines Vectors
> nennen, zB als ADDR(1) etc
Das wäre aber arg blöde, denn viele Busse bestehen aus vielen Leitungen. 
Und ich behaupte mal frech (ohne die Altera SW zu kennen), dass das 
garantiert schon von der ersten Softwareversion an geht...

> Aber als Teil eines Array geht es: zB ADDR[1]
Na, dann sieh dir mal die Definition eines std_logic_vector an...
http://tams-www.informatik.uni-hamburg.de/vhdl/packages/ieee_1164/std_logic_1164.vhd
1
    TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <>) OF std_logic;

No y. schrieb:
> Hey ist zwar jetzt OT aber könntest du mir ein paar Fragen zum DE1 Board
> beanworten?
Bitte keine Threads kapern! Du kannst das ja per PN machen.

von Sigi (Gast)


Lesenswert?

>> Bei PinAssigment darf ich einen PIN nicht als Teil eines Vectors
>> nennen, zB als ADDR(1) etc
>Das wäre aber arg blöde, denn viele Busse bestehen aus vielen Leitungen.
>Und ich behaupte mal frech (ohne die Altera SW zu kennen), dass das
>garantiert schon von der ersten Softwareversion an geht...

Das kann Altera QuartusII (glaube mal) schon immer, wäre ja
schrecklich wenn nicht.

von P. K. (pek)


Lesenswert?

Klar geht das, z.B. so:
1
USB_DATA         : inout unsigned(7 downto 0);

und dann im .qsf:

set_location_assignment PIN_N21 -to USB_DATA[0]
set_location_assignment PIN_N20 -to USB_DATA[1]
...
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to USB_DATA[*]
...

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


Lesenswert?

Fazit: einfach im Constraints-File eine andere Klammer nehmen:
Was in VHDL led(3) ist, ist im Constraints-File led[3] (Altera) oder 
auch led<3> (Xilinx)...

von Harald (Gast)


Lesenswert?

No y. schrieb:
> 1. Sind die USB-Blaster Pins nach außen geführt damit man mal einen
>
> externen FPGA programmieren kann?

wozu sollte das gut sein?

von GS (chromosoma)


Lesenswert?

Ok, aber nehmen wir an ich will die Ausgänge doch  zusammenfassen=)
ZB
Gegeben OUT'S: A1,A2,A3,B1,B2,B3

Ich will daraus zwei verschiedene Busse basteln:

Bus1 besteht aus A1,A2,B2,B3.

Bus2 besteht aus A1,A3,B1,B2.

d.h. Bus1(1) soll A2 sein, Bus2(2) ist B1.

Und ich will, dass durch die Zuweisung:
WERT="0101"
Bus1<=WERT

entsprechende Leitungen auf 1 bzw 0 gesetzt werden.
Hier muss ich also doch irgendwie mir Arrays arbeit, ode nicht?=)

von Georg A. (georga)


Lesenswert?

Irgendwie ist mir unklar, was und wozu du das eigentlich haben willst. 
Kann es sein, dass das bei dir auch so ist? ;)

Wenn du Vectoren hast, kannst du Teile davon zu einem neuen mit Slices 
und dem & zusammenstellen. Also zB.

signal a,b,c: std_logic_vector(15 downto 0);

c<=a(3 downto 0)&b(3 downto 0)&a(15 downto 10)&b(1)&b(15);

von GS (chromosoma)


Lesenswert?

Ok, diesen Trick mit Slices wollte ich haben, für die Zukunft:)
Danke

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


Lesenswert?

Anton R. schrieb:
> Ok, diesen Trick mit Slices wollte ich haben, für die Zukunft:)
Das  du dir jetzt aber mit "Slices" da nicht den falschen Begriff 
merkst: Slices sind bei Xilinx Baugruppen innerhalb des FPGAs, keine 
VHDL Syntaxelemente.
Das, was da steht, ist ein "Concatenation-Operator", zu deutsch in etwa 
ein "Verkettungs-Operator" oder "Verknüpfungs-Operator".

> Bus1 besteht aus A1,A2,B2,B3.
> Bus2 besteht aus A1,A3,B1,B2.
> d.h. Bus1(1) soll A2 sein, Bus2(2) ist B1.
Das ist eine blöde Reihenfolge der Durchnummerierung. Gewöhn dir am 
besten gleich die "links-ist-der-höchste-Wert" Methode an. Die wird 
weltweit verwendet...


Georg A. schrieb:
> c<=a(3 downto 0)&b(3 downto 0)&a(15 downto 10)&b(1)&b(15);
Das ist m.E. die falsche Richtung....

> Bus1 besteht aus A1,A2,B2,B3.
> WERT="0101"
> Bus1<=WERT
Gesucht ist also eher sowas:
 b(3)&b(2)&a(2)&a(1) <= "0101";
Und das geht leider nicht. Auch nicht mit Alias oder sonstigen 
Tricks...

von GS (chromosoma)


Lesenswert?

Danke Lothar.
Wie immer eine sehr informative und ausführliche Antwort von dir.
Du hast recht ich brauche genau das, was du am Ende geschrieben hast. 
Schade nur, dass das nicht  geht.

von Georg A. (georga)


Lesenswert?

Mit Slice meinte ich das Konstrukt "a(3 downto 0)" etc. "Konkatenierung" 
wollte ich noch nicht einführen ;)

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.