Forum: FPGA, VHDL & Co. Signale Initialisieren


von Eddy H. (Firma: student) (eddy_2007)


Lesenswert?

hallo alle,

ich habe ein Entity definiert und ein Komponent, diese Konponent habe 
ich 6 mal initialisiert und da gibt auch kein Prob.

ich will aber dass bestimmte eingänge von einem Register initialisieren,
diese Eingänge sind dann auch die selben der Komponent wie kann ich das 
machen,:

Entity mux is
   port(N : in  STD_LOGIC_VECTOR(0 to 5);
       COM :out STD_LOGIC_VECTOR(0 to 5));
   signal EN_M : STD_LOGIC_VECTOR(0 to 5) := "000000";
   signal A_IC0: STD_LOGIC_VECTOR(0 to 2) := "000";

   signal reg  : STD_LOGIC_VECTOR(0 to 15):= x"0000";
end mux;

architecture arch of mux is
   component IC
     port(N  :in STD_LOGIC_VECTOR(0 to 5);
         COM :out STD_LOGIC);
    --signal EN : STD_LOGIC;                 --hier bekomme ich eine 
fehler
    --signal A  : STD_LOGIC_VECTOR(0 to 2);  --dass es nicht zugelassen 
ist
  end component IC;

beginn

EN_M  <= reg(0 to 5);
A_IC0  <= reg(6 to 8);
A_IC1  <= reg(9 to 11);
A_IC2  <= reg(12 to 14);
A_IC3  <= reg(15 to 17);
A_IC4  <= reg(18 to 20);
A_IC5  <= reg(21 to 23);

--instantierung der komponent IC 6 mal

