EIn- und Ausgänge zusammenfassen(VHDL).

OP #2955358
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:)
#2955380
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!
OP #2955402
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!
Moderator (Firma: Titel) Persönliche Seite #2955505
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.
Gast #2955532
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.
#2955544
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[*]
...
OP #2956315
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?=)
#2956452
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);
Moderator (Firma: Titel) Persönliche Seite #2956747
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren