Implementierung eines einfachen ternÀren Systems

Dreiwertige Logik


Liste der Erfolge


  • Grundlegende ternĂ€re Logikgatter: T_NOT, T_OR, T_AND, T_NAND, T_NOR, T_XOR und mehr
  • Synthese, Minimierung und Realisierung fĂŒr ternĂ€re Funktionen
  • TernĂ€rer Halbaddierer, TernĂ€rer Volladdierer, TernĂ€rer Ripple-Carry-Addierer
  • TernĂ€rer Vollsubtrahierer, Komparator, Multiplikator, Multiplexer / Demultiplexer
  • TernĂ€re Flip Flap Flops und Latches
  • Eine primitive ternĂ€re arithmetische und logische Einheit (ALU)

Konventionen und verwendete Technologien


  • Bei der Implementierung wurde Unbalanced Ternary (0, 1, 2) verwendet
  • 1 Trit wird durch 2 Bits ausgedrĂŒckt: 0 ~ 00, 1 ~ 01, 2 ~ 10 (11 ist undefiniert)
  • ModelSim, Quartus Prime, Logisim

EinfĂŒhrung


Als StudienanfÀnger der Innopolis University hatten wir die Möglichkeit, Projekte wÀhrend unseres Computerarchitekturkurses zu realisieren. Unsere Gruppe war besonders an dem ternÀren System und seiner Funktionsweise interessiert, daher beschlossen wir, ein einfaches ternÀres System mit grundlegenden Komponenten (Gates) zu implementieren.


In der Logik ist eine dreiwertige Logik (auch trinÀre Logik, dreiwertig, ternÀr) eines von mehreren vielwertigen Logiksystemen, in denen es drei Wahrheitswerte gibt, die wahr, falsch und einen unbestimmten dritten Wert anzeigen.


Die ternĂ€re Logik ist MVL -konform (Multi-Valued Logic). Es werden jedoch nur drei logische ZustĂ€nde verwendet, ' 0 ', ' 1 ' und ' 2 '. Der optimale Radix ( r ) einer Bruchzahl ist der natĂŒrliche Logarithmus ( e ). Die ternĂ€re Logik verwendet die Zahlendarstellung mit r = 3 im Vergleich zur binĂ€ren Logik, die r = 2 verwendet . Daher ist die Basis 3 der wirtschaftlichste ganzzahlige Radix, der dem natĂŒrlichen Logarithmus e am nĂ€chsten kommt. Diese spezielle Eigenschaft der Basis 3 inspirierte den frĂŒhen Computer Designer, um einen ternĂ€ren Computer zu bauen.


Der erste funktionierende ternĂ€re Computer wurde 1958 in Russland an der Moskauer StaatsuniversitĂ€t gebaut. Der Computer wurde von Nikolay Brusentsov und seinen Kollegen entworfen. Sie nannten es Setun , wie der Fluss, der in der NĂ€he des UniversitĂ€tscampus fließt.


TernÀre Logik


Eine ternĂ€re Logikfunktion ist eine Abbildung F: {0,1,2} n -> {0,1,2} . Wir werden die Vor- und Nachteile der ternĂ€ren Logik gegenĂŒber der binĂ€ren Logik diskutieren.


Wenn die Boolesche Logik 2 2 = 4 unĂ€re Operatoren hat, fĂŒhrt das HinzufĂŒgen eines dritten Werts in der ternĂ€ren Logik zu insgesamt 3 3 = 27 verschiedenen Operatoren fĂŒr einen einzelnen Eingabewert. Wenn die Boolesche Logik 2 2 2 = 16 verschiedene binĂ€re Operatoren (Operatoren mit 2 EingĂ€ngen) hat, hat die ternĂ€re Logik 3 3 2 = 19.683 solcher Operatoren. Wenn wir leicht einen signifikanten Bruchteil der Booleschen Operatoren benennen können (nicht und, oder, und, noch, ausschließlich oder, Äquivalenz, Implikation), ist es unvernĂŒnftig zu versuchen, alle bis auf einen kleinen Bruchteil der möglichen ternĂ€ren Operatoren zu benennen.


Vorteile der ternÀren Logik


Eine ternÀre Logikdarstellung ermöglicht eine kompaktere und effizientere Informationscodierung als die entsprechende binÀre Logikdarstellung. Das angegebene Argument lautet wie folgt: Wenn wir annehmen, dass eine digitale Schaltung N mögliche Eingangskombinationen hat, benötigt eine binÀre Schaltung log 2 N Eingangsleitungen und eine ternÀre Schaltung log 3 N Eingangsleitungen.