IC0 :IC
port map ( Clk => CLK_M,
    RST => RST_M,
  --EN   => EN_M(0), wie kann ich das für Signale machen was man 
normaler weise für Ports mit portmapping macht
  --A   => A_IC0,
    N   => N_M,
    COM => COM_M(0)
.........
.....
IC6 :IC
port map ( Clk => CLK_M,
    RST => RST_M,
  --EN   => EN_M(0),
  --A   => A_IC0,
    N   => N_M,
    COM => COM_M(0)

von Thomas H. (mac4ever)


Lesenswert?

Erstmal vorweg: Versuch das nächste Mal mit formatiertem Text zu 
arbeiten. Der einfachste Weg ist es den BBCode vom Forum zu nutzen.

Als einzigen Ratschlag gebe ich Dir: Lern VHDL! Lies ein Buch!
Der Text den Du da gepostet hast ist absoluter Schwachsinn. Eine 
Fehlersuche ist absolut unsinnig, denn ich sehe überall Fehler.

Allein das hier:
1
Entity mux is
2
   port(N : in  STD_LOGIC_VECTOR(0 to 5);
3
       COM :out STD_LOGIC_VECTOR(0 to 5));
4
   signal EN_M : STD_LOGIC_VECTOR(0 to 5) := "000000";
5
   signal A_IC0: STD_LOGIC_VECTOR(0 to 2) := "000";
6
   signal reg  : STD_LOGIC_VECTOR(0 to 15):= x"0000";
7
end mux;
Eine Signaldefinition im Entity? Wo hast Du sowas denn gelernt? Wenn 
überhaupt, dann kommt die in die architecture ...

von R.D. (Gast)


Lesenswert?

>STD_LOGIC_VECTOR(0 to 5)

"0 to 5" ? Noch nie gesehen!

von Thomas H. (mac4ever)


Lesenswert?

Ist aber korrekt ... (5 downto 0)  nur anders herum

von user (Gast)


Lesenswert?

Hallo,

einige Tips

1. ich würde die Vektoren mit (5 downto 0) definieren.
   Dann ist das höchstwertig Bit links.

2. Richtung von EN_M, A_ICO und reg als "in" oder "out" oder zur
   Not auch "inout" festlegen.


Eine entity wird im Allgemeinen so festgelegt:
1
Entity mux is
2
   port (
3
     N     : in  STD_LOGIC_VECTOR(5 downot 0);
4
     COM   : out STD_LOGIC_VECTOR(5 downto 0);
5
     EN_M  : in  STD_LOGIC_VECTOR(5 donwto 0);
6
     A_IC0 : in  STD_LOGIC_VECTOR(2 downto 0);
7
     reg   : out STD_LOGIC_VECTOR(15 downto 0)
8
   )
9
end mux;


In deiner componente erscheint das Wort "signal"
das muß raus. Wird ähnlich definiert wie die
entity nur mit dem Schlüsselwort "component".
Darin auch die Richtungen der Signale definieren.
Außerdem fehlt das Signal "rst" welches du weiter unten
zuweist.


Den Tip von Thomas Hertwig kann ich dir nur
empfehlen. Lern VHDL, lies ein Buch, schau
dir verschiedenene funktionierene Quellcodes
an. Da lernt man am besten.


Gruß

Ralf

von Kuckuck (Gast)


Lesenswert?

welchen Editor nutzt du? es gibt etliche mit vhdl syntax highlighting 
und
beautify. damit erkennt man schnell einfache syntaxfehler. 
beispielsweise
sind oben einige Downto falsch geschrieben, und daher auch nicht grün.

von Eddy H. (Firma: student) (eddy_2007)


Lesenswert?

hallo und danke an alle erstmal.
ich bin ziemlich am lernen das sind Aufgaben von der Uni...etc

> Allein das hier:
1
> Entity mux is
2
>    port(N : in  STD_LOGIC_VECTOR(0 to 5);
3
>        COM :out STD_LOGIC_VECTOR(0 to 5));
4
>    signal EN_M : STD_LOGIC_VECTOR(0 to 5) := "000000";
5
>    signal A_IC0: STD_LOGIC_VECTOR(0 to 2) := "000";
6
>    signal reg  : STD_LOGIC_VECTOR(0 to 15):= x"0000";
7
> end mux;
8
>
> Eine Signaldefinition im Entity? Wo hast Du sowas denn gelernt? Wenn
> überhaupt, dann kommt die in die architecture ...

@ hartwig , @ user : die Signale Deklaration in der Entity habe ich auch 
zum ersten mal gesehen und wollte ich es versuchen, und es hat geklappt. 
ich meine der Code ist synthetisierbar, weiss aber nicht ob er arbeiten 
würde wie gewünscht:

wie man sagt man lernt mit über und das versuche ich: auf ein Tutorial 
von Uni Ulm habe ich diese Art von deklaration gefunden:

http://mikro.e-technik.uni-ulm.de/vhdl/anl-engl.vhd/html/node26.html

schaut einfach in der Beipiel da unten, ich habe es jetzt letztendlich 
in der Architektur gemacht aber ich wollte es einfach probieren und 
andere Meinungen hören, der Labor Betreuer hat gelacht als er das 
gesehen hat aber dann als ich ihm den Link gezeigt... er hat gemeint er 
beschöftigt sich seit 10 JAhren mit VHDL und er hat es noch nie 
gesehen...

>
> 1. ich würde die Vektoren mit (5 downto 0) definieren.
>    Dann ist das höchstwertig Bit links.
>
> 2. Richtung von EN_M, A_ICO und reg als "in" oder "out" oder zur
>    Not auch "inout" festlegen.
>
>
> Eine entity wird im Allgemeinen so festgelegt:
>
>
1
> Entity mux is
2
>    port (
3
>      N     : in  STD_LOGIC_VECTOR(5 downot 0);
4
>      COM   : out STD_LOGIC_VECTOR(5 downto 0);
5
>      EN_M  : in  STD_LOGIC_VECTOR(5 donwto 0);
6
>      A_IC0 : in  STD_LOGIC_VECTOR(2 downto 0);
7
>      reg   : out STD_LOGIC_VECTOR(15 downto 0)
8
>    )
9
> end mux;
10
>
>
>
> In deiner componente erscheint das Wort "signal"
> das muß raus. Wird ähnlich definiert wie die
> entity nur mit dem Schlüsselwort "component".
> Darin auch die Richtungen der Signale definieren.
> Außerdem fehlt das Signal "rst" welches du weiter unten
> zuweist.
> Ralf

@ danke Ralf

es ist genau das mein Problem was du hier angesprochen hast.

mein Komponent soll 2 Signale haben EN und A_IC und diese Signale sollen 
von der entity gelesen werden...
jetzt habe ich eine bessere Vorstellung, du meinst ich definiere sie als 
IN oder Out (in meinem Fall IN) und dann sollen von der Signale der 
Entity EN_M(0) und IC0 gelesen werden !!!!!
das hat mir gefehlt, ich wusste nicht dass es möglich wäre dass Ports 
(in meinem Fall der Komponente) von Signale gelesen werden könnten (hier 
von Signale der Entity EN und A_IC0).

jeder der die Deklaration der Signale innerhalb der Entity gesehen hat 
hat ein Gesicht gezeigt :-)
ich dachte wirklich es ist ein Weg denn ich nicht kenne, ich bin am 
Lernen von VHDL,
heute war nich lustiger ich habe der Professor diese Deklaration gezeigt 
und er antwortete,"glaub nicht alles was im Bücher und tutorial steht!"
das finde ich lustig ich habe mit gedacht jetzt soll ich ihm kein Wort 
mehr von der Vorlesungen glauben heheheh---> ist ein Scherz

danke alle

@Ralf ich probiere diese alternative...

LG
Eddy

von user (Gast)


Lesenswert?

@Kuckuck

ich benutze den XEmacs mit VHDL-Mode.

Das obige Beispiel hab ich nur mal
auf die schnelle eingetippt.
Ich entschuldige mich für die Syntax-Fehler.
War heute morgen noch nicht ganz wach ;-).

Gruß

Ralf

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.