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
LIBRARYieee;
2
USEieee.std_logic_1164.all;
3
USEieee.numeric_std.all;
4
5
PACKAGEPRTIS
6
TYPEADDRISARRAY(0to17)OFSTD_LOGIC;
7
TYPEDATAISARRAY(0to15)OFSTD_LOGIC;
8
ENDPRT;
Und dann kommt die RAM Entity:
1
LIBRARYieee;
2
USEieee.std_logic_1164.all;
3
USEieee.numeric_std.all;
4
USEwork.PRT.all;
5
6
ENTITYRAMIS
7
PORT(
8
ADRL:OUTADDR;
9
DATL:INOUTDATA;
10
NUMBERR:OUTSTD_LOGIC_VECTOR(15downto0);
11
SAVE:INSTD_LOGIC;
12
NUMBERW:INSTD_LOGIC_VECTOR(15downto0);
13
LOCATION:INSTD_LOGIC_VECTOR(17downto0);
14
CE,OE,WE:OUTSTD_LOGIC;
15
CLK:INSTD_LOGIC
16
17
);
18
ENDRAM;
19
20
ARCHITECTUREMEMOFRAMIS
21
BEGIN
22
CE<='0';
23
PROCESS(CLK)
24
BEGIN
25
IF(CLK'EVENTANDCLK='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
ENDIF;
37
ENDIF;
38
ENDPROCESS;
39
ENDMEM;
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:)
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:)
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!
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!
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:))
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
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.
>> 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.
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)...
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?=)
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);
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...
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.