Daher sollte eine ternÀr codierte Implementierung einer gegebenen binÀren Logikfunktion das 0,63-fache der Eingabezeilen erfordern als die entsprechende binÀre Implementierung.


Nachteile der ternÀren Logik


Obwohl ternĂ€re Logikschaltungen weniger Eingangsleitungen als die entsprechenden binĂ€ren Logikschaltungen erfordern sollten, sind ternĂ€re Logikschaltungen derzeit keine praktische Wahl. Die GrĂŒnde sind


  1. Die Technologie zur Implementierung ternÀrer Hardware befindet sich noch in den Bereichen Theorie, Simulation und Labortest
  2. Die Darstellung von drei ternÀren Logikpegeln (0, 1 und 2) unter Verwendung der Spannungspegel der vorhandenen Technologie ist noch nicht effektiv definiert
  3. Es wird kein Rechenmodell und keine Programmiersprache entwickelt. Die Simulation der Ergebnisse der Implementierung ternĂ€rer Schaltkreise unter Verwendung von komplementĂ€ren Metalloxidhalbleitern (CMOS), Resonanztunneldioden (RTD) und Kohlenstoff-Nanoröhrentechnologien zeigt jedoch, dass ternĂ€re Logik eine Wahl fĂŒr zukĂŒnftige Berechnungen sein kann.

Verschiedene mögliche Darstellungen fĂŒr das ternĂ€re System


  • TernĂ€res Zahlensystem (Unausgeglichenes ternĂ€res) , jede Ziffer ist ein Trit (trinĂ€re Ziffer) mit einem Wert von: 0, 1 oder 2
  • Ausgeglichen ternĂ€r , jede Ziffer hat einen von 3 Werten: -1, 0 oder +1; Diese Werte können auch auf -, 0, + vereinfacht werden (am hĂ€ufigsten verwendet).
  • Redundante binĂ€re Darstellung , jede Ziffer kann einen Wert von -1, 0, 0/1 haben (der Wert 0/1 hat zwei verschiedene Darstellungen)
  • SchrĂ€g-BinĂ€rzahlensystem , nur die höchstwertige Ziffer ungleich Null hat einen Wert 2, und die verbleibenden Ziffern haben einen Wert von 0 oder 1

Mehr zum ausgeglichenen ternÀren Nummerierungssystem


Heutzutage ist fast die gesamte Hardware fĂŒr das binĂ€re Rechnen ausgelegt. Wenn wir eine stabile elektronische Komponente mit drei stabilen ZustĂ€nden hĂ€tten, hĂ€tte sich die Welt vielleicht dem ternĂ€ren Rechnen zugewandt. Dies ist jedoch heute nicht die Wahrheit. Die ausgeglichene ternĂ€re Radixnotation hat einige vorteilhafte Eigenschaften:


  1. Die ternĂ€re Inversion ist einfach, tauschen Sie einfach -1 gegen 1 aus und umgekehrt. Wenn wir ein Beispiel verwenden, wird 24 als 1T0 und -24 als T10 in ausgeglichener ternĂ€rer Notation dargestellt (T ist einfach eine Notation fĂŒr -1). Dies ist einfacher als die Regel fĂŒr das Zweierkomplement in der binĂ€ren Logik.
  2. Das Vorzeichen einer Zahl wird durch das bedeutendste "Trit" ungleich Null angegeben.
  3. Der Vorgang des Rundens auf die nÀchste ganze Zahl ist identisch mit dem Abschneiden.
  4. Addition und Subtraktion sind im Wesentlichen dieselbe Operation (dh Sie addieren lediglich die Ziffern nach den Regeln fĂŒr die Addition von Ziffern).

Beispiele:
21 10 = 1T10 3 ; 296 10 = 11T00T 3 ;
-24 10 = T10 3 ; -137 10 = T110T1 3


TernÀre Arithmetik


TernÀre Arithmetik kann eine kompaktere Notation bieten als binÀre Arithmetik und wÀre eine naheliegende Wahl gewesen, wenn die Hardwarehersteller einen ternÀren Schalter gefunden hÀtten.


Ausgewogene ternÀre Addition und Multiplikation



Beispiele:


TernÀre Kombinationsschaltungen (TernÀre Tore)


