//: version "1.6" //: property discardChanges = 1 //: script "menagerie.gss" module MEMORY(DATA, spc, _ldpc, _wrt, _rd, _ldmdr, _ldhmdr, _rdmdr, _rdpc, _CLR, _incmar, _ldmar, CK, _incpc); //: interface /sz:(125, 353) /bd:[ Ti0>CK(33/125) Ti1>_CLR(83/125) Bi0>DATA[15:0](60/125) Ri0>_ldpc(25/353) Ri1>_ldmar(42/353) Ri2>_ldmdr(57/353) Ri3>_incpc(73/353) Ri4>_rdmdr(88/353) Ri5>_wrt(104/353) Ri6>_rd(120/353) Ri7>spc(136/353) Ri8>_ldhmdr(155/353) Ri9>_rdpc(171/353) Ri10>_incmar(186/353) ] input _rdpc; //: /sn:0 {0}(259,285)(270,285)(270,306){1} input _rd; //: /sn:0 {0}(671,557)(671,614){1} //: {2}(673,616)(708,616)(708,273)(740,273){3} //: {4}(669,616)(512,616){5} //: {6}(510,614)(510,579){7} //: {8}(508,616)(482,616){9} supply0 [5:0] w16; //: /sn:0 {0}(545,861)(545,840){1} input CK; //: /sn:0 /dp:1 {0}(753,813)(742,813)(742,833)(618,833)(618,815){1} //: {2}(620,813)(631,813){3} //: {4}(616,813)(524,813)(524,438){5} //: {6}(526,436)(641,436)(641,334)(726,334){7} //: {8}(522,436)(130,436){9} //: {10}(128,434)(128,335){11} //: {12}(130,333)(321,333)(321,307)(326,307){13} //: {14}(128,331)(128,253)(151,253){15} //: {16}(126,436)(62,436){17} supply0 [7:0] w3; //: /sn:0 {0}(683,269)(683,251)(662,251){1} input _CLR; //: /sn:0 {0}(512,218)(512,201){1} //: {2}(514,199)(844,199)(844,327){3} //: {4}(842,329)(802,329){5} //: {6}(844,331)(844,770){7} //: {8}(842,772)(716,772)(716,808)(707,808){9} //: {10}(844,774)(844,808)(829,808){11} //: {12}(510,199)(409,199){13} //: {14}(405,199)(263,199)(263,248)(227,248){15} //: {16}(407,201)(407,302)(402,302){17} input _ldhmdr; //: /sn:0 {0}(673,103)(709,103){1} //: {2}(713,103)(871,103)(871,269){3} //: {4}(711,105)(711,137){5} input _wrt; //: /sn:0 {0}(691,706)(424,706){1} //: {2}(422,704)(422,510){3} //: {4}(424,508)(454,508){5} //: {6}(420,508)(399,508){7} //: {8}(422,708)(422,758)(692,758){9} input _ldmar; //: /sn:0 {0}(458,247)(458,314)(438,314){1} supply0 [15:0] w21; //: /sn:0 {0}(220,59)(220,42)(194,42)(194,69){1} input _ldpc; //: /sn:0 {0}(233,131)(217,131)(217,152)(148,152){1} //: {2}(144,152)(131,152){3} //: {4}(146,154)(146,204)(165,204){5} inout [15:0] DATA; //: /sn:0 /dp:13 {0}(278,311)(297,311)(297,213)(371,213){1} //: {2}(373,211)(373,167){3} //: {4}(375,165)(508,165){5} //: {6}(512,165)(547,165){7} //: {8}(551,165)(568,165){9} //: {10}(549,167)(549,246)(616,246){11} //: {12}(510,163)(510,134){13} //: {14}(371,165)(198,165)(198,188){15} //: {16}(373,215)(373,248){17} supply0 [7:0] w24; //: /sn:0 {0}(595,538)(595,523){1} supply1 w20; //: /sn:0 {0}(241,70)(241,83)(202,83){1} supply0 w23; //: /sn:0 {0}(829,818)(844,818)(844,836){1} supply0 [7:0] w1; //: /sn:0 {0}(800,724)(800,677)(825,677)(825,687){1} input _rdmdr; //: /sn:0 {0}(624,284)(624,251){1} input _incpc; //: /sn:0 {0}(233,126)(133,126){1} input spc; //: /sn:0 {0}(251,380)(207,380){1} supply0 w17; //: /sn:0 {0}(496,579)(496,592){1} input _ldmdr; //: /sn:0 /dp:1 {0}(876,269)(876,80)(673,80){1} input _incmar; //: /sn:0 {0}(438,309)(448,309)(448,281)(327,281){1} //: {2}(325,279)(325,266){3} //: {4}(327,264)(340,264){5} //: {6}(325,262)(325,243){7} //: {8}(325,283)(325,293)(313,293)(313,326)(223,326)(223,411)(96,411)(96,383){9} wire [15:0] w6; //: /sn:0 {0}(162,69)(162,47)(70,47)(70,360)(83,360){1} wire [7:0] mdrin; //: /sn:0 {0}(520,552)(557,552){1} //: {2}(561,552)(663,552){3} //: {4}(559,550)(559,523){5} wire w46; //: /sn:0 {0}(402,312)(417,312){1} wire w14; //: /sn:0 {0}(254,129)(272,129)(272,258)(227,258){1} wire w15; //: /sn:0 {0}(691,711)(645,711){1} //: {2}(643,709)(643,672){3} //: {4}(641,711)(436,711){5} //: {6}(434,709)(434,512)(454,512){7} //: {8}(432,711)(365,711){9} wire [15:0] w19; //: /sn:0 {0}(188,217)(188,243){1} wire [15:0] w4; //: /sn:0 {0}(584,165)(614,165){1} wire [15:0] w38; //: /sn:0 {0}(210,713)(300,713){1} wire [15:0] PC; //: /sn:0 {0}(188,264)(188,309){1} //: {2}(190,311)(262,311){3} //: {4}(188,313)(188,348){5} //: {6}(190,350)(264,350)(264,364){7} //: {8}(186,350)(112,350){9} wire w; //: /sn:0 {0}(802,339)(874,339)(874,290){1} wire DTR; //: /sn:0 {0}(451,982)(565,982)(565,840){1} wire w37; //: /sn:0 {0}(713,761)(722,761)(722,818)(707,818){1} wire [7:0] w34; //: /sn:0 {0}(555,834)(555,668)(571,668)(571,523){1} wire [15:0] w43; //: /sn:0 {0}(363,297)(363,277){1} wire RTS; //: /sn:0 {0}(451,958)(555,958)(555,840){1} wire w31; //: /sn:0 {0}(366,763)(446,763){1} //: {2}(450,763)(631,763){3} //: {4}(635,763)(692,763){5} //: {6}(633,761)(633,672){7} //: {8}(448,761)(448,515)(454,515){9} wire [15:0] w28; //: /sn:0 {0}(344,711)(321,711){1} wire DSR; //: /sn:0 {0}(451,974)(800,974)(800,858){1} wire [7:0] w36; //: /sn:0 {0}(790,753)(790,803){1} wire CTS; //: /sn:0 {0}(451,966)(790,966)(790,858){1} wire [7:0] w25; //: /sn:0 {0}(763,286)(763,324){1} wire [15:0] w40; //: /sn:0 {0}(212,765)(301,765){1} wire [5:0] w35; //: /sn:0 {0}(780,858)(780,881)(760,881){1} wire [7:0] w8; //: /sn:0 {0}(620,170)(695,170){1} wire [15:0] w18; //: /sn:0 {0}(274,393)(274,550){1} //: {2}(276,552)(485,552){3} //: {4}(274,554)(274,706){5} //: {6}(276,708)(300,708){7} //: {8}(274,710)(274,760)(301,760){9} wire [15:0] w30; //: /sn:0 {0}(345,763)(322,763){1} wire w22; //: /sn:0 {0}(154,83)(144,83){1} wire [7:0] RD; //: /sn:0 {0}(668,824)(668,949)(451,949){1} wire [7:0] mdr; //: /sn:0 {0}(780,724)(780,676)(724,676){1} //: {2}(722,674)(722,552)(699,552){3} //: {4}(697,550)(697,379){5} //: {6}(699,377)(763,377)(763,345){7} //: {8}(697,375)(697,241)(662,241){9} //: {10}(695,552)(679,552){11} //: {12}(720,676)(668,676)(668,803){13} wire [15:0] w2; //: /sn:0 {0}(656,246)(632,246){1} wire w11; //: /sn:0 {0}(503,529)(503,512)(475,512){1} wire [1:0] w27; //: /sn:0 {0}(600,507)(638,507)(638,666){1} wire [7:0] w13; //: /sn:0 {0}(753,257)(753,198)(577,198)(577,494){1} wire [15:0] mar; //: /sn:0 {0}(363,318)(363,349){1} //: {2}(361,351)(284,351)(284,364){3} //: {4}(363,353)(363,400)(136,400)(136,370)(112,370){5} wire [7:0] w33; //: /sn:0 {0}(790,852)(790,824){1} wire [7:0] w5; //: /sn:0 {0}(620,160)(661,160)(661,150)(695,150){1} wire [7:0] TD; //: /sn:0 {0}(451,941)(583,941)(583,523){1} wire [15:0] w9; //: /sn:0 {0}(178,188)(178,114){1} //: {2}(178,110)(178,98){3} //: {4}(180,112)(353,112)(353,248){5} wire [7:0] w42; //: /sn:0 {0}(773,257)(773,160)(724,160){1} wire w26; //: /sn:0 {0}(712,709)(745,709)(745,740)(767,740){1} //: enddecls //: joint g4 (_rd) @(510, 616) /w:[ 5 6 8 -1 ] //: inout g8 (DATA) @(510,128) /sn:0 /R:3 /w:[ 13 ] //: joint g61 (w31) @(448, 763) /w:[ 2 8 1 -1 ] //: joint g58 (_CLR) @(844, 772) /w:[ -1 7 8 10 ] register g51 (.Q(RD), .D(mdr), .EN(w37), .CLR(_CLR), .CK(CK)); //: @(668,813) /sn:0 /w:[ 0 13 1 9 3 ] //: input g37 (spc) @(205,380) /sn:0 /w:[ 1 ] //: input g34 (_ldpc) @(129,152) /sn:0 /w:[ 3 ] //: input g13 (_wrt) @(397,508) /sn:0 /w:[ 7 ] //: joint g86 (_wrt) @(422, 508) /w:[ 4 -1 6 3 ] //: joint g55 (CK) @(524, 436) /w:[ 6 -1 8 5 ] //: joint g3 (_CLR) @(512, 199) /w:[ 2 -1 12 1 ] //: comment g89 /dolink:0 /link:"" @(37,543) /sn:0 //: /line:"This is the memory address line." //: /line:"The address can be selected from" //: /line:"the MAR (Memory Address Register)" //: /line:"or from the PC (Program Counter)." //: /end //: input g2 (_rd) @(480,616) /sn:0 /w:[ 9 ] //: joint g65 (mdr) @(722, 676) /w:[ 1 2 12 -1 ] //: joint g76 (w9) @(178, 112) /w:[ 2 1 4 -1 ] //: input g77 (_ldmdr) @(671,80) /sn:0 /w:[ 1 ] nand g59 (.I0(!_wrt), .I1(w31), .Z(w37)); //: @(703,761) /sn:0 /w:[ 9 5 0 ] bufif0 g72 (.Z(DATA), .I(PC), .E(_rdpc)); //: @(268,311) /sn:0 /w:[ 0 3 1 ] register PC (.Q(PC), .D(w19), .EN(w14), .CLR(_CLR), .CK(CK)); //: @(188,253) /w:[ 0 1 1 15 15 ] //: supply0 g1 (w17) @(496,598) /sn:0 /w:[ 1 ] //: joint g64 (_wrt) @(422, 706) /w:[ 1 2 -1 8 ] //: frame g16 @(110,659) /sn:0 /wi:762 /ht:347 /tx:"TTY Control" mux g11 (.I0(mdrin), .I1(w34), .I2(TD), .I3(w24), .S(w27), .Z(w13)); //: @(577,507) /sn:0 /R:2 /w:[ 5 1 1 1 0 1 ] concat g50 (.I0(DSR), .I1(CTS), .I2(w35), .Z(w33)); //: @(790,853) /sn:0 /R:1 /w:[ 1 1 0 0 ] /dr:0 add g28 (.A(w6), .B(w21), .S(w9), .CI(w20), .CO(w22)); //: @(178,85) /sn:0 /w:[ 0 1 3 1 0 ] //: joint g78 (PC) @(188, 350) /w:[ 6 5 8 -1 ] //: comment g87 /dolink:0 /link:"" @(210,776) //: /line:"These dip switches specify the" //: /line:"addresses for the tty status" //: /line:"and data registers." //: /end //: joint g10 (CK) @(128, 333) /w:[ 12 14 -1 11 ] //: joint g27 (DATA) @(373, 165) /w:[ 4 -1 14 3 ] //: joint g19 (mdr) @(697, 552) /w:[ 3 4 10 -1 ] mux g32 (.I0(w9), .I1(DATA), .S(_incmar), .Z(w43)); //: @(363,264) /sn:0 /w:[ 5 17 5 1 ] ram m1 (.A(w18), .D(mdrin), .WE(w11), .OE(_rd), .CS(w17)); //: @(503,553) /w:[ 3 0 0 7 0 ] //: joint g38 (DATA) @(549, 165) /w:[ 8 -1 7 10 ] //: input g69 (_ldhmdr) @(671,103) /sn:0 /w:[ 0 ] //: input g6 (_rdmdr) @(624,286) /sn:0 /R:1 /w:[ 0 ] //: joint g57 (_CLR) @(844, 329) /w:[ -1 3 4 6 ] register g53 (.Q(w33), .D(w36), .EN(w23), .CLR(_CLR), .CK(CK)); //: @(790,813) /sn:0 /w:[ 1 1 0 11 0 ] mux g9 (.I0(w13), .I1(w42), .S(_rd), .Z(w25)); //: @(763,273) /sn:0 /w:[ 0 0 3 0 ] bufif1 g7 (.Z(mdrin), .I(mdr), .E(_rd)); //: @(673,552) /sn:0 /R:2 /w:[ 3 11 0 ] //: joint g75 (DATA) @(373, 213) /w:[ -1 2 1 16 ] //: supply0 g20 (w3) @(683,275) /sn:0 /w:[ 0 ] concat g15 (.I0(w5), .I1(w8), .Z(w4)); //: @(615,165) /sn:0 /R:2 /w:[ 0 0 1 ] /dr:0 //: joint g71 (_ldhmdr) @(711, 103) /w:[ 2 -1 1 4 ] mux g31 (.I0(PC), .I1(mar), .S(!_incmar), .Z(w6)); //: @(96,360) /sn:0 /R:3 /w:[ 9 5 9 1 ] xor g39 (.I0(w18), .I1(w38), .Z(w28)); //: @(311,711) /sn:0 /w:[ 7 1 1 ] //: supply0 g67 (w23) @(844,842) /sn:0 /w:[ 1 ] mux g68 (.I0(w5), .I1(w8), .S(!_ldhmdr), .Z(w42)); //: @(711,160) /sn:0 /R:1 /w:[ 1 1 5 1 ] //: supply0 g48 (w16) @(545,867) /sn:0 /w:[ 0 ] //: joint g43 (w18) @(274, 552) /w:[ 2 1 -1 4 ] //: input g73 (_rdpc) @(257,285) /sn:0 /w:[ 0 ] nand g62 (.I0(!_wrt), .I1(w15), .Z(w26)); //: @(702,709) /sn:0 /w:[ 0 0 0 ] //: supply1 g29 (w20) @(252,70) /sn:0 /w:[ 0 ] mux g25 (.I0(PC), .I1(mar), .S(!spc), .Z(w18)); //: @(274,380) /sn:0 /w:[ 7 3 0 0 ] //: joint g17 (DATA) @(510, 165) /w:[ 6 12 5 -1 ] //: input g88 (_CLR) @(512,220) /sn:0 /R:1 /w:[ 0 ] //: joint g63 (w15) @(643, 711) /w:[ 1 2 4 -1 ] nor g42 (.I0(w30), .Z(w31)); //: @(356,763) /sn:0 /w:[ 0 0 ] //: joint g52 (mdr) @(697, 377) /w:[ 6 8 -1 5 ] nor g83 (.I0(!_incmar), .I1(!_ldmar), .Z(w46)); //: @(427,312) /sn:0 /R:2 /w:[ 0 1 1 ] //: joint g74 (PC) @(188, 311) /w:[ 2 1 -1 4 ] //: joint g56 (CK) @(618, 813) /w:[ 2 -1 4 1 ] //: frame g14 @(536,27) /sn:0 /wi:372 /ht:394 /tx:"MDR Control" //: joint g5 (_CLR) @(407, 199) /w:[ 13 -1 14 16 ] concat g47 (.I0(DTR), .I1(RTS), .I2(w16), .Z(w34)); //: @(555,835) /sn:0 /R:1 /w:[ 1 1 1 0 ] /dr:0 //: joint g44 (w18) @(274, 708) /w:[ 6 5 -1 8 ] //: joint g79 (mar) @(363, 351) /w:[ -1 1 2 4 ] //: input g80 (_incmar) @(325,241) /sn:0 /R:3 /w:[ 7 ] //: joint g36 (_ldpc) @(146, 152) /w:[ 1 -1 2 4 ] bufif0 g21 (.Z(DATA), .I(w2), .E(_rdmdr)); //: @(626,246) /sn:0 /R:2 /w:[ 11 1 1 ] register mdr (.Q(mdr), .D(w25), .EN(w), .CLR(_CLR), .CK(CK)); //: @(763,334) /w:[ 7 1 0 5 7 ] or g84 (.I0(_wrt), .I1(w15), .I2(w31), .Z(w11)); //: @(465,512) /sn:0 /w:[ 5 7 9 1 ] //: joint g85 (w15) @(434, 711) /w:[ 5 6 8 -1 ] //: joint g24 (CK) @(128, 436) /w:[ 9 10 16 -1 ] //: dip TTYSTATUS (w38) @(172,713) /R:1 /w:[ 0 ] /st:16 nor g41 (.I0(w28), .Z(w15)); //: @(355,711) /sn:0 /w:[ 0 9 ] //: input g23 (_ldmar) @(458,245) /sn:0 /R:3 /w:[ 0 ] //: joint g60 (w31) @(633, 763) /w:[ 4 6 3 -1 ] xor g40 (.I0(w18), .I1(w40), .Z(w30)); //: @(312,763) /sn:0 /w:[ 9 1 1 ] mux g54 (.I0(mdr), .I1(w1), .S(w26), .Z(w36)); //: @(790,740) /sn:0 /w:[ 0 0 1 0 ] //: joint g81 (_incmar) @(325, 264) /w:[ 4 6 -1 3 ] //: frame g93 @(354,466) /sn:0 /wi:421 /ht:164 /tx:"Main Memory" concat g46 (.I0(w15), .I1(w31), .Z(w27)); //: @(638,667) /sn:0 /R:1 /w:[ 3 7 1 ] /dr:0 //: joint g45 (mdrin) @(559, 552) /w:[ 2 4 1 -1 ] nor g35 (.I0(!_incpc), .I1(!_ldpc), .Z(w14)); //: @(244,129) /sn:0 /w:[ 0 0 0 ] mux g26 (.I0(w9), .I1(DATA), .S(!_ldpc), .Z(w19)); //: @(188,204) /sn:0 /w:[ 0 15 5 0 ] //: input g0 (CK) @(60,436) /sn:0 /w:[ 17 ] register mar (.Q(mar), .D(w43), .EN(w46), .CLR(_CLR), .CK(CK)); //: @(363,307) /w:[ 0 0 0 17 13 ] buf g22 (.I(DATA), .Z(w4)); //: @(574,165) /sn:0 /w:[ 9 0 ] nor g70 (.I0(!_ldhmdr), .I1(!_ldmdr), .Z(w)); //: @(874,280) /sn:0 /R:3 /w:[ 3 0 1 ] //: comment g90 /dolink:0 /link:"" @(211,844) /sn:0 //: /line:"This is the tty. When simulation mode" //: /line:"starts, a tty window will be popped up" //: /line:"corresponding to this device. The device" //: /line:"may be accessed through the simulated CPU" //: /line:"by reading or writing the addresses indicated" //: /line:"by the dip switches TTYSTATUS and TTYDATA." //: /end //: dip TTYDATA (w40) @(174,765) /R:1 /w:[ 0 ] /st:17 tty tty0 (.TD(TD), .RD(RD), .RTS(RTS), .CTS(CTS), .DSR(DSR), .DTR(DTR)); //: @(414,963) /w:[ 0 1 0 0 0 0 ] //: supply0 g66 (w1) @(825,693) /sn:0 /w:[ 1 ] //: joint g82 (_incmar) @(325, 281) /w:[ 1 2 -1 8 ] //: joint g12 (_rd) @(671, 616) /w:[ 2 1 4 -1 ] concat g18 (.I0(mdr), .I1(w3), .Z(w2)); //: @(657,246) /sn:0 /R:2 /w:[ 9 1 0 ] /dr:0 //: input g33 (_incpc) @(131,126) /sn:0 /w:[ 1 ] //: supply0 g30 (w21) @(220,65) /sn:0 /w:[ 0 ] //: frame g91 @(45,27) /sn:0 /wi:441 /ht:397 /tx:"Address Resolution" //: supply0 g49 (w24) @(595,544) /sn:0 /w:[ 0 ] endmodule module REG4(B, _ENA, SB, CK, _ENB, DIN, _WA, _CLR, SA, A); //: interface /sz:(107, 138) /bd:[ Ti0>DIN[15:0](52/107) Li0>SA[1:0](17/138) Li1>SB[1:0](33/138) Li2>_CLR(51/138) Li3>_ENA(70/138) Li4>_ENB(88/138) Li5>_WA(106/138) Li6>CK(123/138) Bo0B[15:0](79/107) Ti1>A[15:0](31/107) Li0>CIN(95/127) Li1>FUNC[4:0](18/127) Bo0CK(37/132) Ti1>_CLR(86/132) Li0>_incmar(187/353) Bi0>IR[15:0](62/132) Ri0>_LT(258/353) Ri1>_GT(276/353) Ri2>_Z(296/353) Ri3>COUT(314/353) Lo0<_wrt(105/353) Lo1<_rdmdr(89/353) Lo2<_incpc(74/353) Lo3<_ldmdr(58/353) Lo4<_ldmar(43/353) Lo5<_ldpc(26/353) Lo6<_ldhmdr(156/353) Lo70 Ti1>0 Bo0<1 Ro0<1 Ro1<0 Ro2<1 Ro3<0 Ro4<1 Ro5<1 ] //: output g75 (_LDQH) @(701,1127) /sn:0 /w:[ 1 ] //: supply0 g9 (w5) @(368,751) /sn:0 /w:[ 0 ] //: output g57 (SB) @(766,890) /sn:0 /w:[ 0 ] //: output g53 (_ldmdr) @(701,1017) /sn:0 /w:[ 0 ] //: joint g7 (CK) @(102, 120) /w:[ 16 18 -1 15 ] mux g71 (.I0(w45), .I1(w46), .S(w47), .Z(SB)); //: @(725,890) /sn:0 /R:1 /w:[ 0 0 0 1 ] //: supply0 g15 (w15) @(205,723) /sn:0 /w:[ 1 ] mux g20 (.I0(IDATA), .I1(w27), .S(w35), .Z(w12)); //: @(393,390) /sn:0 /R:3 /w:[ 0 0 1 0 ] //: input g31 (IR) @(57,70) /sn:0 /w:[ 0 ] mux g68 (.I0(w41), .I1(w39), .S(w43), .Z(SA)); //: @(725,818) /sn:0 /R:1 /w:[ 0 1 0 0 ] //: supply1 g39 (w19) @(421,649) /sn:0 /w:[ 1 ] //: joint g67 (w6) @(151, 65) /w:[ 2 -1 1 4 ] //: supply0 g43 (w20) @(455,1042) /sn:0 /w:[ 1 ] //: joint g48 (IDATA) @(540, 654) /w:[ 2 1 4 -1 ] //: frame g88 @(176,317) /sn:0 /wi:311 /ht:239 /tx:"Microcode Next Address Generation" //: joint g29 (ww) @(945, 358) /w:[ 2 4 1 -1 ] mux g73 (.I0(w7), .I1(w49), .S(w42), .Z(FUNC)); //: @(725,956) /sn:0 /R:1 /w:[ 1 1 0 1 ] nor g25 (.I0(!w55), .I1(!w32), .Z(_SA0)); //: @(890,384) /sn:0 /R:2 /w:[ 13 0 0 ] //: supply0 g17 (w23) @(360,367) /sn:0 /w:[ 0 ] //: comment g62 /dolink:0 /link:"" @(370,940) //: /line:"This is the high half" //: /line:"of the microinstruction" //: /line:"memory." //: /end //: joint g63 (CK) @(264, 771) /w:[ 2 4 -1 1 ] //: supply0 g42 (w30) @(455,678) /sn:0 /w:[ 1 ] //: output g52 (_ldmar) @(701,1007) /sn:0 /w:[ 1 ] //: output g83 (_incmar) @(701,1177) /sn:0 /w:[ 0 ] //: output g74 (_LDQL) @(701,1117) /sn:0 /w:[ 1 ] //: output g56 (SA) @(766,818) /sn:0 /w:[ 1 ] //: joint g5 (mp_nxtaddr) @(331, 709) /w:[ 4 6 -1 3 ] //: supply1 g14 (w21) @(186,641) /sn:0 /w:[ 0 ] //: joint g80 (CK) @(102, 276) /w:[ 12 14 -1 11 ] concat g79 (.I0(w32), .I1(ww), .I2(w55), .I3(w4), .Z(w3)); //: @(1030,353) /sn:0 /w:[ 3 3 0 1 1 ] /dr:0 //: output g47 (IDATA) @(690,654) /sn:0 /w:[ 3 ] //: output g44 (_incpc) @(701,997) /sn:0 /w:[ 1 ] //: comment g85 /dolink:0 /link:"" @(16,131) /sn:0 //: /line:"This block" //: /line:"decodes" //: /line:"insructions" //: /line:"producing" //: /line:"a map index," //: /line:"register" //: /line:"numbers," //: /line:"a function" //: /line:"code and a" //: /line:"condition" //: /line:"code." //: /end //: output g36 (_LDDATA) @(690,734) /sn:0 /w:[ 0 ] //: input g21 (COUT) @(1163,375) /sn:0 /R:2 /w:[ 1 ] //: input g24 (_LT) @(1168,345) /sn:0 /R:2 /w:[ 0 ] //: comment g84 /dolink:0 /link:"" @(694,22) //: /line:"This is a trival example of an" //: /line:"instruction unit. The mpc register" //: /line:"contains the micro-instruction" //: /line:"program counter, and the two" //: /line:"registers on the data out of ROMs" //: /line:"m1 and m2 are the current micro-" //: /line:"instructions. Note that since these" //: /line:"are two separate registers the a" //: /line:"single cycle jump delay." //: /end //: input g23 (_Z) @(1164,361) /sn:0 /R:2 /w:[ 0 ] //: output g41 (spc) @(701,1067) /sn:0 /w:[ 1 ] //: supply1 g40 (w24) @(421,1016) /sn:0 /w:[ 1 ] //: output g54 (_ldpc) @(701,1027) /sn:0 /w:[ 1 ] //: output g60 (_wrt) @(701,1057) /sn:0 /w:[ 1 ] //: output g81 (_ldhmdr) @(701,1157) /sn:0 /w:[ 0 ] //: joint g22 (w55) @(879, 300) /w:[ 3 4 6 -1 ] concat g0 (.I0(w14), .I1(IDATA), .I2(w18), .I3(_ldir), .I4(AOP), .I5(BOP), .I6(CIN), .I7(_CLQ), .I8(_LDQ), .I9(_LDDATA), .I10(_ldopr), .I11(_WA), .I12(w39), .I13(w46), .Z(mp_wrd0)); //: @(483,709) /sn:0 /R:2 /w:[ 0 5 0 0 0 0 1 1 1 1 0 1 0 1 1 ] /dr:0 //: input g26 (_GT) @(1165,323) /sn:0 /R:2 /w:[ 0 ] register g35 (.Q(w8), .D(w10), .EN(w20), .CLR(w24), .CK(CK)); //: @(436,1087) /sn:0 /R:1 /w:[ 1 0 0 0 0 ] //: output g45 (AOP) @(690,684) /sn:0 /w:[ 1 ] //: output g46 (BOP) @(690,694) /sn:0 /w:[ 1 ] //: joint g70 (_CLR) @(385, 74) /w:[ 7 -1 8 10 ] //: output g82 (_rdpc) @(701,1167) /sn:0 /w:[ 1 ] concat g66 (.I0(w6), .I1(w25), .Z(IR)); //: @(85,70) /sn:0 /R:2 /w:[ 0 1 1 ] /dr:0 add g12 (.A(mp_nxtaddr), .B(w15), .S(w27), .CI(w21), .CO(w22)); //: @(221,657) /sn:0 /R:2 /w:[ 9 0 5 1 0 ] mux g18 (.I0(!w55), .I1(!w4), .I2(w55), .I3(ww), .I4(w32), .I5(_SA), .I6(_SA0), .I7(w28), .S(w44), .Z(w35)); //: @(797,311) /sn:0 /R:3 /w:[ 5 0 7 5 5 1 1 1 0 0 ] //: joint g30 (CK) @(102, 511) /w:[ 9 10 20 -1 ] //: joint g33 (w55) @(911, 353) /w:[ -1 9 10 12 ] //: output g49 (CIN) @(690,704) /sn:0 /w:[ 0 ] endmodule module ZREG4(CK, SB, _ENA, B, DIN, _ENB, _WA, _CLR, SA, A); //: interface /sz:(107, 138) /bd:[ Ti0>DIN[15:0](52/107) Li0>SA[1:0](17/138) Li1>SB[1:0](33/138) Li2>_CLR(51/138) Li3>_ENA(70/138) Li4>_ENB(88/138) Li5>_WA(106/138) Li6>CK(123/138) Bo0IR[7:0](19/192) Ti1>OPR[7:0](148/192) Bo0DIN[15:0](53/108) Li0>_WA(101/138) Li1>_ENB(82/138) Li2>_ENA(66/138) Li3>_CLR(51/138) Li4>SB[3:0](33/138) Li5>SA[3:0](17/138) Li6>CK(118/138) Bo013 Li0>13 Li1>13 Li2>1 Li3>1 Li4>13 Li5>13 Li6>13 Bo0<13 Bo1<13 ] //: joint g38 (B) @(880, 435) /w:[ 5 6 8 -1 ] //: joint g6 (w50) @(690, 520) /w:[ 6 8 5 -1 ] //: joint g7 (w49) @(142, 623) /w:[ 2 12 1 -1 ] //: input g9 (SA) @(31,525) /sn:0 /w:[ 1 ] //: joint g31 (DIN) @(853, 156) /w:[ 6 -1 5 8 ] //: joint g15 (_CLR) @(465, 359) /w:[ 4 10 3 -1 ] //: joint g39 (B) @(1133, 435) /w:[ 1 2 4 -1 ] //: joint g29 (DIN) @(360, 156) /w:[ 2 -1 1 12 ] //: joint g25 (_WA) @(769, 379) /w:[ 6 8 5 -1 ] demux g17 (.I(w37), .E(!_ENA), .Z0(!w16), .Z1(!w9), .Z2(!w26), .Z3(!w47)); //: @(222,485) /sn:0 /R:1 /w:[ 0 0 0 0 0 0 ] //: joint g14 (_CLR) @(163, 359) /w:[ 2 12 1 -1 ] concat g5 (.I0(w49), .I1(w15), .Z(SB)); //: @(79,628) /sn:0 /R:2 /w:[ 0 1 0 ] /dr:0 REG4 RF3 (.DIN(DIN), .SA(w50), .SB(w49), ._CLR(_CLR), ._ENA(w47), ._ENB(w46), ._WA(_WA), .CK(CK), .A(A), .B(B)); //: @(1053, 197) /sz:(109, 138) /p:[ Ti0>7 Li0>7 Li1>7 Li2>7 Li3>1 Li4>1 Li5>7 Li6>7 Bo0<3 Bo1<3 ] //: joint g36 (A) @(1085, 467) /w:[ 1 2 4 -1 ] //: joint g24 (_WA) @(500, 379) /w:[ 4 10 3 -1 ] //: output g41 (A) @(1207,467) /sn:0 /w:[ 0 ] //: joint g23 (_WA) @(279, 379) /w:[ 2 12 1 -1 ] //: output g40 (B) @(1205,435) /sn:0 /w:[ 0 ] REG4 RF1 (.DIN(DIN), .CK(CK), ._WA(_WA), ._ENB(w10), ._ENA(w9), ._CLR(_CLR), .SB(w49), .SA(w50), .B(B), .A(A)); //: @(567, 198) /sz:(106, 138) /p:[ Ti0>11 Li0>11 Li1>11 Li2>1 Li3>1 Li4>11 Li5>11 Li6>11 Bo0<11 Bo1<11 ] //: joint g35 (A) @(832, 467) /w:[ 5 6 8 -1 ] //: joint g26 (CK) @(294, 403) /w:[ 2 12 1 -1 ] //: input g22 (CK) @(40,403) /sn:0 /w:[ 0 ] //: input g18 (_WA) @(40,379) /sn:0 /w:[ 0 ] //: input g12 (_CLR) @(41,359) /sn:0 /w:[ 0 ] //: input g33 (_ENB) @(33,555) /sn:0 /w:[ 1 ] //: joint g30 (DIN) @(619, 156) /w:[ 4 -1 3 10 ] REG4 RF2 (.DIN(DIN), .SA(w50), .SB(w49), ._CLR(_CLR), ._ENA(w26), ._ENB(w25), ._WA(_WA), .CK(CK), .A(A), .B(B)); //: @(801, 198) /sz:(107, 138) /p:[ Ti0>9 Li0>9 Li1>9 Li2>9 Li3>1 Li4>1 Li5>9 Li6>9 Bo0<7 Bo1<7 ] endmodule module main; //: root_module wire w32; //: /sn:0 {0}(589,382)(659,382){1} wire [3:0] w45; //: /sn:0 {0}(589,142)(659,142){1} wire [3:0] w46; //: /sn:0 {0}(589,157)(659,157){1} wire w56; //: /sn:0 {0}(589,324)(659,324){1} wire w38; //: /sn:0 {0}(455,197)(394,197){1} wire [7:0] w51; //: /sn:0 {0}(589,237)(659,237){1} wire w0; //: /sn:0 {0}(455,310)(394,310){1} wire w37; //: /sn:0 {0}(455,212)(394,212){1} wire w34; //: /sn:0 {0}(589,420)(659,420){1} wire w43; //: /sn:0 {0}(455,260)(394,260){1} wire w54; //: /sn:0 {0}(589,289)(659,289){1} wire w58; //: /sn:0 {0}(589,363)(659,363){1} wire [15:0] DATA; //: /dp:5 {0}(727,478)(727,525)(519,525){1} //: {2}(517,523)(517,478){3} //: {4}(515,525)(328,525)(328,478){5} wire w41; //: /sn:0 {0}(455,149)(394,149){1} wire w36; //: /sn:0 {0}(455,228)(394,228){1} wire w40; //: /sn:0 {0}(455,166)(394,166){1} wire w35; //: /sn:0 {0}(589,438)(659,438){1} wire w59; //: /sn:0 {0}(455,295)(394,295){1} wire w53; //: /sn:0 {0}(589,275)(659,275){1} wire clk; //: /dp:4 {0}(694,123)(694,66)(494,66){1} //: {2}(490,66)(303,66){3} //: {4}(299,66)(148,66){5} //: {6}(301,68)(301,123){7} //: {8}(492,68)(492,123){9} wire w57; //: /sn:0 {0}(589,344)(659,344){1} wire [1:0] w49; //: /sn:0 {0}(589,205)(659,205){1} wire w44; //: /sn:0 {0}(455,244)(394,244){1} wire w52; //: /sn:0 {0}(589,257)(659,257){1} wire [1:0] w48; //: /sn:0 {0}(589,189)(659,189){1} wire w33; //: /sn:0 {0}(589,400)(659,400){1} wire _reset; //: /dp:4 {0}(749,123)(749,31)(543,31){1} //: {2}(539,31)(353,31){3} //: {4}(349,31)(154,31){5} //: {6}(351,33)(351,123){7} //: {8}(541,33)(541,123){9} wire w47; //: /sn:0 {0}(589,174)(659,174){1} wire [4:0] w50; //: /sn:0 {0}(589,219)(659,219){1} wire w42; //: /sn:0 {0}(455,279)(394,279){1} wire w55; //: /sn:0 {0}(589,306)(659,306){1} wire w39; //: /sn:0 {0}(455,181)(394,181){1} //: enddecls //: joint g4 (DATA) @(517, 525) /w:[ 1 2 4 -1 ] //: comment g8 /dolink:1 /link:"@C/menagerie.gm" @(17,366) /sn:0 //: /line:"* Microcode/Macrocode Definitions" //: /end //: joint g3 (_reset) @(541, 31) /w:[ 1 -1 2 8 ] //: comment g13 /dolink:0 /link:"" @(17,448) /sn:0 //: /line:"Circuit highlights:" //: /end //: joint g2 (clk) @(492, 66) /w:[ 1 -1 2 8 ] //: comment g1 /dolink:0 /link:"" @(17,104) //: /line:"This circuit is a simple" //: /line:"microprocessor. A simulation" //: /line:"script will cause it to start" //: /line:"executing the \"Animals\" game as" //: /line:"soon as you start simulation" //: /line:"mode. Click on the various" //: /line:"logic blocks and press the '>'" //: /line:"key to look at the sub-circuits" //: /line:"inside. You can return to the" //: /line:"parent module by pressing" //: /line:"the '<' key. While in simulation" //: /line:"mode, click on a wire to see" //: /line:"its current value," //: /line:"or double-click to set a trace." //: /line:"" //: /line:"Auxilary files associated with" //: /line:"this circuit can be found in the" //: /line:"examples/ex4 subdirectory of the" //: /line:"TkGate library directory. Click" //: /line:"on the links below to view their" //: /line:"contents." //: /end //: comment g16 /dolink:1 /link:"#eunit.alu" @(17,510) /sn:0 //: /line:"* ALU" //: /end //: comment g11 /dolink:1 /link:"@C/menagerie.gss" @(17,406) /sn:0 //: /line:"* Simulator Script" //: /end //: comment g10 /dolink:1 /link:"@C/menagerie.mem" @(17,386) /sn:0 //: /line:"* Memory Initialization File" //: /end IUNIT iunit (._CLR(_reset), .CK(clk), .IR(DATA), .COUT(w35), ._Z(w34), ._GT(w33), ._LT(w32), ._rdpc(w59), ._incmar(w0), ._rd(w44), .spc(w43), ._ldhmdr(w42), ._ldpc(w41), ._ldmar(w40), ._ldmdr(w39), ._incpc(w38), ._rdmdr(w37), ._wrt(w36), ._DOUT(w58), ._LDQL(w57), ._LDQH(w56), ._LDDATA(w55), .CIN(w54), ._LDQ(w53), ._CLQ(w52), .IDATA(w51), .FUNC(w50), .BOP(w49), .AOP(w48), ._WA(w47), .SB(w46), .SA(w45)); //: @(456, 124) /sz:(132, 353) /p:[ Ti0>9 Ti1>9 Bi0>3 Ri0>0 Ri1>0 Ri2>0 Ri3>0 Lo0<0 Lo1<0 Lo2<0 Lo3<0 Lo4<0 Lo5<0 Lo6<0 Lo7<0 Lo8<0 Lo9<0 Lo10<0 Ro0<0 Ro1<0 Ro2<0 Ro3<0 Ro4<0 Ro5<0 Ro6<0 Ro7<0 Ro8<0 Ro9<0 Ro10<0 Ro11<0 Ro12<0 Ro13<0 ] //: joint g6 (_reset) @(351, 31) /w:[ 3 -1 4 6 ] //: comment g9 /dolink:0 /link:"" @(23,54) //: /line:"This is the" //: /line:"system clock." //: /line:" " //: /end //: comment g7 /dolink:0 /link:"" @(20,17) /sn:0 //: /line:"This is the" //: /line:"reset switch." //: /end //: comment g15 /dolink:1 /link:"#iunit.mpc" @(17,487) /sn:0 //: /line:"* Micro Program Counter" //: /end MEMORY memory (._CLR(_reset), .CK(clk), ._incmar(w0), ._rdpc(w59), ._ldhmdr(w42), .spc(w43), ._rd(w44), ._wrt(w36), ._rdmdr(w37), ._incpc(w38), ._ldmdr(w39), ._ldmar(w40), ._ldpc(w41), .DATA(DATA)); //: @(268, 124) /sz:(125, 353) /p:[ Ti0>7 Ti1>7 Ri0>1 Ri1>1 Ri2>1 Ri3>1 Ri4>1 Ri5>1 Ri6>1 Ri7>1 Ri8>1 Ri9>1 Ri10>1 Bt0=5 ] //: comment g17 /dolink:1 /link:"#memory.m1" @(17,531) /sn:0 //: /line:"* Main Memory" //: /end EUNIT eunit (._CLR(_reset), .CK(clk), ._DOUT(w58), ._LDQL(w57), ._LDQH(w56), ._LDDATA(w55), .SA(w45), .CIN(w54), ._LDQ(w53), ._CLQ(w52), .IDATA(w51), .FUNC(w50), .BOP(w49), .AOP(w48), ._WA(w47), .SB(w46), ._LT(w32), ._GT(w33), ._Z(w34), .COUT(w35), .DATA(DATA)); //: @(660, 124) /sz:(128, 353) /p:[ Ti0>0 Ti1>0 Li0>1 Li1>1 Li2>1 Li3>1 Li4>1 Li5>1 Li6>1 Li7>1 Li8>1 Li9>1 Li10>1 Li11>1 Li12>1 Li13>1 Lo0<1 Lo1<1 Lo2<1 Lo3<1 Bt0=0 ] //: joint g5 (clk) @(301, 66) /w:[ 3 -1 4 6 ] //: comment g14 /dolink:1 /link:"#memory.tty0" @(17,468) /sn:0 //: /line:"* TTY Device" //: /end clock g0 (.Z(clk)); //: @(135,66) /sn:0 /w:[ 5 ] /omega:300 /phi:0 /duty:50 //: comment g18 /dolink:1 /link:"#memory.PC" @(17,551) /sn:0 //: /line:"* Program Counter" //: /end //: switch reset (_reset) @(137,31) /sn:0 /w:[ 5 ] /st:1 //: comment g12 /dolink:1 /link:"@C/menagerie.map" @(17,426) /sn:0 //: /line:"* Symbol Map" //: /end endmodule module EUNIT(_LDDATA, _CLR, SB, SA, AOP, BOP, _GT, _LDQ, _Z, _WA, CK, _CLQ, DATA, FUNC, _LT, _LDQH, _LDQL, CIN, IDATA, COUT, _DOUT); //: interface /sz:(128, 353) /bd:[ Ti0>CK(34/128) Ti1>_CLR(89/128) Li0>SB[3:0](33/353) Li1>_WA(50/353) Li2>AOP[1:0](65/353) Li3>BOP[1:0](81/353) Li4>FUNC[4:0](95/353) Li5>IDATA[7:0](113/353) Li6>_CLQ(133/353) Li7>_LDQ(150/353) Li8>CIN(165/353) Li9>SA[3:0](18/353) Li10>_LDDATA(182/353) Li11>_LDQH(200/353) Li12>_LDQL(220/353) Li13>_DOUT(239/353) Lo01 Li0>0 Li1>1 Li2>1 Li3>3 Li4>0 Li5>3 Li6>0 Bo0<1 Bo1<1 ] tran g39(.Z(w12), .I(w1[15:8])); //: @(678,679) /sn:0 /R:3 /w:[ 0 7 8 ] /ss:0 ALU alu (.B(w31), .A(w38), .CIN(CIN), .FUNC(FUNC), .OUT(w1), .COUT(COUT), ._LT(_LT), ._GT(_GT), ._Z(_Z)); //: @(500, 523) /sz:(107, 127) /sn:0 /p:[ Ti0>1 Ti1>1 Li0>1 Li1>1 Bo0<9 Ro0<1 Ro1<1 Ro2<1 Ro3<1 ] nor g43 (.I0(!_LDQL), .I1(!_LDQ), .Z(w9)); //: @(706,783) /sn:0 /R:3 /w:[ 0 7 1 ] register QL (.Q(QL), .D(w8), .EN(w9), .CLR(w10), .CK(CK)); //: @(620,829) /w:[ 1 0 0 0 7 ] //: joint g48 (w1) @(844, 676) /w:[ 1 2 4 -1 ] register QH (.Q(QH), .D(w2), .EN(w7), .CLR(w10), .CK(CK)); //: @(761,855) /w:[ 1 1 1 3 9 ] bufif0 g17 (.Z(DATA), .I(w1), .E(_DOUT)); //: @(906,676) /sn:0 /cpc:1 /w:[ 13 0 0 ] //: input g25 (FUNC) @(475,541) /sn:0 /w:[ 0 ] //: output g29 (_LT) @(642,575) /sn:0 /w:[ 0 ] //: joint g42 (CK) @(537, 829) /w:[ 6 -1 5 8 ] //: joint g5 (w0) @(463, 316) /w:[ 2 1 -1 4 ] //: supply0 g14 (w30) @(299,394) /sn:0 /w:[ 0 ] //: joint g44 (_LDQ) @(708, 739) /w:[ 2 -1 1 4 ] //: joint g47 (DATA) @(959, 676) /w:[ 1 2 12 -1 ] //: joint g36 (w8) @(771, 710) /w:[ -1 2 1 4 ] //: input g24 (_LDQH) @(808,771) /sn:0 /w:[ 1 ] //: joint g21 (w35) @(486, 418) /w:[ 2 -1 4 1 ] //: joint g41 (CK) @(195, 409) /w:[ -1 1 2 4 ] //: input g23 (_LDQL) @(677,764) /sn:0 /w:[ 1 ] //: joint g40 (w10) @(669, 809) /w:[ 2 -1 4 1 ] //: joint g22 (DATA) @(608, 437) /w:[ 7 -1 8 10 ] //: joint g0 (DATA) @(864, 437) /w:[ 3 4 6 -1 ] //: joint g46 (_LDQ) @(708, 757) /w:[ 6 5 8 -1 ] nor g45 (.I0(!_LDQH), .I1(!_LDQ), .Z(w7)); //: @(840,809) /sn:0 /R:3 /w:[ 0 9 0 ] mux g35 (.I0(w12), .I1(w8), .S(_LDQ), .Z(w2)); //: @(761,739) /sn:0 /w:[ 1 5 3 0 ] //: input g26 (CIN) @(473,618) /sn:0 /w:[ 0 ] //: input g12 (IDATA) @(296,423) /sn:0 /w:[ 1 ] mux g18 (.I0(w21), .I1(DATA), .I2(w35), .I3(w28), .S(BOP), .Z(w31)); //: @(614,481) /sn:0 /w:[ 3 11 3 0 1 0 ] //: output g30 (COUT) @(642,592) /sn:0 /w:[ 0 ] //: input g49 (_DOUT) @(908,642) /sn:0 /R:3 /w:[ 1 ] endmodule