Inleiding tot het bouwen van Logic Gates met behulp van draden. Het gaat ook dieper en legt uit hoe je zonder vertraging poorten kunt maken.
Introductie
Zodra je de niveaus met sensoren en draden hebt bereikt, zul je snel voor uitdagingen komen te staan waarbij meerdere sensoren dezelfde magneet/zuiger/portal tegelijk moeten besturen. Sommige van de mogelijke configuraties zijn triviaal. Bijvoorbeeld het activeren van een piston wanneer een sensor actief is of het loslaten van een magneet wanneer twee sensoren beide actief zijn.
Elke sensor activeert de zuiger (aan de linkerkant). Alle sensoren moeten actief zijn om de magneet vrij te geven (rechts). Als we echter een piston willen activeren wanneer alle sensoren actief zijn of een magneet willen vrijgeven wanneer een sensor actief is, moeten we iets geavanceerder maken.
Eenvoudige zuigerpoorten
We kunnen pistons gebruiken om eenvoudige logische poorten te maken. Het gebruik van deze aanpak heeft enkele nadelen, maar ze zijn vrij eenvoudig te begrijpen, dus we zullen ermee beginnen.
Als we een piston willen activeren wanneer twee (of meer) sensoren tegelijkertijd actief zijn, kunnen we een extra sensor en een extra piston gebruiken. Om het verwijzen naar hen te vereenvoudigen, laten we onze initiële sensoren onze invoersensoren noemen en onze initiële piston voor onze outputzuiger, terwijl we onze extra componenten respectievelijk onze gatesensor en gatezuiger noemen.
We kunnen onze poortzuiger eenvoudig activeren wanneer een invoersensor actief is (op dezelfde manier als in de inleiding). Door in plaats daarvan de negatieve kant van de ingangssensoren te gebruiken, wordt deze geactiveerd als een ingangssensor niet actief is. Onthoud dat we willen controleren of alle invoersensoren actief zijn, maar we kunnen dat anders formuleren als willen controleren of er geen invoersensoren "niet actief" zijn. Wanneer dat het geval is, is onze poortzuiger niet actief. Door onze poortsensor te gebruiken, kunnen we de toestand van de poortzuiger detecteren en vervolgens de uitgangszuiger dienovereenkomstig regelen.
Door gebruik te maken van een extra sensor en piston kunnen we een EN-poort creëren. Losse stukken zijn wit gekleurd. (De reden dat de zuiger niet is uitgeschoven, is simpelweg dat we de fabriek nog niet hebben gestart.)
Op een vergelijkbare manier kunnen we een magneet loslaten als er minstens één sensor actief is. Merk op dat we hier de positieve kant van onze invoersensoren gebruiken, terwijl we nog steeds de negatieve kant van onze poortsensor gebruiken.
Een extra sensor en piston kunnen ook een NIET-poort worden die we aan de triviale OF-poort bevestigen (de OF-poort verbindt gewoon meerdere positieve sensordraden met hetzelfde blok).
Hoe je de poortsensor en poortzuiger ten opzichte van elkaar bouwt, kan op veel verschillende manieren. In de onderstaande afbeelding ziet u enkele van de mogelijke varianten.
Varianten van de zuigerpoort. Losse stukken zijn wit gekleurd.
Poorten koppelen
In de vorige sectie hebben we een EN-poort en een NIET-poort gebouwd. Door de positieve output van de poortsensor in de EN-poort te gebruiken, krijgen we een NAND-poort (NIET EN) en door meerdere invoersensoren te gebruiken (zoals we deden) voor de NIET-poort, krijgen we een NOR-poort (NIET OF). In de informatica kun je op beroemde wijze alle booleaanse (waar/onwaar, één/nul, hoog signaal/laag signaal) logica bouwen door alleen NAND-poorten of alleen NOR-poorten te gebruiken. Dat betekent dat we elke logica kunnen bouwen die we willen met een eenvoudig zuigerpoortontwerp. We hebben misschien meerdere zuigerpoorten nodig, maar we kunnen het.
Laten we als voorbeeld proberen een XOR-poort te bouwen (EXCLUSIEF OF). Een XOR-poort moet een signaal afgeven als een ingang actief is, maar niet als beide ingangen actief zijn. Hiervoor kunnen we controleren of er minimaal één ingang actief is en beide niet, of anders gezegd een EN-poort met ingangen van een OF-poort en een NAND-poort. Omdat ons EN-poortontwerp echter gebruik maakt van omgekeerde ingangen, hebben we eigenlijk nodig dat onze EN-poort zijn invoer krijgt van een NIET-OF-poort en een EN-poort.
Een XOR-poort. De meest linkse poort is de NOR-poort. De EN-poort voor de ingang is aan de rechterkant. De middelste is de EN-poort die de uitgangen van de andere poorten als ingangen gebruikt.
Zuigervertragingen
Zuigers hebben een enkele tik nodig om hun armen uit te trekken of in te trekken. Een enkele tik is niet lang, maar soms is timing cruciaal om een fabriek goed en efficiënt te laten werken. Zoals we in de vorige sectie hebben gezien, kunnen eenvoudige poorten aan elkaar worden geketend om complexere logica te vormen. De gecombineerde logica van meerdere poorten heeft een aantal tikken nodig dat gelijk is aan de langste keten van poorten. De XOR-poort uit het vorige voorbeeld heeft bijvoorbeeld 2 tikken nodig om te updaten.
Het bevat 3 basispoorten, maar 2 ervan kunnen tegelijkertijd werken. Niet alleen zal de vertraging toenemen met de complexiteit, maar de uiteindelijke uitvoer kan ook flikkeren tussen onstabiele waarden en de werkelijke waarden. Dit kan gebeuren als er subketens in de logica van verschillende lengtes zijn, omdat dat betekent dat de ene subketen voor de andere verandert. Zolang er een vertraging is aan onze poorten, zullen we rekening moeten houden met vertraagde en onstabiele outputs die al dan niet problemen kunnen veroorzaken in onze fabrieken. In computers hebben logische poorten ook kleine vertragingen, dus een klok wordt gebruikt om te compenseren.
De uitgangswaarden worden alleen gebruikt wanneer de klokpulsen, waardoor een onstabiel gedrag wordt genegeerd (zoals het geval is tussen klokpulsen). Hoewel we zelf een soort klok zouden kunnen maken, hebben we toegang tot iets dat computers niet hebben: portalen.
Directe poorten
Door portals te gebruiken, kunnen we logische poorten maken met een vertraging van 0-tick. Dit maakt alle zorgen uit de vorige sectie volledig irrelevant. De portaalpoorten kunnen iets moeilijker te begrijpen zijn dan de zuigerpoorten, dus het kan goed zijn om om te beginnen zuigerpoorten te gebruiken. Het kernconcept van de portaalpoort is dat sensoren door een portaal kunnen kijken en detecteren wat zich aan de andere kant bevindt.
De sensoren bekijken de wereld door een reeks portalen. Let op de rode sensorlijn.
We zullen echter nooit iets aan de andere kant ontdekken. Dat is het hele punt. Als de sensorlijn de andere kant bereikt, wordt de negatieve kant van de sensor geactiveerd. We kunnen voorkomen dat de lijn de andere kant bereikt door simpelweg het portaal uit te zetten. Wanneer het portaal inactief is, kan de lijn er niet doorheen gaan en zal de sensor in plaats daarvan het portaalblok zelf zien, waardoor de positieve kant het activeert.
Een EN-poort is gemaakt van een set portalen. Zodra beide sensoren zijn geactiveerd, wordt het portaal opnieuw geactiveerd en ziet de poortsensor niets meer.
Instant Gates koppelen
Om complexere logica te creëren met portaalpoorten, kunnen we ze gewoon aan elkaar koppelen, zoals we deden met de zuigerpoorten. Het verschil is echter dat de portalversie helemaal geen vertraging heeft.
Een XOR-poort is gemaakt van portalen. Het heeft een vertraging van 0 ticks.
Portaalpoorten kunnen echter ook op een andere manier worden geketend. We kunnen elke poortsensor meerdere sets portalen geven. Op die manier wordt de negatieve kant van de sensor alleen geactiveerd als alle portaalparen open zijn.
Nog een XOR-poort. Deze heeft slechts twee delen, een die controleert of de eerste ingang de enige actieve is, de andere die controleert of de tweede ingang de enige actieve is.
Meestal hoeven we eigenlijk niet meerdere sets portals te gebruiken, omdat de ingangssignalen allemaal naar dezelfde kunnen gaan. Het gebruik van meerdere paren portalen kan het echter gemakkelijker maken om te zien wat er aan de hand is, omdat het gemakkelijker is om te zien door welk portaal de sensorlijn niet kan passeren.
Een compactere versie van de XOR-poort.
Compacte Fabrieken
Een eigenschap van de portaalpoorten is dat ze heel flexibel zijn als het gaat om hoe en waar je ze bouwt. Persoonlijk vind ik het leuk om mijn fabrieken op te ruimen als ze eenmaal werken en hun onderdelen redelijk compact samen te pakken (hoeveel ik de moeite neem om dit te doen, varieert van niveau tot niveau). Bij het bouwen van een portaalpoort is het enige dat belangrijk is dat de sensor een lege plek kan zien als alle portalen open zijn.
4 portaalpoorten die elk uitkijken op dezelfde lege plek.
Een portaalpoort met 3 portaalparen.
Het spreekt voor zich dat hoe vreemder je ze bouwt, hoe moeilijker het wordt om bij te houden wat ze doen.
Voorbeeld van echte puzzel
Dit is een oplossing voor het niveau van "Adder" in de groep "Digitalia". De 8 bits van de rode en blauwe blokken moeten bij elkaar worden opgeteld en worden uitgevoerd met een groen blok. Door een aantal portaalpoorten te gebruiken, kan ik elke 8e tick (24 ticks per bit) een nieuwe 3-bits output produceren.
Dat is alles wat we hiervoor vandaag delen Warpfabriek gids. Deze handleiding is oorspronkelijk gemaakt en geschreven door Swen V. Als we deze handleiding niet kunnen bijwerken, kunt u de laatste update vinden door deze te volgen link.