Eine Kombinationsschaltung besteht aus Eingangsvariablen, ternÀren Logikgattern und Ausgangsvariablen. Der Ausgang der Schaltung hÀngt nur vom aktuellen Eingang ab. Logikgatter akzeptieren Signale von den Eingangsvariablen und erzeugen Ausgangssignale. Dieser Prozess transformiert ternÀre Informationen aus
die angegebenen Eingabedaten zu den erforderlichen ternÀren Ausgabedaten.


Wie oben erwĂ€hnt, können wir leicht einen signifikanten Bruchteil der Booleschen Operatoren benennen (nicht und oder, und, noch, ausschließlich oder, Äquivalenz, Implikation), es ist jedoch unvernĂŒnftig zu versuchen, alle bis auf einen kleinen Bruchteil der möglichen zu benennen ternĂ€re Operatoren. Wir werden die folgenden ternĂ€ren Schaltkreise betrachten:


Und (Min) : Es ist natĂŒrlich, den Booleschen Wert und die Funktion auf eine ternĂ€re Funktion zu erweitern, indem erklĂ€rt wird, dass das Ergebnis nur dann wahr ist, wenn beide Eingaben wahr sind, falsch, wenn eine Eingabe falsch ist, und ansonsten unbekannt.


Und Schaltung / Wahrheitstabelle


Oder (Max) : Es ist auch natĂŒrlich, den Booleschen Wert oder die Funktion auf ternĂ€r zu erweitern, indem erklĂ€rt wird, dass das Ergebnis wahr ist, wenn eine Eingabe wahr ist, falsch nur, wenn beide Eingaben falsch sind, und ansonsten unbekannt.


Oder Schaltung / Wahrheitstabelle


Konsens : In der Booleschen Logik ist die Umkehrung von exklusiv oder wahr, wenn die beiden Eingaben gleich sind, und falsch, wenn sie unterschiedlich sind. Es gibt mehrere natĂŒrliche Erweiterungen dieser Idee fĂŒr die ternĂ€re Logik. Eine davon ist der logische Konsens einer Reihe von Variablen, der wahr ist, wenn alle wahr sind, falsch, wenn alle falsch sind und ansonsten unbekannt


Konsensschaltung / Wahrheitstabelle


Beliebig : Wenn der Konsens erfordert, dass beide Eingaben ĂŒbereinstimmen, bevor etwas anderes als unbekannt behauptet wird, erklĂ€rt der Operator "Alles akzeptieren" nur dann eine unbekannte Schlussfolgerung, wenn beide Eingaben unbekannt sind oder aktiv nicht ĂŒbereinstimmen. Andernfalls springt es zu einer Schlussfolgerung aus einer nicht unbekannten Eingabe, die ihm zur VerfĂŒgung steht.


Beliebige Schaltung / Wahrheitstabelle


Inkrementieren und Dekrementieren : In der Booleschen Logik kann der Wechselrichter als Inkrementieren oder Dekrementieren seines Arguments Modulo 2 angesehen werden. Interne Logik, die Modulo 3-Inkrementierungs- und Dekrementierungsfunktionen unterscheiden sich stark von der Inversion.


Inkrement- und Dekrementschaltung


Synthese, Minimierung und Realisierung fĂŒr ternĂ€re Funktionen


Beziehungen, die im ternÀren Logiksystem miteinander zusammenhÀngen



Eine ternĂ€re Logikfunktion kann als Max-Min-Ausdruck dargestellt werden. TernĂ€re Max-Min-AusdrĂŒcke sind wie folgt definiert:
Variable : Jedes Symbol, das einen Wert aus der Menge T ∈ {0,1,2} annimmt, ist eine ternÀre Variable.
Literal : Literale sind transformierte Formen einer Variablen. Sie werden verwendet, um Max-Min-AusdrĂŒcke zu bilden.


In der Literatur werden ĂŒblicherweise zwei Arten von Literalen verwendet: 1-reduzierte Post-Literale und 2-reduzierte Post-Literale. Ein 1-reduziertes Post-Literal einer Variablen x wird als x i dargestellt , wobei i ∈ {0,1,2} ist. Wenn x = i, dann ist x i = 1, andernfalls ist x i = 0. Die 1-reduzierten Post-Literale einer Variablen sind unten gezeigt.


