VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Was ist hier falsch?

Anfang   zurück   weiter   Ende
Autor Beitrag
nobbe
Junior-Mitglied


Beiträge: 14

New PostErstellt: 24.01.06, 20:51  Betreff: Was ist hier falsch?  drucken  Thema drucken  weiterempfehlen Antwort mit Zitat  

Hi Leute ich bekomme immer folgenden Fehler wenn ich meine Schaltung syhtentisieren willl:
    Zitat:
    Compiling vhdl file "D:/geschäft/05027/scripte/PWM_OUT/main.vhd" in Library work.
    Entity
    compiled.
    ERROR:HDLParsers:854 - "D:/geschäft/05027/scripte/PWM_OUT/main.vhd" Line 51. The expression can not be converted to type unsigned.
Code sind folgendermaßen in Line 51 aus
    Zitat:
    dip_int := to_integer(unsigned(Dip));
Die "dip_int" ist als variable integer und der "DIP" als "bit_vector(3 downto 0);" defeniert.

Hat da jemand eine Idee?

Habe mal den ganzen Code angehängt...

(Ich hatte das Thema schon mal im Anfängerforum, aber da habe ich nicht gewusst wie's geht, jetzt habe ich ja nen Fehler im Syntax, deshalb jetzt hier )

Hoffe Ihr könnt mir helfen!

greeez


[editiert: 29.01.06, 15:49 von nobbe]



Dateianlagen:

main.vhd (1 kByte)
anzeigen - speichern
Datei wurde schon 358-mal heruntergeladen.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
nobbe
Junior-Mitglied


Beiträge: 14

New PostErstellt: 24.01.06, 20:57  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

während ich den post geschrieben habe ist mir ein licht aufgeangen.....

habs jetzt rausgefunden, warum das bei mir net getan hat, habe aus dem bit_vector jetzt mal ein std_logic_vector gemacht und scho tuts....
jetzt muss mir das nur noch jemand erklären.


[editiert: 24.01.06, 20:57 von nobbe]
nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
xGCFx
Stammgast


Beiträge: 33
Ort: Dresden

New PostErstellt: 24.01.06, 22:08  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

Ich denke, die Funktion unsigned ist nur für std_(u)logic Werte definiert (zumindestens laut meinem Buch hier). Daran wird es wohl liegen.

Generell ist es vorteilhafter, sowieso diese Typen zu benutzen.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
nobbe
Junior-Mitglied


Beiträge: 14

New PostErstellt: 24.01.06, 22:24  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

ok...welches buch hast du denn?

so hab jetzt mitlerweile das nexte problem:

Bekomme folgenden Fehler:
    Zitat:
    Analyzing Entity
    (Architecture ).
    ERROR:Xst:769 - "D:/geschäft/05027/scripte/PWM_OUT_V1.0/main.vhd" line 76: Operator must have constant operands or first operand must be power of 2
soweit ich das rausgelesen habe hat er ein problem das ich folgendes mache:
    Zitat:
    DIP1_int := to_integer(unsigned(DIP1));
    pulsdauer := 6 * DIP1_int;

    DIP2_int := to_integer(unsigned(DIP2));
    frequenz := 6 * DIP2_int;
    .
    .
    .
    if frequenz_count < ((frequenz / 100)* pulsdauer) then
    .
    .
darf ich die zahl nur einmal verändern, oder ist sie zu groß zum dividieren?
was kann da machen? gibt es einen zahlentyp, der auch kommas kann? dann könnt ich statt durch 100 zu teilen einfach nur mit 0,06 multiplizieren

hier der volle code im anhang



Dateianlagen:

main_1.vhd (2 kByte)
anzeigen - speichern
Datei wurde schon 338-mal heruntergeladen.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
xGCFx
Stammgast


Beiträge: 33
Ort: Dresden

New PostErstellt: 24.01.06, 22:53  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

Ich denke, es liegt an der Division. Wie wäre es wenn du diese weg lässt, und es so schreibst:

if (frequenz_count*100) < (frequenz* pulsdauer) then

ist das nicht genau das selbe? Und es lässt sich anstandslos synthetsieren....

Oder du zählst frequenz_count immer um 100 hoch, nicht um 1. Dann kannst du dir doch auch die Multiplikation um 100 sparen, oder?

Achso: Ich hab vorhin ins Buch 'VHDL-Synthese' geschaut. Aber auch der 'Designers Guide to VHDL' is da immer gut zum Nachschlagen.


[editiert: 24.01.06, 23:05 von xGCFx]
nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
nobbe
Junior-Mitglied


Beiträge: 14

New PostErstellt: 24.01.06, 23:50  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

ja ok, das ist eine idee... die tzut auch, habe ich total übersehen...sorry.

jetzt wollt ich grad noch nen großes aber sagen, aber mir ist gerade die lösung für mein nextes problem eingefallen...man macht das spaß wenn man endlich selber auf die lösungen kommt

danke für eure hilfe!

greez

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
nobbe
Junior-Mitglied


Beiträge: 14

New PostErstellt: 29.01.06, 15:49  Betreff: Re: [gelöst] Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

ich habe da mal wieder das gleiche problem mit dem divid ...
habe schon verschiedenes versucht, aber ich finde keine lösung....
vielleicht findet ihr ja eine

ich habe eine schleife, wo zu einer variavle "zaeh_ges" immer +1 addiert wird, danach soll in einem andere process ein pwm erzeugt werden, mit folgender bedingung
"frequenz_count * 100 <(5000000 / zaeh_ges) * zaeh_up)"

habe jetzt auch schon so versucht:

"frequenz_count*100*zaeh_ges < 5000000 * zaeh_up" da das ja das letzte mal ja ausch schon geklappt hat(siehe oben)...aber irgendwe hat es sich in mir schon gestreubt, da es ja ein "<" ist und kein "="
Die 5000000 kommen daher, das ich ja die Milisekunden haben will und ich das Signal mit einer CLK von 5000000 abtaste.
Also "Zeit = gezaehlte_impulse / Abtastrate"


momenat steht alles noch in einer architecture, habe mir aber schon überlegt ob es was bringen würde, wenn ich die einzelnen processe in eine eigene architecture legen würde.

Ich hoffe ihr versteht wo mein problem ist....

hier ist mal der gesammte code...bis auf teile, die in diesem fall nicht relevant sind (also nicht über das entity wundern)


greez
nobbe



Dateianlagen:

main.vhd (7 kByte)
anzeigen - speichern
Datei wurde schon 330-mal heruntergeladen.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
xGCFx
Stammgast


Beiträge: 33
Ort: Dresden

New PostErstellt: 30.01.06, 23:10  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

Wie wäre es wenn du nen Taktteiler erstellst, der den Takt auf 1kHz (T = 1ms) teilt? Mit dem könntest du die Zähler ansteuern. Und würdest dir die Division sparen.

Hab mir aber deinen Quelltext noch nicht angeschaut, da ich kurz angebunden bin. Generell sind Divisionen nicht einfach so synthetisierbar.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
nobbe
Junior-Mitglied


Beiträge: 14

New PostErstellt: 31.01.06, 08:51  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

hört sich im ersten augenblick gut an, aber .....
hmm jetzt komm ich ins grübeln...muss mir das nochmals anschauen, ob das so geht...bin grad auf arbeit und habe grad ein anderes projekt...mal heute mittag anschauen, wenn ich mehr zeit habe.

wäre aber nett wenn du mal meinen code anschauen könntest.

greez

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
pzwack
Registrierter Benutzer


Beiträge: 4

New PostErstellt: 01.02.06, 20:07  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

    Zitat: nobbe
    während ich den post geschrieben habe ist mir ein licht aufgeangen.....

    habs jetzt rausgefunden, warum das bei mir net getan hat, habe aus dem bit_vector jetzt mal ein std_logic_vector gemacht und scho tuts....
    jetzt muss mir das nur noch jemand erklären.
Nun ja: Als ob es in VHDL nicht genug Zahlentypen gibt, hat es ZWEI Sorten von Signed/Unsigned, je nachdem welches Modul du benutzt:

use ieee.numeric_std.all;
--> type UNSIGNED is array (NATURAL range <>) of STD_LOGIC;

use ieee.numeric_bit.all;
--> type UNSIGNED is array (NATURAL range <> ) of BIT;

Bleib bei STD_LOGIC, das ist der De-Facto-Standard für alle, und die mehrwertigen Zustände haben schon ein paar Mal den Abend beim Debuggen gerettet.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
xGCFx
Stammgast


Beiträge: 33
Ort: Dresden

New PostErstellt: 03.02.06, 16:21  Betreff: Re: Was ist hier falsch?  drucken  weiterempfehlen Antwort mit Zitat  

Ich kann mir den Code erst Ende nächster Woche näher anschauen, bin grad voll im Lernen für die Abschlussprüfungen. Mal sehen, was sich danach machen lässt. Hab da auch noch eigene Projekte, die ich dann (endlich) in Angriff nehmen kann.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj