algo für digit. schaltkreissimulation?



  • kennt jemand einen algorithmus mit dem man digitale schaltkreise simulieren kann? mir fällt nichts ein, aber villeicht hat jemand von euch sowas schon mal gemacht. ich hab einen algorythums geschrieben, welcher aber bei manchen schaltplänen versagt. es geht wahrscheinlich darum, die richtige reihenfolge zu finden in der die bauteile durchgetestet werden. aber wie? jedes bauteil hat ein und ausgänge die entweder 1 oder 0 sein können und diese sind dann wieder mit anderen eingängen verbunden.

    bitte nicht auf pspice oder andere lösungen verweisen, ich will sowas selbst schreiben.

    [ Dieser Beitrag wurde am 18.11.2002 um 17:50 Uhr von tenim editiert. ]



  • Schreibe dir für jeden Baustein eine Funktion der das verhalten der einzelnen Bausteine realisiert. Für And,Nand ... ist das ja relativ einfach. Die Ein- und Ausgange halten einfach nur Zustände.
    Stelle dein Schaltnetz im Speicher als Graphen dar, die Knoten halten die Funktionen. Durchwandere den Graphen von den Ein- zu den Ausgängen. Fertig



  • so einfach ist es leider nicht, denn so hatte ich es auch schon versucht.
    wie gesagt, die REIHENFLOGE der durchwanderung des graphen ist wichtig (wenn du mit schaltverzögerung oder timer-bausteinen arbeitest) und die ist schwer ?!? herauszukriegen.

    [ Dieser Beitrag wurde am 18.11.2002 um 18:07 Uhr von tenim editiert. ]



  • Die Reihenfolge der Durchwanderung wird durch den Graphen festgelegt !!

    Wo ist also das Problem.



  • @<Snakey>

    ok, dann ist die erstellung des graphen komplex.
    kannst mir ja mal ein beispiel geben wie du aus den bausteinen und deren bekannten verknüpfungen zwischen ein und ausgängen den graphen herleitest.

    [ Dieser Beitrag wurde am 19.11.2002 um 16:36 Uhr von tenim editiert. ]





  • hmm... müßte das ganze system nicht am ende in einem zustand enden?
    müßtest doch nur alles oft genug durchitterieren.

    rapso->greets();



  • Es muss nicht in einem Zustand enden, du kannst nur Momentaufnahmen als Endzustände angeben, verbinde z.B den Ausgang eines AND mit einem negierten Eingang diese Gatters, es flippt dann dauernd hin und her, je nach Durchrechnen.



  • @Bashar

    danke, habs durchgelesen- aber leider nicht komplett verstanden(wahrscheinlich weil englisch und lisp statt c++) nach welchen kriterien der autor die bauteile in die agenda einfügt und das ist ja dann die simulationsreihenfolge der bauteile. die bauteile haben jedes einen zeitindex und kommen in die agenda aufsteigent rein,aber wie kommt der autor auf den exakten zeitindex für jedes bauteil? und was wenn 2 teile den gleichen zeitindex haben? die können dann aber nicht gleichzeitig durchgerechnet werden und wenn nacheinander(welches als erstes muss man wohl durch zufall bestimmen) ist die chance 50% das man das falsche erwischt und die simulation falsche werte produziert.
    ich habs ja ausgedruckt und kucks mir noch ein paarmal an, freundin (englisch-übersetzerin) ist leider in edinburg:(.



  • Original erstellt von Snakey:
    Es muss nicht in einem Zustand enden, du kannst nur Momentaufnahmen als Endzustände angeben, verbinde z.B den Ausgang eines AND mit einem negierten Eingang diese Gatters, es flippt dann dauernd hin und her, je nach Durchrechnen.

    dann würde ich das flippen als endzustand bezeichnen, wenn das nämlich hin und her flipt, dann kann er keine reichenfolge der berechnung finden, in der jedes bauteil auf einen endzustand des vorherigen bauen kann, er müßte dann doch wohl immer und immer durchitterieren, oder?

    also mein elektronik workbench hat das früher auch ständig gemacht... ich glaube das wäre wohl die einzige einiegermassen zuverlässige und simple methode das durchzuführen... aber glauben ist net wissen (gemacht hab ich das ja noch nie)

    rapso->greets();



  • tenim: da kann ich leider wenig zu sagen, ich hab das Kapitel nicht durchgearbeitet.


Anmelden zum Antworten