Ein 2-reduziertes Post-Literal einer Variablen x wird als x i dargestellt , wobei i ∈ {0,1,2} ist. Wenn x = i, dann ist x i = 2, andernfalls ist x i = 0. Die 2-reduzierten Post-Literale einer Variablen sind unten gezeigt. In diesem Beispiel werden verschiedene SĂ€tze von Literalen verwendet, um Max-Min-AusdrĂŒcke zu bilden, wie zuvor erlĂ€utert.



Minterm : Wenn Literale von Variablen einer Funktion mit der Min-Operation kombiniert werden, wird der Begriff als Minterm bezeichnet. Zum Beispiel sind fĂŒr eine ternĂ€re Logikfunktion mit drei Variablen F (x, y, z) xyz und xz zwei Beispiele fĂŒr Zwischenzeiten.


Max-Min-Ausdruck : Wenn zwei oder mehr Intervalle mit Max-Operationen kombiniert werden, wird der Ausdruck als Max-Min-Ausdruck (Max-Min) bezeichnet. Beispielsweise ist fĂŒr eine ternĂ€re Logikfunktion mit 3 Variablen F (x, y, z) = xy + yz + xyz ein Beispiel fĂŒr einen Max-Min-Ausdruck.


Jede Funktion F (x, y, z) kann immer als dargestellt werden




Drei grundlegende Methoden zur Minimierung ternÀrer Funktionen sind:


  1. Manipulation des Algebraausdrucks wie in der Booleschen Algebra.
  2. Die tabellarische Methode.
  3. TernÀre K. Kartenmethode.
    FĂŒr die Implementierung von ternĂ€ren Schaltkreisen ist es erforderlich, ternĂ€re Variablen in unĂ€re Variablen umzuwandeln (unter Verwendung der Tabelle 2-Reduced Post Literals).

TernÀrer Halbaddierer


Eine Schaltung fĂŒr die Addition von zwei 1-Trit-Zahlen wird als Halbaddierer bezeichnet. Die Schaltung berĂŒcksichtigt keinen Übertrag, der in der vorherigen Addition erzeugt wurde. Der Additionsprozess im ternĂ€ren Logiksystem ist unten gezeigt. Hier sind A und B zwei EingĂ€nge und Summe (S) und Übertrag (CARRY)
sind zwei AusgÀnge.




Analyse


Eine Karnaugh-Karte (K-Karte) wird verwendet, um die Summe darzustellen und die Ausgabe zu ĂŒbertragen. K-Maps sind nĂŒtzlich zur Minimierung und Optimierung von Logikschaltungen. Hier wird eine K-Map mit 2 EingĂ€ngen verwendet. Da keine Gruppierung von 2 und 1 möglich ist, ist die Ausgangsgleichung wie folgt.



Implementierung


TernÀre Halbaddiererschaltung / Verilog
module half_adder ( input [1:0] A, [1:0] B, output [1:0] sum, [1:0] carry ); wire [1:0] temp = 2'b01; wire [1:0] a0, a1, a2, b0, b1, b2; wire [1:0] i0, i1, i2, i3, i4, i5; wire [1:0] o0, o1, o2, o3, o4; wire [1:0] c0, c1, c2, c3; mask msk_1(A, a0, a1, a2); mask msk_2(B, b0, b1, b2); andgate and_1(a2,b0,i0); andgate and_2(a1,b1,i1); andgate and_3(a0,b2,i2); // partial products orgate or_1(i0, i1, o0); orgate or_2(o0, i2, o1); // f1 andgate and_4(a1,b0,i3); andgate and_5(a0,b1,i4); andgate and_6(a2,b2,i5); // partial products orgate or_3(i3, i4, o2); orgate or_4(o2, i5, o3); // f2 andgate and_7(o3,temp,o4); // 1.f2 andgate andc_0(a2,b1,c0); andgate andc_1(a1,b2,c1); orgate orc_0(c0,c1,c2); orgate orc_1(c2,i5,c3); andgate andc_2(c3,temp,carry); // carry orgate or_5(o1, o4, sum); // sum endmodule 

TernÀrer Volladdierer


Wie bei Halbaddierern kann eine Stufe eines ternĂ€ren Volladdierers durch eine numerische Tabelle beschrieben werden, die die Summe SUMME angibt und CARRY als Funktion der drei EingĂ€nge A, B zusammen mit dem Übertrag in C ausfĂŒhrt :





Analyse


Eine Karnaugh-Karte (K-Karte) wird verwendet, um die Summe darzustellen und die Ausgabe zu ĂŒbertragen. K-Maps sind nĂŒtzlich zur Minimierung und Optimierung von Logikschaltungen. Hier wird eine K-Map mit 3 EingĂ€ngen verwendet.




