Såg den här enkla kretslösningen för att dela med 8.
Infrekvensen ska vara 14MHz men vilken logikfamilj klarar detta eller mer relevant - vilken logikfamilj är lämpligast?
Den första kretsen förutsätter väl någon form av reset om den skall dela med åtta?
Den första kretsen är synkron, dvs alla klockade element är kopplade till samma klocka. Den andra är asynkron, där "datasignaler" kopplas in på klockorna. I 99.99% av alla designer vill man jobba synkront, dvs enligt övre bilden. I de fall man inte vill det så har man en bra anledning som man kan argumentera för. Asynkrona designer kan fungera bra när det är enkla, som i bilden, men de är mycket svåra att felsöka och bygga vidare på, eftersom olika element klockas vid olika tidpunkter. Usch!
Lösningar med att återkoppla en asynkron reset är inget bra. En synkron räknare med synkron reset eller vippor och grindar som ger rätt delning är det stabilaste. Johnsonräknaren i första exemplet är bra om något skall avkodas glitchfritt. Där ändras endast en vippa för varje klockpuls.
Det finns räknare som kan sättas synkront. Med en sådan och en grind som känner av när den står på noll och då ger signal så nästa klocka sätter räknaren är nog det enklaste när det behövs udda delningstal.
Med t.ex. 4017 eller liknande så kan man få utgången synkron genom att köra signalen genom t.ex. en halv 74xx74 som klockas med ingångsklockan. (Förutsatter att vald 74xx74 är snabb i förhållande till 4017, eller enklare att 74xx74 klockas på omvänd flank jämfört med 4017)
Det kan fungera, men det brister i modern designmetodik och inget som man bör lära ut till någon på 2020-talet. Det fanns en tid när man inte hade så många transistorer på kiselbrickan för en rimig peng, och då var man tvungen att vara ingenjörsmässigt kreativ/finurlig/listig och lösa sitt problem med de bitar/kretsar som fanns.
Att designa asynkront är dålig metodik för att det krävs "specialare" för att det skall fungera, typ "7474 måste vara snabb jämfört med 4017" (det syns ju inte i schemat om ingen präntat dit det i klartext) eller att en av alla kretsar i konstruktionen klockas på omvänd flank osv. Kan fungera för one-offs (och det kan mycket väl vara helt okej i specifika fall), men det är inget som skalar säkert över storlek, logikfamilj, temperatur etc. (Se tex schemat på kaskadkopplingen i databladet för 4017. Varje ny 4017 i kaskaden får en fördröjd output jämfört med föregående, och utsignalerna kommer att överlappa med glitchar och skit som följd om man bygger någon avkodare baserad på dem. Urk.)
Synkron design, å andra sidan, innebär att alla klockade element går på precis samma klocka och samma flank. Då minimerar man alla möjliga synkroniseringsproblem till det enda problemet att distribuera klockan till alla enheter samtidigt. Det kan vara svårt nog, men det är bara ETT problem att lösa, istället för okänt antal asynkrona temperaturberoende hickups, glitchar, violeringar av setup och holdtider, metastabilitet osv. All modern digital elektronik (med mycket få specialundantag) är baserade på denna metodik.
74x163 är helt synkron, använd gärna den. Det är en fyrabitarsräknare, så den kräver antagligen några extra grindar för att avkoda en nollställningssignal om man vill räkna modulo N, men designen kommer att vara vattentät.
När jag läste ’violering’ tänkte jag att nu har väl svengelskan nått sin topp, men violera har ju faktiskt funnits i ordboken sen åtminstone 1500-talet. Tänka sig.