Implementierung


TernÀre Volladdiererschaltung / Verilog
 module ternary_full_adder ( input [1:0] A, [1:0] B, [1:0] c_in, output [1:0] sum, [1:0] c_out ); wire [1:0] temp1 = 2'b01; wire [1:0] temp2 = 2'b00; wire [1:0] a0, a1, a2, b0, b1, b2, a20; wire [1:0] i0, i1, i2, i3, i4; wire [1:0] i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17; wire [1:0] o0, o1, o2, o3, o4, o5, o6, o7, o8, o9; wire [1:0] c0, c1, c2; wire [1:0] h0, h1, h2, h3, h4, h5, h6, h7; wire [1:0] t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16; wire [1:0] g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15; mask mk_1(A, a0, a1, a2); mask mk_2(B, b0, b1, b2); mask mk_3(c_in, c0, c1, c2); andgate3 and3_1(a2,b0,c0, i0); andgate3 and3_2(a1,b0,c1, i1); andgate3 and3_3(a0,b0,c2, i2); andgate3 and3_4(a1,b1,c0, i3); andgate3 and3_5(a0,b1,c1, i4); andgate3 and3_6(a2,b1,c2, i5); andgate3 and3_7(a0,b2,c0, i6); andgate3 and3_8(a2,b2,c1, i7); andgate3 and3_9(a1,b2,c2, i8); andgate3 and3_10(a1,b0,c0, i9); andgate3 and3_11(a0,b0,c1, i10); orgate or__(a2, a0, a20); andgate3 and3_12(a20,b0,c2, i11); // note a20 andgate3 and3_13(a0,b1,c0, i12); andgate3 and3_14(a2,b1,c1, i13); andgate3 and3_15(a1,B,c2, i14); andgate3 and3_16(a2,b2,c0, i15); andgate3 and3_17(a1,b2,c1, i16); andgate3 and3_18(temp2,b2,c2, i17); orgate or_1(i9, i10, o0); orgate or_2(o0, i11, o1); orgate or_3(o1, i12, o2); orgate or_4(o2, i13, o3); orgate or_5(o3, i14, o4); orgate or_6(o4, i15, o5); orgate or_7(o5, i16, o6); orgate or_8(o6, i17, o7); andgate and_1(o7, temp1, o8); // 1.f2 orgate or_9(i0, i1, h0); orgate or_10(h0, i2, h1); orgate or_11(h1, i3, h2); orgate or_12(h2, i4, h3); orgate or_13(h3, i5, h4); orgate or_14(h4, i6, h5); orgate or_15(h5, i7, h6); orgate or_16(h6, i8, h7); orgate or_17_(h7, o8, sum); // sum // carry andgate3 and3_19(a2,b2,c2, t0); // f1 andgate3 and3_20(a0,b1,c2, t1); andgate3 and3_21(a0,b2,c2, t2); andgate3 and3_22(a0,b2,c1, t3); andgate3 and3_23(a1,b2,c0, t4); andgate3 and3_24(a2,b2,c0, t5); andgate3 and3_25(a1,b1,c1, t6); andgate3 and3_26(a1,b2,c1, t7); andgate3 and3_27(a1,b0,c2, t8); andgate3 and3_28(a1,b1,c2, t9); andgate3 and3_29(a1,b2,c2, t10); andgate3 and3_25_(a2,b0,c2, t11); andgate3 and3_26_(a2,b1,c2, t12); andgate3 and3_27_(a2,b0,c1, t13); andgate3 and3_28_(a2,b1,c1, t14); andgate3 and3_29_(a2,b2,c1, t15); andgate3 and3_9_(a2,b1,c0, t16); orgate or_17(t1, t2, g0); orgate or_18(g0, t3, g1); orgate or_19(g1, t4, g2); orgate or_20(g2, t5, g3); orgate or_21(g3, t6, g4); orgate or_22(g4, t7, g5); orgate or_23(g5, t8, g6); orgate or_24(g6, t9, g7); orgate or_25(g7, t10, g8); orgate or_21_(g8, t11, g9); orgate or_22_(g9, t12, g10); orgate or_23_(g10, t13, g11); orgate or_24_(g11, t14, g12); orgate or_25_(g12, t15, g13); orgate or_5_(g13, t16, g14); //f2 andgate and_2(g14, temp1, g15); // 1.f2 orgate or_26(g15, t0, c_out); // carry endmodule 

TernÀrer Vollsubtrahierer


Der ternĂ€re Vollsubtrahierer ist eine Schaltung, die zwei EingĂ€nge und das vorherige Ausleihen subtrahiert. Die Wahrheitstabelle fĂŒr den Subtrahierer ist unten gezeigt



Analyse und Implementierung des ternÀren Vollsubtrahierers




Code
 module full_subtractor( input [1:0] P, Q, b_in, output [1:0] diff, b_out ); wire [1:0] temp1 = 2'b01; wire [1:0] temp2 = 2'b10; wire [1:0] a0, a1, a2, b0, b1, b2; wire [1:0] i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17; wire [1:0] c0, c1, c2, c3; wire [1:0] h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11; wire [1:0] t0, t1, t2, t3, t4, t5, t6, t7, t8, t9; wire [1:0] p0, p1, p2; wire [1:0] q0, q1, q2; mask mk_1(P, p0, p1, p2); mask mk_2(Q, q0, q1, q2); mask mk_3(b_in, b0, b1, b2); andgate and_0(p0, q1, i0); andgate3 and3_0(p2, p1, q2, i1); orgate or_0(i0, i1, i2); andgate and_1(b0, i2, i3); // first expression andgate and_2(p0, q0, i4); andgate and_3(p1, q1, i5); andgate and_4(p2, q2, i6); orgate or_1(i4, i5, i7); orgate or_2(i7, i6, i8); andgate and_5(i8, b1, i9); // second expression andgate and_6(p1, q0, i10); andgate and_7(p0, q2, i11); andgate and_8(p2, q1, i12); orgate or_3(i10, i11, i13); orgate or_4(i13, i12, i14); andgate and_9(i14, b2, i15); // third expression orgate or_5(i3, i9, i16); orgate or_6(i16, i15, c0); //f1 orgate or_7(i10, i12, t0); orgate or_8(t0, i11, t1); andgate and_10(t1, b0, t2); // 1 expression andgate and_11(p1, q2, i17); orgate or_9(i4, i17, t3); andgate and_12(t3, b1, t4); // 1- expression orgate or_10(i4, i5, t5); orgate or_11(t5, i6, t6); andgate and_12_(t6, b2, t7); // 1-- expression orgate or_12(t2, t4, t8); orgate or_13(t8, t7, t9); andgate and_13(t9, temp1, c1); orgate or_14(c0, c1, diff); // difference orgate or_15(q1, q2, h0); andgate and_14(h0, temp2, h1); andgate and_15(h1, b2, h3); // 1 b orgate or_16(i0, i11, h4); andgate and_16(h4, temp2, h5); // 1- b andgate and_17(i17, temp2, h6); // 1-- b andgate3 and3_1(p2, q2, b1, h7); // 1--- b andgate3 and3_2(p1, q0, b2, h8); // 1---- b orgate or_17(h3, h5, h9); orgate or_18(h9, h6, h10); orgate or_19(h10, h7, h11); orgate or_20(h11, h8, b_out); // borrow endmodule 

Ternary Ripple Carry Addierer


Ripple-Carry-Addierer (RCA) ist eine bekannte Schaltung zum Addieren von zwei Zahlen durch Kaskadieren von ternĂ€ren Volladdierern. Ein ternĂ€rer RCA ist seinem binĂ€ren GegenstĂŒck ziemlich Ă€hnlich. Ein ternĂ€rer Halbaddierer wird verwendet, um die am wenigsten signifikanten ternĂ€ren Ziffern hinzuzufĂŒgen. Der Rest wird von Ternary Full Adders zusammengefasst. Wie bereits erwĂ€hnt, fĂŒgt Ternary Full Adder drei ternĂ€re Eingabevariablen hinzu.



Implementierung


Verilog-Code: TernÀrer Ripple-Carry-Addierer
 module ternary_ripple_adder ( input [15:0] input1 , input [15:0] input2 , output [15:0] out , output [1:0] overflow_trit ); wire [15:0] carry ; reg tem; assign carry[0] = tem; assign carry[1] = tem; always @(input1, input2) begin tem <= 1'b0; end generate genvar i; for (i = 0; i <= 12; i=i+2) begin full_add af({input1[i+1],input1[i]}, {input2[i+1],input2[i]}, {carry[i+1],carry[i]}, {out[i+1], out[i]}, {carry[i+3],carry[i+2]}); end full_add af({input1[15],input1[14]}, {input2[15],input2[14]}, {carry[15],carry[14]}, {out[15], out[14]}, overflow_trit); endgenerate endmodule 

TernÀre Komparatoren


TernĂ€re Komparatorschaltung Camper zwei EingĂ€nge X 1 , X 2 und erzeugt dementsprechend Ausgang als X 1 = X 2 , X 1 > X 2 , X 1 <X 2 . Die Wahrheitstabelle fĂŒr einen ternĂ€ren Komparator ist unten gezeigt





Analyse und Implementierung

Die Ausgangsgleichung fĂŒr X 1 = X 2 , X 1 > X 2 , X 1 <X 2 lautet:




Entsprechende k-Maps sind unten dargestellt


Code
 module ternary_comparators ( input [1:0] x1, x2, output [1:0] f1, f2, f3 ); wire [1:0] t0, t1, t2, t3, t4, t5, t6, t7; wire [1:0] h0, h1, h2, h3, h4, h5; wire [1:0] x10, x11, x12; wire [1:0] x20, x21, x22; mask mk_1(x1, x10, x11, x12); mask mk_2(x2, x20, x21, x22); andgate and_0(x10, x20, t0); andgate and_1(x22, x22, t1); orgate or_0(t0, t1, h0); orgate or_1(h0, x11, h1); orgate or_2(h1, x21, f1); // x1 == x2 andgate and_2(x11, x20, t2); andgate and_3(x12, x20, t3); andgate and_4(x12, x21, t4); orgate or_3(t2, t3, h3); orgate or_4(h3, t4, f2); // x1>x2 andgate and_5(x10, x21, t5); andgate and_6(x10, x22, t6); andgate and_7(x11, x22, t7); orgate or_5(t5, t6, h4); orgate or_6(h4, t7, f3); // x1<X2 endmodule 

TernÀrer Multiplikator


Der ternĂ€re Multiplikator ist eine Schaltung, die zwei Eingangszahlen multipliziert und ein entsprechendes Produkt erzeugt. Die Wahrheitstabelle fĂŒr diese Schaltung ist unten gezeigt:





Analyse und Implementierung

Der resultierende Ausdruck fĂŒr das Produkt und den Carry wird angezeigt:




Die entsprechenden K-Maps werden angezeigt:


Code
 module ternary_multiplier ( input [1:0] A, [1:0] B, output [1:0] product, [1:0] carry ); wire [1:0] temp = 2'b01; wire [1:0] a0, a1, a2, b0, b1, b2; wire [1:0] i0, i1, i2, i3, i4, i5; wire [1:0] o0, o1, o2, o3, o4; mask msk_1(A, a0, a1, a2); mask msk_2(B, b0, b1, b2); andgate and_1(a1,b2,i0); andgate and_2(a2,b1,i1); orgate or_1(i0, i1, o0); // f1 andgate and_4(a1,b1,i3); andgate and_5(a2,b2,i4); orgate or_3(i3, i4, o2); andgate and_3(temp,o2,o3); orgate or_4(o3, o0, product); // product andgate andc_0(a2,b2,o4); andgate andc_1(temp,o4,carry); // carry endmodule 

TernÀre Multiplexer und Demultiplexer


Multiplexer ist eine Schaltung mit mehreren EingĂ€ngen und einem einzigen Ausgang. Es ist auch als Decoder bekannt. Die Ausgangsfunktion des Multiplexers wird durch die Anzahl der Funktionsleitungen bestimmt. Also fĂŒr 2 trit
Multiplexer der Ausgang ist 3 2 = 9 und zwei sind die Funktionsauswahlleitungen. Multiplexer dh Funktion
Auswahllogik wÀhlt 1 von 9 Funktionen als Ausgang aus. Die Funktionsauswahllogik wird unter Verwendung von Logikgattern implementiert. Die Ausgangsgleichung der Funktionsauswahllogik lautet:



Analyse


Demultiplexer wird auch als Encoder bezeichnet. Seine FunktionalitÀt ist umgekehrt zu der des Multiplexers. Es akzeptiert den einzelnen Eingang und verteilt ihn auf mehrere AusgÀnge


Einfache ternÀre Verriegelung


Obwohl der Entwurf von Schaltungen, die eine kombinatorische ternĂ€re Logik implementieren, unkompliziert ist, war der Entwurf eines einfachen und robusten ternĂ€ren Speicherelements (dh eines Latch), das fĂŒr die Implementierung einer integrierten Schaltung (IC) geeignet ist, eine Herausforderung. Ein einfacher ternĂ€rer Latch kann jedoch erhalten werden, indem die verwendeten binĂ€ren NOR- oder NAND-Gatter durch entsprechende ternĂ€re T_NOR- oder T_NAND-Gatter ersetzt werden.



Einfacher ternÀrer D Flip-Flap-Flop


Das ternĂ€re D-Flip-Flap-Flop (FFF) des Master-Slave (MS) wird basierend auf den ternĂ€ren D-Latches realisiert. Dies Ă€hnelt der Art und Weise, wie das binĂ€re D-Flip-Flop (FF) unter Verwendung von binĂ€ren D-Latches realisiert wird. Das Logikdiagramm und die Betriebsbeschreibung des MS-BinĂ€r-D-Flipflops sind bekannt. Um das ternĂ€re MS- FFF zu implementieren, ersetzen wir die binĂ€ren D-Latches durch ternĂ€re D-Latches (realisiert mit ternĂ€ren Negated-Minimun-Gates zweier EingĂ€nge - NAND) und die binĂ€ren Inverter durch einfache ternĂ€re Inverter (STI). Die Wahrheitstabellen sowohl fĂŒr die ternĂ€ren NAND-Schaltungen als auch fĂŒr die ternĂ€ren STI-Schaltungen werden angezeigt


Wahrheitstabelle fĂŒr Nand- und Sti-Schaltungen


FĂŒr MS ternĂ€re D FFF mit binĂ€rem Takt sind die Daten ternĂ€r (0, 1 und 2 Logik) und der Takt ist binĂ€r (niedrig und hoch - in unserem
Implementierung, 0 und 2 Logik). Die MS ternÀre D FFF mit
Die binÀre Uhr kann die Daten lesen, wenn die Uhr von niedrig nach geht
hoch (positive Flanke) oder von hoch nach niedrig (negative Flanke), je nachdem
auf die Anzahl der STIs.


Die EingÀnge des ternÀren D FFF sind Data und Clk, und die AusgÀnge sind Q und Not_Q. Das Taktsignal ist binÀr und die Logikpegel werden mit 0 und 2 bezeichnet, um die Entsprechung mit der elektrischen Implementierung aufrechtzuerhalten


Simulation







TernÀre 1-Bit-Arithmetik- und Logikeinheit (T-ALU)


Die Ternary Arithmetic Logic Unit (ALU) ist eine digitale Schaltung, mit der arithmetische und logische Operationen ausgefĂŒhrt werden. Es stellt den Grundbaustein der Central Processing Unit (CPU) eines ternĂ€ren Computers dar. ALU fĂŒhrt arithmetische Operationen wie Addition, Subtraktion, Multiplikation und Vergleich von logischen Operationen, NAND, NOR, NOT, AND und OR aus. Unten ist eine primitive Architektur einer 1-Trit-ALU gezeigt



Wahrheitstabelle und Funktionsweise fĂŒr T-ALU


Grundbausteine ​​der ALU sind Decoder, Funktionsauswahllogik (Multiplexer), Übertragungsgatter und separate Verarbeitungsmodule. Die Funktionsauswahllogik wĂ€hlt 1 von 9 aufgelisteten Funktionen aus, abhĂ€ngig vom Logikzustand auf den Funktionsauswahlleitungen W und Z.


Ausgangsleitungen der Auswahllogik sind mit TG (Ternary Gate) verbunden, das jedem Modul zugeordnet ist. Jedes Modul wird nur ausgewÀhlt, wenn die zugehörige TG aktiviert ist, andernfalls ist es von Datenleitungen isoliert. Wenn beispielsweise die Eingabe von den Auswahlleitungen W und Z = 0 ist, ist die Ausgabe E 0 der Auswahllogik hoch (2), wÀhrend E 1 bis E 8 niedrig (0) ist, so dass die dem Addierermodul zugeordnete TG aktiviert wird, um Daten zuzulassen
Leitungen, die an Addierermodule angeschlossen werden sollen, wÀhrend andere Module von den Datenleitungen isoliert sind.


Schließlich kann durch Kaskadieren von n / 2 Trit-ALU-Schichten eine N- Trit-ALU gebildet werden.

Source: https://habr.com/ru/post/de431726/


All Articles