กลับไปหน้าบทความ

อ่าน 12 นาที

ไม่มีชื่อบทความ

ใน อิเล็กทรอนิกส์ดิจิทัล ตัว นับ เป็น วงจร ตรรกะแบบลำดับ ที่นับและเก็บจำนวนการเปลี่ยนแปลงเชิงบวกหรือเชิงลบของ สัญญาณนาฬิกา [ 1 ] โดยทั่วไป ตัวนับจะประกอบด้วย ฟลิปฟลอป...

เคาน์เตอร์ (ดิจิทัล)

วงจรรวมที่มีตัวนับดิจิทัล (ตัวนับทศวรรษแบบซิงโครนัส 4 บิต, Signetics 74162N)

ในอิเล็กทรอนิกส์ดิจิทัลตัวนับเป็น วงจร ตรรกะแบบลำดับที่นับและเก็บจำนวนการเปลี่ยนแปลงเชิงบวกหรือเชิงลบของสัญญาณนาฬิกา[ 1 ]โดยทั่วไป ตัวนับจะประกอบด้วยฟลิปฟลอป ซึ่งเก็บค่าที่แสดงถึงการนับปัจจุบัน และในหลายกรณีจะมีตรรกะเพิ่มเติมเพื่อสร้างลำดับการนับเฉพาะ ตรวจสอบนาฬิกา และดำเนินการฟังก์ชันอื่นๆ การเปลี่ยนแปลง ของนาฬิกาที่เกี่ยวข้องแต่ละครั้งจะทำให้การนับปัจจุบันเพิ่มขึ้นหรือลดลง (เพิ่มขึ้นหรือลดลงทีละหนึ่ง)

ตัวนับดิจิทัลเป็นเครื่องสถานะจำกัด[ 2 ]ที่มี สัญญาณอินพุต นาฬิกาและสัญญาณเอาต์พุตหลายตัวที่แสดงถึงสถานะโดยรวม สถานะจะระบุจำนวนนับปัจจุบัน ซึ่งเข้ารหัสโดยตรงเป็น เลข ฐานสองหรือเลขฐานสิบแบบเข้ารหัสฐานสอง (BCD) หรือใช้การเข้ารหัสเช่นone-hotหรือGray codeตัวนับส่วนใหญ่มี อินพุต รีเซ็ตซึ่งใช้ในการเริ่มต้นการนับ ขึ้นอยู่กับการออกแบบ ตัวนับอาจมีอินพุตเพิ่มเติมเพื่อควบคุมฟังก์ชันต่างๆ เช่น การเปิดใช้งานการนับและการโหลดข้อมูลแบบขนาน

ตัวนับดิจิทัลถูกจำแนกประเภทได้หลายวิธี รวมถึงตามคุณลักษณะ เช่น โมดูลัสและการเข้ารหัสเอาต์พุต และตามความสามารถเพิ่มเติม เช่น การโหลดข้อมูลล่วงหน้าและการนับแบบสองทิศทาง (ขึ้นและลง) ตัวนับทุกตัวถูกจัดประเภทเป็นแบบซิงโครนัสหรือแบบอะซิงโครนัส ตัวนับบางประเภท โดยเฉพาะตัวนับแบบวงแหวนและตัวนับแบบจอห์นสัน ถูกจำแนกประเภทตามสถาปัตยกรรมเฉพาะของมัน

ตัวนับเป็นวงจรลำดับที่ใช้กันทั่วไปมากที่สุด[ 2 ] และมีการใช้งานอย่างแพร่หลายในคอมพิวเตอร์ การวัดและการควบคุม อินเทอร์เฟซอุปกรณ์ และแอปพลิเคชันอื่นๆ มีการนำไปใช้เป็น วงจรรวมแบบสแตนด์อะโลนและเป็นส่วนประกอบของวงจรรวมขนาดใหญ่ เช่น ไมโครคอนโทรลเลอร์และ FPGA

ลักษณะเฉพาะ

ตัว นับ อิเล็กทรอนิกส์เป็น วงจร ลอจิกแบบลำดับที่มีสัญญาณอินพุตเป็นสัญญาณนาฬิกาและกลุ่มของสัญญาณเอาต์พุตที่แสดงค่า "นับ" จำนวนเต็ม ในแต่ละขอบสัญญาณนาฬิกาที่ตรงตามเงื่อนไข วงจรจะเพิ่มค่า (หรือลดค่า ขึ้นอยู่กับการออกแบบวงจร ) ค่าที่เก็บไว้ เมื่อค่าที่นับถึงจุดสิ้นสุดของลำดับการนับ (ค่าสูงสุดเมื่อเพิ่มค่า; ค่าศูนย์เมื่อลดค่า) สัญญาณนาฬิกาถัดไปจะทำให้ค่าที่นับเกินหรือต่ำกว่าค่าที่กำหนด และลำดับการนับจะเริ่มต้นใหม่ ซึ่งเหตุการณ์นี้โดยทั่วไปเรียกว่าการวนซ้ำ (rollover )

สัญญาณ

สัญญาณทั่วไปบนตัวนับดิจิทัล

ตัวนับทุกตัวมีกลุ่มสัญญาณพื้นฐานที่ใช้ร่วมกันในเครื่องสถานะ:

  • นาฬิกา (อินพุต) - กระตุ้นการเปลี่ยนแปลงสถานะเมื่อขอบขาขึ้นหรือขาลง (เรียกว่าขอบแอคทีฟ[ ​​3 ] )
  • รีเซ็ต (อินพุต) – ตั้งค่าตัวนับเป็นศูนย์ ผู้ผลิตไอซีบางรายเรียกสัญญาณนี้ว่า "เคลียร์" หรือ "มาสเตอร์รีเซ็ต (MR)" ขึ้นอยู่กับการออกแบบตัวนับ สัญญาณนี้อาจเป็นแบบอะซิงโครนัสหรือซิงโครนัส
  • ค่าที่นับได้ (เอาต์พุต) - เวกเตอร์บิตที่แสดงค่าที่นับสะสมได้ ขึ้นอยู่กับการออกแบบตัวนับ ค่านี้อาจเป็นสถานะปัจจุบัน (เอาต์พุตของฟลิปฟลอป) หรือการเข้ารหัสสถานะปัจจุบันก็ได้

นอกจากสัญญาณ Clock และ Reset แล้ว เคาน์เตอร์หลายตัวยังมีสัญญาณอินพุตอื่นๆ อีก เช่น:

  • เปิดใช้งาน – อนุญาตหรือระงับการนับ บางครั้งอาจมีป้ายกำกับว่าCE (count enable)
  • ทิศทาง – กำหนดว่าจำนวนนับจะเพิ่มขึ้นหรือลดลง
  • ข้อมูล – ข้อมูลป้อนเข้าแบบขนานซึ่งแสดงถึงค่าจำนวนเฉพาะค่าหนึ่ง
  • Load – คัดลอกข้อมูลอินพุตแบบขนานไปยังตัวนับ โดยทั่วไปแล้วจะมีลำดับความสำคัญเหนือกว่า Enable หากทั้ง Load และ Enable ถูกยืนยัน[ 2 ]

อินพุตของตัวนับส่วนใหญ่จะเป็นแบบซิงโครนัส ซึ่งหมายความว่าจะมีผลต่อการทำงานของตัวนับเฉพาะเมื่อมีขอบสัญญาณนาฬิกาที่ใช้งานอยู่เท่านั้น สำหรับตัวนับแต่ละตัว สัญญาณอินพุตแบบซิงโครนัสแต่ละตัวจะต้องตรงตามเวลาตั้งค่าและเวลาคงค่าที่จำเป็นสำหรับการทำงานที่ถูกต้อง (กล่าวคือ จะต้องเสถียรทั้งก่อนและหลังขอบสัญญาณนาฬิกาที่ใช้งานอยู่แต่ละครั้งเป็นเวลาขั้นต่ำที่กำหนด) [ 3 ]

เคาน์เตอร์บางตัวมีเอาต์พุต "Terminal Count" ซึ่งบ่งชี้ว่าสัญญาณนาฬิกาถัดไปจะทำให้เกิดการโอเวอร์โฟลว์หรืออันเดอร์โฟลว์ มีการใช้งานในหลายรูปแบบ เช่น:

  • เพื่อใช้งานการต่อตัวนับแบบเรียงลำดับ (การรวมตัวนับสองตัวขึ้นไปเพื่อสร้างตัวนับขนาดใหญ่ตัวเดียว) โดยการเชื่อมต่อเอาต์พุต Terminal Count ของตัวนับตัวหนึ่งเข้ากับอินพุต Enable ของตัวนับตัวถัดไป
  • เพื่อเปลี่ยนค่าโมดูลัสของตัวนับ โดยเชื่อมต่อ Terminal Count เข้ากับอินพุต Load ของตัวนับ และป้อนค่าที่เหมาะสมลงในอินพุต Data

การเข้ารหัสเอาต์พุต

ในขณะที่นับ ตัวนับทุกตัวจะสร้างลำดับของรหัสเอาต์พุต (รูปแบบบิต) บนเอาต์พุตการนับ รหัสลำดับเหล่านี้จำนวนมาก ไม่ว่าจะโดยการออกแบบหรือเนื่องจากธรรมชาติของตัวนับ จะสอดคล้องกับระบบการเข้ารหัสที่ใช้กันอย่างแพร่หลาย การเข้ารหัสเอาต์พุตหลายประเภทที่ใช้กันทั่วไปในตัวนับ ได้แก่ ไบนารี, BCD, รหัสเกรย์ และวันฮอต

โมดูลัส

ค่าโมดูลัสของตัวนับคือจำนวนสถานะในลำดับการนับ[ 2 ]ตัวนับที่มีค่าโมดูลัสmมักเรียกว่า ตัวนับ โมดูลัส-mหรือMOD-mตัวอย่างเช่นตัวนับทศวรรษเป็นตัวนับดิจิทัลที่มีสิบสถานะ ดังนั้นจึงเป็นตัวนับ MOD-10 [ 4 ]

ค่าโมดูลัสสูงสุดที่เป็นไปได้ของตัวนับจะถูกกำหนดโดยจำนวนฟลิปฟลอป โดยเฉพาะอย่างยิ่ง ตัวนับที่มี ฟลิปฟลอป n ตัวจะมีค่าโมดูลัสสูงสุดที่เป็นไปได้คือ2 n [ 4 ] ตัวอย่างเช่น ตัวนับสี่บิตสามารถมีค่าโมดูลัสได้ถึง 16 ( 2 4 )

ตัวนับบางประเภท (เช่น ตัวนับไบนารี) จะรวมสถานะที่เป็นไปได้ทั้งหมดไว้ในลำดับการนับ ส่วนตัวนับประเภทอื่นจะละเว้นสถานะที่เป็นไปได้หนึ่งสถานะหรือมากกว่านั้นจากลำดับการนับ ตัวอย่างเช่น ตัวนับ MOD-10 (ทศวรรษ) ที่ใช้ฟลิปฟลอปสี่ตัว จะใช้เพียงสิบสถานะจากทั้งหมด 16 สถานะที่เป็นไปได้เท่านั้น

วิธีการจับเวลา

โดยทั่วไปแล้ว ตัวนับจะถูกแบ่งออกเป็นสองประเภทหลัก คือ แบบซิงโครนัสและแบบอะซิงโครนัส ขึ้นอยู่กับว่าฟลิปฟลอปของตัวนับนั้นได้รับสัญญาณนาฬิกาพร้อมกันหรือในเวลาที่ต่างกัน

ซิงโครนัส

ตัวนับแบบซิงโครนัสเป็นตัวนับดิจิทัลที่ฟลิปฟลอปทั้งหมดใช้สัญญาณนาฬิการ่วมกันและเปลี่ยนสถานะพร้อมกัน[ 3 ]

อะซิงโครนัส (ระลอกคลื่น)

ในตัวนับแบบอะซิงโค รนัส หรือที่รู้จักกันในชื่อตัวนับแบบริปเปิล [ 4 ]ฟลิปฟลอปแต่ละตัวจะมีสัญญาณนาฬิกาเฉพาะตัว ฟลิปฟลอปจะถูกจัดเรียงเป็น "โซ่" โดยสัญญาณนาฬิกาขาเข้าของตัวนับจะเชื่อมต่อกับฟลิปฟลอปตัวแรก และเอาต์พุตของฟลิปฟลอปแต่ละตัวจะส่งสัญญาณนาฬิกาไปยังฟลิปฟลอปตัวถัดไปในโซ่ ลำดับการนับตามธรรมชาติของวงจรดังกล่าวเป็นแบบไบนารี ดังนั้นตัวนับแบบอะซิงโครนัสส่วนใหญ่จึงเป็นแบบไบนารี โดยฟลิปฟลอปแต่ละตัวจะเก็บค่าการนับแบบไบนารีหนึ่งบิต[ 5 ]

เนื่องจากฟลิปฟลอปแต่ละตัวทำให้เกิดความล่าช้าจากขอบสัญญาณนาฬิกาที่ทำงานอยู่ไปยังการเปลี่ยนสถานะของเอาต์พุต บิตของตัวนับจึงเปลี่ยนสถานะในเวลาที่ต่างกัน ส่งผลให้เกิดผลกระทบแบบลูกโซ่ที่ทำให้การนับไม่เสถียรในขณะที่สัญญาณนาฬิกาขาเข้าส่งผ่านฟลิปฟลอป ในระหว่างความไม่เสถียรนี้ การนับจะเปลี่ยนสถานะผ่านค่าที่ไม่ถูกต้องหนึ่งค่าหรือมากกว่านั้นในช่วงเวลาสั้นๆ ระยะเวลาของความไม่เสถียรนี้ ( เวลาการเข้าสู่สภาวะคงที่) ขึ้นอยู่กับหลายปัจจัย รวมถึงความล่าช้าจากสัญญาณนาฬิกาไปยังเอาต์พุตสำหรับฟลิปฟลอปแต่ละตัว และสำหรับการเปลี่ยนแปลงการนับแต่ละครั้ง จำนวนบิตที่เปลี่ยนสถานะ เวลาการเข้าสู่สภาวะคงที่สูงสุดเกิดขึ้นเมื่อบิตของตัวนับทั้งหมดเปลี่ยนสถานะ (เช่น เมื่อตัวนับล้นหรือต่ำกว่าค่าที่กำหนด) และดังนั้นจึงเป็นสัดส่วนกับจำนวนของฟลิปฟลอป

สิ่งนี้ทำให้ตัวนับแบบริปเปิลไม่เหมาะสำหรับการใช้งานในวงจรซิงโครนัสที่ต้องการให้ตัวนับมีเวลาการตั้งค่าเอาต์พุตที่รวดเร็ว[ 6 ]นอกจากนี้ การใช้บิตเอาต์พุตของตัวนับแบบริปเปิลเป็นสัญญาณนาฬิกาสำหรับวงจรภายนอกมักทำได้ยาก เนื่องจากเอฟเฟกต์ริปเปิลทำให้เกิดความคลาดเคลื่อนของเวลาระหว่างบิต ตัวนับแบบริปเปิลมักใช้เป็นตัวนับอเนกประสงค์และตัวแบ่งความถี่สัญญาณนาฬิกาในแอปพลิเคชันที่การนับทันทีและความคลาดเคลื่อนของเวลาไม่สำคัญ ตัวนับแบบอะซิงโครนัสโดยทั่วไปไม่ได้ใช้ใน VLSI IC เนื่องจากความยากลำบากในการจำลองและทดสอบ และเนื่องจากต้องใช้ความพยายามในการออกแบบมากขึ้นเพื่อให้มั่นใจถึงการทำงานที่เชื่อถือได้[ 3 ]

นับทิศทาง

ตัวนับจำนวนมากถูกออกแบบมาให้นับได้เพียงทิศทางเดียว ซึ่งหมายความว่าจะนับขึ้นหรือนับลงเท่านั้น แต่ไม่สามารถนับทั้งสองอย่างได้ ตัวนับที่นับขึ้นอย่างเดียวมักเรียกว่าตัวนับขึ้นและตัวนับที่นับลงอย่างเดียวเรียกว่าตัวนับลง[ 6 ]

ตัวนับแบบสองทิศทางหรือตัวนับขึ้น/ลงคือตัวนับดิจิทัลที่นับขึ้นหรือลงตามคำสั่งของสัญญาณควบคุมทิศทาง ในตัวนับขึ้น/ลงแบบซิงโครนัส สัญญาณควบคุมจะเป็นสัญญาณดิจิทัลอินพุตเดียว ซึ่งสถานะของสัญญาณจะบ่งบอกทิศทางการนับ (เช่น '1' = นับขึ้น; '0' = นับลง) ในตัวนับขึ้น/ลงแบบอะซิงโครนัส การควบคุมทิศทางอาจประกอบด้วยสัญญาณนาฬิกาอินพุต "ขึ้น" และ "ลง" แยกกันก็ได้

ประเภททั่วไป

ตัวนับไบนารี

ตัวนับไบนารีเป็นตัวนับดิจิทัลที่แสดงค่าการนับโดยตรงในรูปเลขไบนารี ตัวนับไบนารีเป็นตัวนับ MOD- 2nโดยที่ n คือจำนวนฟลิปฟลอปที่ใช้ในการเก็บค่าการนับ ตัวอย่างเช่น ภาพประกอบด้านล่างแสดงพฤติกรรมของตัวนับไบนารี 5 บิต ซึ่งมี 32 ( 2⁵ ) สถานะ และดังนั้นจึงเป็นตัวนับ MOD-32:

ตัวนับไบนารีแบบอะซิงโครนัส

ตัวนับไบนารีแบบอะซิงโครนัส หรือตัวนับไบนารีแบบริปเปิล คือ "โซ่" ของฟลิปฟลอปแบบสลับ (T) (หรือเทียบเท่า) โดยที่ฟลิปฟลอปที่มีค่าต่ำที่สุด (บิต 0) จะถูกควบคุมด้วยสัญญาณนาฬิกาอินพุตของตัวนับ และฟลิปฟลอปอื่นๆ ทั้งหมดจะถูกควบคุมด้วยสัญญาณนาฬิกาเอาต์พุตของฟลิปฟลอปที่อยู่ใกล้ที่สุดและมีค่าน้อยกว่า (เช่น บิต 0 ควบคุมฟลิปฟลอปบิต 1, บิต 1 ควบคุมฟลิปฟลอปบิต 2 เป็นต้น) เมื่อนำไปใช้กับ ฟลิปฟลอป JKหรือDแต่ละฟลิปฟลอปจะถูกกำหนดค่าให้สลับเมื่อได้รับสัญญาณนาฬิกา (เช่น J และ K เชื่อมต่อกับลอจิกสูง; D เชื่อมต่อกับQ )

ฟลิปฟลอปแต่ละตัวเปรียบเสมือนตัวนับหนึ่งบิตที่เพิ่มค่าการนับ (โดยการสลับสถานะของเอาต์พุต) หนึ่งครั้งต่อรอบสัญญาณนาฬิกา มันจะนับจากศูนย์ถึงหนึ่ง และเมื่อสัญญาณนาฬิกาถัดไปมาถึง มันจะโอเวอร์โฟลว์และเริ่มต้นลำดับการนับใหม่ที่ศูนย์ สถานะของเอาต์พุตแต่ละตัวจะคงอยู่เป็นเวลาหนึ่งรอบสัญญาณนาฬิกาขาเข้า และด้วยเหตุนี้ ความถี่ของสัญญาณเอาต์พุตของฟลิปฟลอปแต่ละตัวจึงเป็นครึ่งหนึ่งของความถี่ของสัญญาณนาฬิกาขาเข้า สามารถเพิ่มฟลิปฟลอปเพิ่มเติมลงในวงจรเพื่อสร้างตัวนับที่มีขนาดคำ (จำนวนบิต) ใดๆ ก็ได้ โดยความถี่ของเอาต์พุตของแต่ละบิตจะเท่ากับครึ่งหนึ่งของความถี่ของบิตที่ใกล้ที่สุดซึ่งมีความสำคัญน้อยกว่า

ตัวนับไบนารีแบบซิงโครนัส

ตัวนับไบนารีแบบซิงโครนัสเป็นตัวนับแบบซิงโครนัสที่ส่งค่าการนับเป็นเลขไบนารี วงจรที่แสดงด้านล่างเป็นตัวนับไบนารีสี่บิตแบบซิงโครนัสที่นับขึ้น โดยใช้ฟลิปฟลอป JK เมื่อสัญญาณนาฬิกาเปลี่ยนเป็นขอบขาขึ้น บิตที่มีค่าน้อยที่สุด (Q0 จะสลับสถานะเสมอ ในขณะที่บิตอื่นๆ จะสลับสถานะก็ต่อเมื่อบิตที่มีค่าน้อยกว่าทั้งหมดอยู่ในสถานะลอจิกสูง (เช่น Q1 สถานะถ้า Q0 ลอจิกสูง; Q2 สถานะถ้า Q0 Q1 ลอจิก สูงทั้งคู่; และ Q3 สถานะถ้า Q0 Q1 Q2 ลอ จิกสูงทั้งหมด)

ตัวนับเลขฐานสอง 4 บิตแบบซิงโครนัสโดยใช้ฟลิปฟลอป JK

เช่นเดียวกับตัวนับแบบอะซิงโครนัส ฟลิปฟลอปแต่ละตัวจะทำให้เกิดความล่าช้าตั้งแต่ขอบสัญญาณนาฬิกาขาเข้าจนถึงการสลับสถานะเอาต์พุต แต่ในกรณีนี้ ฟลิปฟลอปทั้งหมดจะเปลี่ยนสถานะพร้อมกัน และด้วยเหตุนี้ เอาต์พุตของตัวนับจะคงที่หลังจากความล่าช้าของฟลิปฟลอปเพียงหนึ่งตัวเท่านั้น โดยไม่คำนึงถึงจำนวนบิต

ตัวนับทศวรรษ BCD

ตัว นับทศนิยม แบบไบนารีโค้ดเดซิเมล (BCD) เป็นตัวนับแบบ MOD-10 ที่แสดงค่าการนับโดยตรงเป็นเลขฐานสองในช่วง 0 ถึง 9 โดยทั่วไป ตัวนับทศนิยม BCD จะนับขึ้นจาก 0 ถึง 9 แล้วจึงเกินค่าที่กำหนด เนื่องจากช่วงค่าเอาต์พุตเหมือนกับช่วงค่าของเลขฐานสิบ ตัวนับทศนิยม BCD จึงนิยมใช้ในการแสดงค่าเลขฐานสิบ

สถานะเอาต์พุตตัวนับทศวรรษ BCD
สถานะคิว0ไตรมาสที่ 1ไตรมาสที่ 2ไตรมาสที่ 3
00000
11000
20100
31100
40010
51010
60110
71110
80001
91001

ตัวนับทศวรรษ BCD แบบอะซิงโครนัส

วงจรที่แสดงด้านล่างนี้เป็นตัวนับทศนิยม BCD แบบอะซิงโครนัส โดยพื้นฐานแล้วมันคือตัวนับแบบริปเปิลไบนารี 4 บิต ที่ใช้เกต AND ในการรีเซ็ตค่านับเป็นศูนย์ (โดยการรีเซ็ตฟลิปฟลอปทั้งหมด) เมื่อค่าไบนารีเพิ่มขึ้นเป็น 10 (ไบนารี 1010) ทำให้มีสถานะเอาต์พุต 10 สถานะ เช่นเดียวกับตัวนับแบบอะซิงโครนัสทั้งหมด ค่าที่เก็บไว้จะไม่เสถียรในขณะที่สัญญาณนาฬิกาภายนอกส่งผ่านไปยังโซ่ฟลิปฟลอป (รวมถึงการรีเซ็ตเมื่อถึงค่านับ 10)

ตัวนับทศวรรษ BCD แบบซิงโครนัส

วงจรที่แสดงด้านล่างนี้คือตัวนับทศวรรษ BCD แบบซิงโครนัส ใช้เกตตรรกะห้าตัวในการสร้างตรรกะสถานะถัดไป ซึ่งช่วยให้การทำงานเร็วกว่าตัวนับแบบอะซิงโครนัส แต่ต้องแลกมาด้วยวงจรเพิ่มเติม

ตัวนับทศวรรษ BCD แบบซิงโครนัส

ตัวนับวงแหวน

ตัวนับแบบวงแหวน ( Ring Counter)คือรีจิสเตอร์เลื่อนแบบวงกลม (Shift Register ) ซึ่งเริ่มต้นการทำงาน (ผ่านสัญญาณอินพุตรีเซ็ต) โดยที่ฟลิปฟลอปตัวหนึ่ง (โดยทั่วไปคือบิตที่ 0) จะเก็บค่า '1' และฟลิปฟลอปอื่นๆ จะเก็บค่า '0' แต่ละพัลส์ของสัญญาณนาฬิกาจะทำให้ค่า '1' เลื่อนไปยังฟลิปฟลอปถัดไป เมื่อค่า '1' ไปถึงฟลิปฟลอปตัวสุดท้ายในรีจิสเตอร์เลื่อน สัญญาณนาฬิกาถัดไปจะทำให้ค่า '1' เลื่อนไปยังฟลิปฟลอปตัวแรก ทำให้ลำดับการนับเริ่มต้นใหม่และส่งผลให้ตัวนับโอเวอร์โฟลว์ ณ เวลาใดเวลาหนึ่ง จะมีเพียงบิตเอาต์พุตของตัวนับเพียงบิตเดียวเท่านั้นที่เป็นลอจิก '1' ดังนั้น ตัวนับแบบวงแหวนจึงเป็นเหมือนเครื่องสถานะแบบวันฮอต (One-Hot State Machine )

ตัวนับแบบวงแหวน (Ring Counter) เป็นแบบ MOD-n โดยที่ n คือจำนวนฟลิปฟลอป ตัวอย่างเช่น ตัวนับแบบวงแหวนที่แสดงด้านล่างมีฟลิปฟลอปสี่ตัว ดังนั้นจึงเป็นตัวนับแบบ MOD-4 ในตัวนับนี้ บิตที่ 0 จะถูกตั้งค่าไว้ตั้งแต่เริ่มต้น และบิตอื่นๆ ทั้งหมดจะถูกล้างค่า

ตัวนับแบบวงแหวน 4 บิต พร้อมอินพุตการรีเซ็ตแบบซิงโครนัส ซึ่งจะกำหนดค่าเริ่มต้นของบิตที่ 0 เป็น '1' และบิตอื่นๆ ทั้งหมดเป็น '0'

สถานะเอาต์พุตของตัวนับวงแหวน 4 บิต
นับคิว0ไตรมาสที่ 1ไตรมาสที่ 2ไตรมาสที่ 3
01000
10100
20010
30001

จอห์นสันโต้กลับ

ตัวนับจอห์นสันเป็นรีจิสเตอร์เลื่อนแบบวงกลมซึ่งเอาต์พุตของสเตจสุดท้ายจะถูกกลับค่าและเชื่อมต่อกับอินพุตข้อมูลของสเตจแรก[ 7 ] [ 8 ] [ 9 ]และบิตทั้งหมดจะถูกกำหนดค่าเริ่มต้นเป็นศูนย์ ทำให้เกิด ลำดับเอาต์พุต โค้ดเกรย์สามารถใช้สัญญาณนาฬิกาที่ความถี่ค่อนข้างสูงได้เนื่องจากไม่มีเกตตรรกะระดับกลาง และด้วยเหตุนี้ความล่าช้าในการแพร่กระจาย ในกรณีที่เลวร้ายที่สุด จึงมาจากสัญญาณนาฬิกาไปยังเอาต์พุตของฟลิปฟลอป ตัวนับจอห์นสันเป็นแบบ MOD-2n โดยที่ n คือจำนวนฟลิปฟลอป ตัวอย่างเช่น ตัวนับจอห์นสันที่แสดงด้านล่างมีฟลิปฟลอปสี่ตัว ดังนั้นจึงเป็นตัวนับแบบ MOD-8

ตัวนับจอห์นสัน 4 บิต โดยใช้ฟลิปฟลอปชนิด D สี่ตัว

สถานะเอาต์พุตของตัวนับจอห์นสัน 4 บิต
สถานะคิว0ไตรมาสที่ 1ไตรมาสที่ 2ไตรมาสที่ 3
00000
11000
21100
31110
41111
50111
60011
70001

ตัวนับจอห์นสันมักใช้เป็นตัวเรียงลำดับเครื่องสถานะ เป็นตัวแบ่งความถี่ในแอปพลิเคชันการนับความถี่สูง และในแอปพลิเคชันเฉพาะทาง เช่น การสร้างรูปคลื่นอนาล็อก (เช่น เครื่องกำเนิดไซน์ของเดวีส์) [ 10 ]

คุณลักษณะของเครื่องสถานะ

ทะเบียนของรัฐ

ตัวนับดิจิทัลเป็นเครื่องสถานะจำกัด (finite state machine) โดยที่ฟลิปฟลอปของตัวนับทำหน้าที่เป็นรีจิสเตอร์สถานะ ค่าที่เก็บไว้ในรีจิสเตอร์สถานะคือเวกเตอร์บิตที่ประกอบด้วยสถานะปัจจุบันของตัวนับ

การจัดลำดับสถานะ

เมื่อไม่ได้รับอิทธิพลจากสัญญาณอินพุต ตัวนับจะวนซ้ำตามลำดับสถานะที่กำหนดไว้[ 2 ]ด้วยเหตุนี้แผนภาพสถานะของตัวนับจึงมีลักษณะเป็นวงวน ตัวอย่างเช่น ตัวนับ MOD-8 จะวนซ้ำผ่านแปดสถานะ:

รัฐที่ผิดกฎหมาย

แผนภาพสถานะของตัวนับทศวรรษ BCD 4 บิต สถานะที่ไม่ถูกต้องทั้งหมด (แสดงด้วยบริเวณสีแดง) จะเปลี่ยนไปเป็นสถานะรีเซ็ตโดยอัตโนมัติเมื่อได้รับขอบสัญญาณนาฬิกาที่ทำงานอยู่ครั้งถัดไป ซึ่งช่วยให้สามารถกู้คืนจากสถานะที่ไม่ถูกต้องได้โดยอัตโนมัติ

เคาน์เตอร์ที่มีn{\displaystyle n}ฟลิปฟลอปและโมดูลัส<2n{\displaystyle m<2^{n}}ใช้เพียงเศษส่วนของสถานะที่เป็นไปได้เท่านั้น สถานะที่ไม่ได้ใช้ โดยทั่วไปเรียกว่าสถานะผิดกฎหมาย [ 2 ]เนื่องจากถูกห้ามในระหว่างการทำงานปกติ โดยทั่วไป MOD-{\displaystyle m}เคาน์เตอร์ด้วยn{\displaystyle n}รองเท้าแตะแบบพลิกกลับมี2n{\displaystyle 2^{n}-m}สถานะที่ผิดกฎหมาย ตัวอย่างเช่น ตัวนับทศวรรษ BCD MOD-10 ที่มีฟลิปฟลอปสี่ตัวมีหก (2410=6{\displaystyle 2^{4}-10=6}รัฐที่ผิดกฎหมาย เคาน์เตอร์ของจอห์นสันมี2n2n{\displaystyle 2^{n}-2n}และตัวนับวงแหวนมี2nn{\displaystyle 2^{n}-n}รัฐที่ผิดกฎหมาย

ในระหว่างการทำงานปกติ ตัวนับจะไม่เข้าสู่สถานะที่ไม่ถูกต้อง อย่างไรก็ตาม ในบางกรณี อาจเกิดความผิดพลาดขึ้นได้ (เช่น จากสัญญาณรบกวนของแหล่งจ่ายไฟ การสัมผัสกับรังสี) ซึ่งอาจทำให้ตัวนับเข้าสู่สถานะที่ไม่ถูกต้องโดยไม่ได้ตั้งใจ เพื่อรองรับความเป็นไปได้นี้ ตัวนับมักถูกออกแบบให้กู้คืนจากสถานะที่ไม่ถูกต้องโดยอัตโนมัติ โดยการเปลี่ยนไปสู่สถานะที่ถูกต้องเมื่อถึงขอบสัญญาณนาฬิกาที่ทำงานอยู่ครั้งถัดไป เมื่อการกู้คืนเกิดขึ้น ค่าที่นับได้อาจไม่ถูกต้อง แต่ลำดับการนับปกติจะกลับคืนมาทันที และจะป้องกันไม่ให้เกิดสถานะที่ไม่ถูกต้องขึ้นอีก

แบบจำลองทั่วไป

โดยทั่วไปแล้วเคาน์เตอร์ดิจิทัลจะถูกนำไปใช้เป็นเครื่องมัวร์เนื่องจากเอาต์พุตของเคาน์เตอร์จะถูกกำหนดโดยสถานะปัจจุบันเท่านั้น[ 11 ]ซึ่งทำให้เคาน์เตอร์เหมาะสมกับเครื่องมัวร์โดยธรรมชาติ ซึ่งในทางกลับกันจะทำให้การออกแบบง่ายขึ้นและส่งเสริมการทำงานที่เชื่อถือได้[ 1 ]

โดยเฉพาะอย่างยิ่ง ตัวนับมักจะถูกนำไปใช้เป็นเครื่องสถานะ Medvedev ซึ่งเป็นคลาสย่อยของเครื่อง Moore ซึ่งส่งออกสถานะปัจจุบันโดยตรง โดยแต่ละสถานะจะเข้ารหัสค่าการนับที่เฉพาะเจาะจง[ 12 ]เนื่องจากรีจิสเตอร์สถานะของเครื่องดังกล่าวเชื่อมต่อโดยตรงกับเอาต์พุตของตัวนับ จึงไม่จำเป็นต้องใช้ตรรกะการเข้ารหัส และลดความล่าช้าของเอาต์พุตให้น้อยที่สุด

สถาปัตยกรรมทั่วไปของเคาน์เตอร์ดิจิทัล
เครื่องจักรเมดเวเดฟ
แบบจำลองทั่วไปของตัวนับที่นำมาใช้เป็นเครื่อง Medvedev ตัวนับส่วนใหญ่ใช้แบบจำลองนี้[ 12 ]
เครื่องจักรฟูลมัวร์
แบบจำลองทั่วไปของตัวนับที่ถูกนำมาใช้ในรูปแบบเครื่องจักร Moore แบบสมบูรณ์ โดยมีตรรกะการเข้ารหัสเอาต์พุตอยู่ระหว่างรีจิสเตอร์สถานะและเอาต์พุตของตัวนับ

ตัวนับบางประเภทใช้ตรรกะเชิงผสมระหว่างรีจิสเตอร์สถานะและเอาต์พุตของตัวนับเพื่อแปลงสถานะไปเป็นการเข้ารหัสเอาต์พุตเฉพาะ และด้วยเหตุนี้จึงถูกจัดประเภทเป็นเครื่องจักรแบบมัวร์เต็มรูปแบบ ตัวอย่างเช่น วงจรรวม CMOS 4017 เข้ารหัสเอาต์พุตของตัวนับทศวรรษแบบจอห์นสันเป็นรูปแบบวันฮอต โดยใช้ประโยชน์จากเอาต์พุตโค้ดเกรย์โดยธรรมชาติของตัวนับจอห์นสันเพื่อหลีกเลี่ยงความผิดพลาดบนเอาต์พุตวันฮอต

การดำเนินการ

ตัวนับถูกนำไปใช้งานในหลากหลายรูปแบบ รวมถึงวงจรรวมMSIและLSI โดยเฉพาะ ตัวนับแบบฝังตัวภายในASICอุปกรณ์ต่อพ่วงตัวนับและตัวจับเวลาอเนกประสงค์ในไมโครคอนโทรลเลอร์และบล็อก IPในFPGAในกรณีหลัง ตัวนับมักจะถูกสร้างขึ้นโดยการสังเคราะห์จากคำอธิบายที่เขียนในVHDL , Verilog หรือ ภาษาอธิบายฮาร์ดแวร์อื่นๆตัวอย่างเช่น โค้ด VHDL ต่อไปนี้อธิบายตัวนับขึ้น/ลงแบบไบนารี 32 บิต พร้อมความสามารถในการเปิดใช้งานการนับและการโหลดล่วงหน้า:

entity bidirectional_counter is port ( -- สัญญาณอินพุต/เอาต์พุตของตัวนับ: CLK : in std_logic ; -- สัญญาณนาฬิกาRESET : in std_logic ; -- รีเซ็ตแบบอะซิงโครนัสENABLE : in std_logic ; -- เปิดใช้งานการนับLOAD_ENABLE : in std_logic ; -- เปิดใช้งานการโหลดCOUNT_UP : in std_logic ; -- '1' สำหรับการนับขึ้น, '0' สำหรับการนับลงDATA_IN : in unsigned ( 31 downto 0 ); -- ค่าที่จะโหลดลงในตัวนับDATA_OUT : out unsigned ( 31 downto 0 ) -- ค่าตัวนับปัจจุบัน); end bidirectional_counter ;โครงสร้างเชิงพฤติกรรมของตัวนับแบบสองทิศทางคือสัญญาณตัวนับ: unsigned ( 31 downto 0 ) := ( others => '0' ); -- รีจิสเตอร์ตัวนับ เริ่มกระบวนการ( CLK , RESET ) เริ่มถ้าRESET = '1' แล้ว-- ถ้ามีการร้องขอการรีเซ็ตตัวนับcounter <= ( others => '0' ); -- รีเซ็ตตัวนับelsif rising_edge ( CLK ) แล้ว-- มิฉะนั้นเมื่อขอบสัญญาณนาฬิกาขึ้นถ้าLOAD_ENABLE = '1' แล้ว-- ถ้ามีการร้องขอการโหลดcounter <= DATA_IN ; -- ยัดค่าใหม่เข้าไปในตัวนับelsif ENABLE = '0' แล้ว-- มิฉะนั้นถ้าการนับถูกปิดใช้งานnull ; -- ไม่ทำอะไรเลยelsif COUNT_UP = '1' แล้ว-- มิฉะนั้นถ้าเป็นการนับขึ้นcounter <= counter + 1 ; -- เพิ่มค่าตัวนับมิฉะนั้น-- มิฉะนั้นเป็นการนับลง ดังนั้นcounter <= counter - 1 ; -- ลดค่าตัวนับสิ้นสุดถ้า; สิ้นสุดถ้า; สิ้นสุดกระบวนการ; DATA_OUT <= counter ; -- แสดงค่าตัวนับปัจจุบันสิ้นสุดพฤติกรรม;

ในวงจรรวมของ MSI และ LSI ตัวนับจะถูกสร้างขึ้นโดยใช้ชิป เซมิคอนดักเตอร์ ซึ่งจะถูกเชื่อมติดและห่อหุ้มไว้ในแพ็คเกจเซมิคอนดักเตอร์

การเรียงซ้อน

ตัวนับบางตัวสามารถเรียงต่อกันได้หมายความว่าสามารถเชื่อมต่อตัวนับดังกล่าวหลายๆ ตัวเข้าด้วยกันเพื่อสร้างตัวนับขนาดใหญ่ขึ้นที่มีโมดูลัสมากขึ้น เพื่ออำนวยความสะดวกในการเรียงต่อกัน ตัวนับที่เรียงต่อกันได้มักจะมีอินพุตเปิดใช้งานที่เปิดใช้งานการนับ และเอาต์พุตที่ส่งต่อการล้นหรือการน้อยเกินไปไปยังอินพุตเปิดใช้งานของตัวนับถัดไปในการเรียงต่อกัน[ 2 ]

ตัวนับตัวแรก (ที่มีนัยสำคัญน้อยที่สุด) ในวงจรเรียงลำดับอาจถูกเปิดใช้งานอย่างถาวรโดยการเชื่อมต่ออินพุตเปิดใช้งานเข้ากับระดับลอจิก คงที่ หรืออินพุตเปิดใช้งานอาจถูกขับเคลื่อนแบบไดนามิกก็ได้ ในทั้งสองกรณี อินพุตเปิดใช้งานของตัวนับตัวแรกจะทำหน้าที่เป็นตัวเปิดใช้งานการนับสำหรับตัวนับแบบขยายทั้งหมด

โดยทั่วไปแล้ว ตัวนับไบนารีแบบเรียงต่อกันจะส่งสัญญาณริปเปิลแครี่เพื่อแจ้งให้ตัวนับถัดไปในลำดับทราบถึงการโอเวอร์โฟลว์หรืออันเดอร์โฟลว์ที่กำลังจะเกิดขึ้น ตัวอย่างเช่น ในตัวนับขึ้นแบบเรียงต่อกันสี่บิตที่แสดงด้านล่าง วงจร AND จะส่งสัญญาณริปเปิลแครี่เอาต์พุต (RCO) เมื่อคาดว่าสัญญาณนาฬิกาถัดไปจะทำให้เกิดการโอเวอร์โฟลว์ (เช่น เมื่อค่าที่นับเป็นไบนารีคือ 1111 และเปิดใช้งานการนับ):

แอปพลิเคชัน

ตัวนับเลขฐานสองถูกนำมาใช้กันอย่างแพร่หลายในฐานะตัวจับเวลาและตัวนับเหตุการณ์

ในตัวจับเวลาแบบดิจิทัล ตัวนับจะทำงานโดยใช้สัญญาณดิจิทัลแบบเป็นคาบ ซึ่งทำหน้าที่เป็นตัวอ้างอิงเวลาและทำให้ค่าการนับเปลี่ยนแปลงในอัตราคงที่ โดยทั่วไปแล้ว สัญญาณนาฬิกาจะมาจากแหล่งกำเนิดความถี่คงที่ เช่นออสซิเลเตอร์คริสตัลไม่ว่าจะโดยตรงหรือผ่านตัวแบ่งความถี่นาฬิกา ขึ้นอยู่กับการใช้งาน ตัวจับเวลาอาจส่งสัญญาณที่แสดงสถานะการจับเวลา หรืออาจส่งค่าการนับปัจจุบัน หรือทั้งสองอย่าง ในกรณีหลัง ค่าการนับมักจะแสดงเวลาที่ผ่านไปหรือเวลาที่เหลืออยู่

ตัวนับเหตุการณ์มักใช้สำหรับนับเหตุการณ์แบบอะซิงโครนัสที่อาจเกิดขึ้นหรือไม่เกิดขึ้นก็ได้ด้วยความถี่ที่แปรผันได้ ณ เวลาใดเวลาหนึ่ง จำนวนนับปัจจุบันจะแสดงจำนวนเหตุการณ์ที่เกิดขึ้นนับตั้งแต่เริ่มนับเหตุการณ์

การกำหนดแอดเดรสหน่วยความจำ

ตัวนับไบนารีถูกใช้กันอย่างแพร่หลายในคอมพิวเตอร์เพื่อสร้างที่อยู่หน่วยความจำ ในแอปพลิเคชันดังกล่าว เอาต์พุตของตัวนับมักจะเชื่อมต่อกับบัสที่อยู่และใช้เพื่อเลือกตำแหน่งหน่วยความจำที่ต่อเนื่องกันตามลำดับเมื่อค่าการนับเพิ่มขึ้นหรือลดลง ตัวอย่างที่พบได้ทั่วไป ได้แก่ ตัวนับโปรแกรม ตัวควบคุม การเข้าถึงหน่วยความจำโดยตรง (DMA) และบัฟเฟอร์ FIFO เมื่อใช้เพื่อเก็บที่อยู่ข้อมูลระหว่างการดำเนินการถ่ายโอนข้อมูล ตัวนับมักจะเรียกว่ารีจิสเตอร์ที่อยู่หน่วยความจำ (MAR) [ 13 ] [ 14 ]

ตัวนับโปรแกรม

ตัวนับโปรแกรม ( PC) ในหน่วยประมวลผลกลางโดยทั่วไปประกอบด้วยตัวนับไบนารี ดังแสดงในตัวอย่างต่อไปนี้:

ตัวนับโปรแกรมที่ใช้ตัวนับไบนารี n บิต

ในพีซีข้างต้น ตัวนับปัจจุบันคือที่อยู่หน่วยความจำของคำสั่งถัดไปที่จะถูกประมวลผล เมื่อโปรเซสเซอร์รีเซ็ต ตัวนับจะถูกตั้งค่าเป็นศูนย์เพื่อให้การประมวลผลเริ่มต้นที่ที่อยู่ศูนย์ เมื่อดึงคำสั่งจากหน่วยความจำ สัญญาณ CE (count enable) จะถูกส่งเพื่ออนุญาตให้ตัวนับเพิ่มค่าและเลื่อนไปยังที่อยู่คำสั่งถัดไปตามลำดับ หากจำเป็นต้องเปลี่ยนลำดับการประมวลผลไปยังลำดับคำสั่งอื่น (เช่น เนื่องจากการประมวลผลคำสั่งกระโดด การเรียกใช้ซับรูทีน การขัดจังหวะ หรือการกลับจากซับรูทีนหรือการขัดจังหวะ) ที่อยู่ของคำสั่งแรกในลำดับใหม่จะถูกนำไปใช้กับอินพุตข้อมูล และสัญญาณ Load จะถูกส่ง ซึ่งจะแทนที่สัญญาณ CE (หากถูกส่ง) และคัดลอกข้อมูลไปยังตัวนับ

FIFO

บัฟเฟอร์ FIFO (First-In, First-Out) แบบ อิเล็กทรอนิกส์มักใช้ในการเชื่อมต่ออุปกรณ์ที่สร้างข้อมูลกับอุปกรณ์ที่รับข้อมูลซึ่งทำงานในโดเมนสัญญาณนาฬิกาที่แตกต่างกัน หรือซึ่งในช่วงเวลาจำกัดไม่สามารถรับข้อมูลได้เร็วพอที่จะหลีกเลี่ยงการสูญหายของข้อมูล

FIFO ที่แสดงด้านล่างใช้ตัวนับไบนารีสองตัวเป็นรีจิสเตอร์ที่อยู่หน่วยความจำ (MAR) สำหรับRAM แบบสองพอร์ตเมื่อมีการเขียนข้อมูลลง FIFO คำข้อมูล WDATA จะถูกเขียนไปยังที่อยู่ RAM WADDR และ MAR สำหรับการเขียนจะเพิ่มขึ้นเพื่อเตรียมพร้อมสำหรับการเขียนครั้งต่อไป เมื่อมีการอ่านข้อมูลลง FIFO RDATA จะได้รับคำข้อมูลที่เก็บไว้ที่ที่อยู่ RAM RADDR และ MAR สำหรับการอ่านจะเพิ่มขึ้น ยกเว้นในกรณีพิเศษเมื่อ FIFO เต็ม ระดับ FIFO (จำนวนคำที่ยังไม่ได้อ่านใน FIFO) จะเท่ากับ WADDR-RADDR

ส่วนหนึ่งของแผนผังวงจร FIFO ที่แสดงรีจิสเตอร์ที่อยู่หน่วยความจำและ RAM แบบสองพอร์ต

FIFO นี้อาจเป็นแบบอะซิงโครนัสหรือซิงโครนัส ซึ่งหมายความว่าการอ่านและการเขียนอาจเกิดขึ้นในโดเมนสัญญาณนาฬิกาที่แตกต่างกัน หรือในโดเมนสัญญาณนาฬิกาเดียวกัน ในกรณีหลัง RCLK และ WCLK จะเชื่อมต่อกัน ใน FIFO แบบอะซิงโครนัส โดยทั่วไป MAR จะส่งออกรหัสเกรย์ (แทนที่จะเป็นไบนารี) เพื่อให้สามารถใช้งานได้อย่างปลอดภัยสำหรับการตรวจจับระดับ FIFO ในทั้งสองโดเมนสัญญาณนาฬิกา

ตัวควบคุม DMA

ตัวนับแบบไบนารีถูกนำมาใช้ในหลายวิธีในตัวควบคุมการเข้าถึงหน่วยความจำโดยตรง (DMA) ตัวอย่างเช่น ตัวนับที่คล้ายกับที่แสดงด้านล่างถูกนำมาใช้เมื่อคัดลอกบัฟเฟอร์หน่วยความจำผ่าน DMA โดยใช้ตัวนับสองตัวเป็นรีจิสเตอร์ที่อยู่หน่วยความจำ (MAR) เพื่อสร้างที่อยู่ต้นทางและปลายทางสำหรับข้อมูลที่จะคัดลอก โดยทั่วไป MAR จะเป็นแบบสองทิศทางเพื่อให้การถ่ายโอนข้อมูลเริ่มต้นที่ที่อยู่ฐานหรือที่อยู่สิ้นสุดของบัฟเฟอร์ ตัวนับตัวที่สามจะติดตามจำนวนคำที่เหลือที่จะต้องถ่ายโอน

ตัวนับไบนารีแบบสองทิศทางสองตัวถูกใช้เป็นรีจิสเตอร์ที่อยู่หน่วยความจำต้นทางและปลายทาง (MAR) สำหรับการทำงานของ DMAตัวนับเลขฐานสองแบบลดลง ใช้สำหรับติดตามจำนวนคำข้อมูลที่เหลืออยู่ที่จะต้องถ่ายโอนผ่าน DMA

เพื่อเตรียมพร้อมสำหรับการทำงานของ DMA ที่อยู่เริ่มต้นจะถูกโหลดเข้าไปใน MAR แต่ละตัว ขนาดบัฟเฟอร์จะถูกโหลดเข้าไปในตัวนับการถ่ายโอนข้อมูล และทิศทางการนับ (โดยทั่วไปจะเก็บไว้ในฟลิปฟลอป) จะถูกตั้งโปรแกรมสำหรับ MAR แต่ละตัว

เมื่อการถ่ายโอนคำแต่ละครั้งเสร็จสมบูรณ์ สัญญาณ CE (count enable) จะถูกส่งไปยังตัวนับทั้งหมด ทำให้ MAR เลื่อนไปยังที่อยู่ถัดไป และจำนวนคำที่เหลือจะลดลง เมื่อจำนวนคำที่เหลือถึงศูนย์ ตรรกะ NOR ของบิตจะเปลี่ยนเป็นค่าสูง ซึ่งเป็นการส่งสัญญาณว่าการทำงานของ DMA เสร็จสมบูรณ์แล้ว

ตัวจับเวลา

ตัวจับเวลาแบบยิงครั้งเดียว

ในอิเล็กทรอนิกส์ดิจิทัลตัวจับเวลาแบบวันช็อต (หรือเรียกสั้น ๆ ว่าวันช็อต ) คือวงจรที่สร้างพัลส์เอาต์พุตที่มีเวลาแม่นยำเพียงครั้งเดียวเพื่อตอบสนองต่อทริกเกอร์อินพุต การออกแบบดิจิทัลช่วยให้สามารถปรับระยะเวลาของพัลส์ได้ง่าย และให้ความแม่นยำและความสม่ำเสมอของระยะเวลาของพัลส์สูงกว่าเมื่อเทียบกับแบบอนาล็อก ทำให้ตัวจับเวลาแบบวันช็อตดิจิทัลเป็นที่นิยมมากกว่าสำหรับการใช้งานที่ความแม่นยำของเวลาเป็นสิ่งสำคัญ[ 15 ]

วงจรจับเวลาแบบครั้งเดียวที่แสดงด้านล่างนี้ ใช้ตัวนับลงแบบไบนารีเพื่อสร้างพัลส์เอาต์พุตที่มีระยะเวลาที่ควบคุมได้อย่างแม่นยำ เอาต์พุตของตัวจับเวลาคือค่าตรรกะ OR ของบิตทั้งหมดในการนับปัจจุบัน และด้วยเหตุนี้ พัลส์เอาต์พุตจึงทำงานอยู่ขณะที่ตัวจับเวลากำลังทำงาน (กล่าวคือ เมื่อการนับไม่เป็นศูนย์) เมื่อการนับถึงศูนย์ พัลส์เอาต์พุตจะหยุดทำงานและการนับจะหยุดลง

แผนภาพแสดงวงจรของตัวจับเวลาแบบดิจิทัลชนิดยิงครั้งเดียว

ในการเริ่มการทำงานของตัวนับ จะต้องป้อนค่าที่แสดงถึงความกว้างของพัลส์ที่ต้องการไปยังอินพุตข้อมูลของตัวนับ และส่งสัญญาณโหลดเพื่อกระตุ้นการสร้างพัลส์ ความกว้างของพัลส์จะระบุเป็นรอบสัญญาณนาฬิกา ตัวอย่างเช่น ในกรณีของสัญญาณนาฬิกา 1 MHz พัลส์เอาต์พุต 100 ไมโครวินาทีจะมีระยะเวลา 100 รอบสัญญาณนาฬิกา ดังแสดงด้านล่าง:

แผนภาพแสดงจังหวะเวลาของตัวจับเวลาแบบดิจิทัลแบบยิงครั้งเดียว

วงจรแบบวันช็อตที่แสดงด้านบนสามารถรีทริกเกอร์ได้หมายความว่าสามารถเริ่มต้นใหม่ได้ด้วยทริกเกอร์ถัดไปในขณะที่กำลังทำงานอยู่ และด้วยเหตุนี้จึงสามารถยืด (ขยายระยะเวลาของ) พัลส์เอาต์พุตได้ ในทางกลับกัน วงจรแบบวันช็อตที่แสดงด้านล่างไม่สามารถรีทริกเกอร์ได้หมายความว่าจะไม่สนใจทริกเกอร์ที่เข้ามาในขณะที่พัลส์เอาต์พุตทำงานอยู่

แผนภาพแสดงวงจรของตัวจับเวลาแบบดิจิทัลชนิดยิงครั้งเดียว

ตัวจับเวลาช่วงเวลาเป็นระยะ

ตัวนับไบนารีมักใช้เป็นตัวจับเวลาช่วงเวลาเป็นระยะ (PIT) ซึ่งส่งสัญญาณพัลส์เป็นระยะที่ความถี่เป็นเศษส่วนจำนวนเต็มของความถี่สัญญาณนาฬิกา PIT ใช้ในการสร้าง สัญญาณขัดจังหวะ สัญญาณนาฬิการะบบในคอมพิวเตอร์ ใช้เป็นตัวแบ่งความถี่ในวงจรล็อกเฟสและเครื่องสังเคราะห์ความถี่ และในแอปพลิเคชันอื่นๆ อีกมากมาย

ในวงจรด้านล่างนี้ ตัวนับลงแบบไบนารีถูกใช้เพื่อสร้าง PIT (Pulse-Time Interval) ช่วงเวลาระหว่างพัลส์เอาต์พุต ซึ่งวัดเป็นรอบสัญญาณนาฬิกา จะถูกเก็บไว้ในรีจิสเตอร์ช่วงเวลา (Interval register) ทำให้ได้ความถี่เอาต์พุตเอฟโอคุณที=เอฟโอเค/(ฉันnทีอีวีเอ+1){\displaystyle f_{out}=f_{clock}/(interval+1)}เมื่อตัวนับถึงศูนย์ วงจร NORจะส่งสัญญาณพัลส์ไปยังเอาต์พุตของตัวจับเวลา สัญญาณพัลส์ที่ส่งออกมานี้จะถูกใช้ภายในเพื่อโหลดช่วงเวลาลงในตัวนับอีกครั้ง ทำให้ตัวจับเวลาเริ่มทำงานใหม่ สัญญาณพัลส์ที่ส่งออกมาแต่ละครั้งมีระยะเวลาเท่ากับหนึ่งรอบสัญญาณนาฬิกา

ตัวตั้งเวลาแบบตั้งโปรแกรมได้

ตัวอย่างเช่น หากต้องการให้ได้ความถี่เอาต์พุต 1 MHz จากสัญญาณนาฬิกา 6 MHz จะต้องตั้งค่าช่วงเวลาเป็น 5 ดังแสดงในแผนภาพเวลาต่อไปนี้:

แผนภาพแสดงจังหวะเวลาของตัวตั้งเวลาแบบตั้งโปรแกรมได้

ในแอปพลิเคชันที่ต้องการเอาต์พุตเป็นคลื่นสี่เหลี่ยม โดยทั่วไปจะใช้ PIT เพื่อสลับสถานะของฟลิปฟลอป ส่งผลให้ความถี่เอาต์พุตเท่ากับครึ่งหนึ่งของความถี่เอาต์พุตของ PIT:

ตัวแบ่งสัญญาณนาฬิกาแบบตั้งโปรแกรมได้

เครื่องสังเคราะห์ความถี่

ตัวจับเวลาช่วงเวลาเป็นระยะถูกใช้เป็นตัวแบ่งสัญญาณนาฬิกาในวงจรล็อกเฟส (PLL) ตัวสังเคราะห์ความถี่[ 16 ]ซึ่งสร้างความถี่เอาต์พุตที่แม่นยำโดยการซิงโครไนซ์ออสซิลเลเตอร์ควบคุมแรงดันไฟฟ้า (VCO) กับสัญญาณนาฬิกาอ้างอิง การใช้งานทั่วไปแสดงไว้ด้านล่างซึ่งส่งออกความถี่เอฟโอคุณที{\displaystyle f_{out}}เป็นผลคูณเชิงตรรกะของความถี่สัญญาณนาฬิกาขาเข้าเอฟฉันn{\displaystyle f_{in}}มีการใช้ตัวแบ่งสัญญาณนาฬิกา 2 ตัวเพื่อปรับขนาดเอฟฉันn{\displaystyle f_{in}}และเอฟโอคุณที{\displaystyle f_{out}}โดยตัวหารจำนวนเต็มเอ็ม{\displaystyle M}และเอ็น{\displaystyle N}ตามลำดับ

ตัวอย่างการใช้งาน: การสร้างสัญญาณนาฬิกาอินเทอร์เฟซ RFIDความถี่ 13.56 MHz จากสัญญาณอ้างอิง 50 MHz

เมื่อ PLL อยู่ในสถานะล็อก เอาต์พุตของตัวแบ่งสัญญาณนาฬิกาจะมีความถี่ที่เหมือนกันโดยมีเพียงความแตกต่างของเฟสเท่านั้น[ 17 ]แรงดันข้อผิดพลาดที่แปรผันตามความแตกต่างของเฟสจะถูกสร้างขึ้นและใช้ในการปรับความถี่ของ VCO เพื่อให้ความแตกต่างของเฟสมีขนาดเล็ก และด้วยเหตุนี้จึงรักษาความแม่นยำเอ็น/เอ็ม{\displaystyle N/M}อัตราส่วนระหว่างเอฟโอคุณที{\displaystyle f_{out}}และเอฟฉันn{\displaystyle f_{in}}.

ตัวปรับความกว้างพัลส์

ตัวนับไบนารีเป็นส่วนประกอบสำคัญในวงจรปรับความกว้างพัลส์ แบบดิจิทัล ซึ่งมักใช้ในการควบคุมความเร็วของมอเตอร์ อุณหภูมิ ความสว่างของ LED และกระบวนการทางกายภาพอื่นๆ สามารถนำไปใช้งานได้หลายวิธี ตัวอย่างเช่น วงจรปรับความกว้างพัลส์ที่แสดงด้านล่างใช้ตัวนับไบนารีแบบเพิ่มค่าตัวเดียวที่มีการรีเซ็ตแบบซิงโครนัสเพื่อควบคุมทั้งความกว้างและความถี่ของพัลส์เอาต์พุต:

ตัวปรับความกว้างพัลส์ดิจิทัล

ค่าที่เก็บไว้ในรีจิสเตอร์ช่วงเวลา PWM (พีอีฉันโอ{\displaystyle Period}) เป็นตัวกำหนดความถี่เอาต์พุตซีโอคุณnที{\displaystyle จำนวน}เพิ่มขึ้นตามความถี่สัญญาณนาฬิกาเอฟโอเค{\displaystyle f_{clock}}จนกว่าจะตรงกันพีอีฉันโอ{\displaystyle Period}ซึ่งทำให้ตัวเปรียบเทียบเอกลักษณ์ส่งสัญญาณ EndCycle ส่งผลให้ตัวนับถูกรีเซ็ตและเริ่มต้นรอบเอาต์พุตถัดไป ดังนั้น ค่าสัมบูรณ์ของตัวนับจึงเป็นพีอีฉันโอ+1{\displaystyle Period+1}และความถี่พัลส์เอาต์พุตเอฟโอคุณที=เอฟโอเค/(พีอีฉันโอ+1){\displaystyle f_{out}=f_{clock}/(Period+1)}.

ฉันทีชม.{\displaystyle Width}ระบุความกว้างของพัลส์เอาต์พุตในหน่วยคาบสัญญาณนาฬิกา ตัวเปรียบเทียบขนาดจะยืนยันค่าพีอีวีฉันอี{\displaystyle Preview}ในขณะที่จำนวนน้อยกว่าฉันทีชม.{\displaystyle Width}จึงทำให้เกิดพัลส์ที่เริ่มต้นในช่วงเริ่มต้นของรอบการส่งออกและสิ้นสุดเมื่อจำนวนนับถึงค่าที่กำหนดฉันทีชม.{\displaystyle Width}บัฟเฟอร์ฟลิปฟลอปพีอีวีฉันอี{\displaystyle Preview}เพื่อป้องกันปัญหาสัญญาณรบกวนที่อาจเกิดขึ้นกับ เอาต์พุตPWM อันเนื่องมาจากไฟฟ้าสถิต

อัตราการทำงาน (Duty cycle)คือเปอร์เซ็นต์ของเวลาในรอบการทำงานของ PWM ที่พัลส์ทำงานอยู่:ดีคุณทีyyอี=100*ฉันทีชม./(พีอีฉันโอ+1){\displaystyle Dutycycle=100*Width/(Period+1)}ตัวอย่างเช่น แผนภาพต่อไปนี้แสดงจังหวะเวลาของสัญญาณสำหรับพีอีฉันโอ=11{\displaystyle Period=11}และฉันทีชม.=3{\displaystyle Width=3}ส่งผลให้มีรอบการทำงาน 25 เปอร์เซ็นต์ที่เอฟโอเค/12{\displaystyle f_{clock}/12}เฮิรตซ์.

ตัวอย่างไดอะแกรมเวลาสำหรับตัวปรับความกว้างพัลส์ดิจิทัล (Digital Pulse Width Modulator) ที่มีคาบเวลา = 11 และความกว้าง = 3

การวัดความกว้างของพัลส์

การวัด ความกว้างของพัลส์เป็นการประยุกต์ใช้ตัวนับทั่วไปที่ใช้ในอุปกรณ์หลากหลายประเภท รวมถึงเรดาร์และโซนาร์ระบบอัตโนมัติทางอุตสาหกรรมและ ระบบ การถ่ายภาพทางการแพทย์วงจรทั่วไปแสดงไว้ด้านล่าง ซึ่งใช้ตัวนับแบบไบนารีขึ้นเพื่อวัดความกว้างของพัลส์บวกที่ไม่ซิงโครนัส (เมื่อเทียบกับสัญญาณนาฬิกาของตัวนับ)

แผนภาพแสดงวงจรวัดพัลส์โดยใช้ตัวนับขึ้นแบบไบนารี

สัญญาณที่วัดได้จะถูกซิงโครไนซ์กับโดเมนสัญญาณนาฬิกาของตัวนับก่อน จึงทำให้เกิดสัญญาณอินพุตที่ซิงโครไนซ์ (เกต สัญญาณนาฬิกา ) ขั้นตอนนี้ทำขึ้นเพื่อป้องกันข้อผิดพลาดในการวัดเนื่องจากความไม่เสถียรหรือการละเมิดเวลาตั้งค่าหรือเวลาคงค่า ขั้นต่ำ ในฟลิปฟลอปของตัวนับและตัวตรวจจับขอบสัญญาณ

เมื่อ พัลส์ ของเกตนาฬิกา เริ่ม ต้นตัวตรวจจับขอบขาขึ้นจะส่งสัญญาณสโตรบเพื่อรีเซ็ตค่าเป็นศูนย์ จากนั้นตัวนับจะดำเนินการนับพัลส์นาฬิกาต่อไปในขณะที่เกตนาฬิกายังคงทำงานอยู่ เมื่อพัลส์สิ้นสุด ตัวนับจะหยุดนับ และค่าที่สะสมจะแสดงความกว้างของพัลส์ที่วัดได้ในหน่วยของคาบเวลาของนาฬิกา ความกว้างของพัลส์คือซีโอคุณnที/เอฟโอเค{\textstyle จำนวนนาฬิกา}}วินาที ที่เอฟโอเค{\displaystyle f_{clock}}คือความถี่ของสัญญาณนาฬิกาในหน่วยเฮิรตซ์

ตัวตรวจจับขอบขาลงจะส่งสัญญาณ"End"เพื่อระบุว่าการวัดสิ้นสุดลงแล้ว ซึ่งสามารถใช้เพื่อส่งสัญญาณไปยังวงจรภายนอกหรือถ่ายโอนค่าที่นับได้ไปยังหน่วยเก็บข้อมูลภายนอก หรือทั้งสองอย่าง ก่อนที่การวัดครั้งต่อไปจะเริ่มต้นขึ้น

เครื่องนับความถี่

แอปพลิเคชันตัวนับบางประเภทใช้ตัวนับหลายตัว ตัวอย่างเช่นตัวนับความถี่ที่แสดงด้านล่าง ซึ่งใช้ตัวนับสองตัวในการวัดความถี่ของสัญญาณดิจิทัล ตัวนับตัวหนึ่งที่ตั้งค่าเป็นแบบวันช็อต จะสร้างพัลส์ที่มีความกว้างที่ควบคุมได้อย่างแม่นยำ เรียกว่าไทม์เกตไทม์เกตใช้เพื่อเปิดใช้งานการทำงานของตัวนับเหตุการณ์ ซึ่งทำงานโดยใช้สัญญาณที่มีความถี่ที่ต้องการวัดเป็นตัวควบคุมจังหวะ

เครื่องนับความถี่

เมื่อเริ่มการวัด (โดยการกดปุ่ม Start ) ตัวนับเหตุการณ์จะถูกตั้งค่าเป็นศูนย์ จากนั้นจะเริ่มนับขอบขาขึ้นของสัญญาณความถี่ที่ไม่ทราบค่าในขณะที่เกตเวลาทำงานอยู่ เมื่อเกตเวลาสิ้นสุด การนับขอบจะหยุดลง และค่าที่สะสมจะแสดงความถี่ที่วัดได้ ค่าที่นับได้จะแสดงความถี่ที่วัดได้โดยตรงในหน่วยเฮิรตซ์ (Hz) เมื่อเวลาของเกตเป็นหนึ่งวินาที สำหรับเวลาของเกตอื่นๆ ค่าที่นับได้จะต้องถูกปรับขนาดเพื่อให้ได้หน่วยเฮิรตซ์ (Hz)

การแปลงสัญญาณอนาล็อกเป็นดิจิทัล

ตัวนับถูกนำมาใช้ใน วงจร แปลงสัญญาณอนาล็อกเป็นดิจิทัล (ADC) ในหลายรูปแบบ ตัวอย่างเช่น ใน ADC แบบติดตาม จะใช้ตัวนับไบนารีแบบสองทิศทางเพื่อควบคุมแรงดันเอาต์พุต (วีเอ{\displaystyle V_{dac}}) ของตัวแปลงสัญญาณดิจิทัลเป็นอนาล็อกวีเอ{\displaystyle V_{dac}}เป็นสัดส่วนกับจำนวน และดังนั้นจะเพิ่มขึ้นหรือลดลงตามลำดับ เมื่อจำนวนเพิ่มขึ้นหรือลดลง

การติดตามตัวแปลงอนาล็อกเป็นดิจิทัล

วงจรเปรียบเทียบแรงดันไฟฟ้าจะส่งสัญญาณบิตออกมาเพื่อระบุว่าวีเอ{\displaystyle V_{dac}}มีค่ามากกว่าแรงดันอินพุตของ ADCวีฉันn{\displaystyle V_{in}}บิตนี้ควบคุมทิศทางการนับเพื่อให้ค่าการนับและแรงดันไฟฟ้าของ DAC เพิ่มขึ้นหรือลดลงตามลำดับ เมื่อ...วีเอ{\displaystyle V_{dac}}น้อยกว่าหรือมากกว่าวีฉันn{\displaystyle V_{in}}จึงทำให้เกิดวีเอ{\displaystyle V_{dac}}เพื่อติดตามวีฉันn{\displaystyle V_{in}}เนื่องจากการนับติดตามวีฉันn{\displaystyle V_{in}}ข้อมูลที่ได้จะถูกนำไปใช้โดยตรงเป็นข้อมูลเอาต์พุตของ ADC ในเวลาเกือบเรียลไทม์

การติดตามตำแหน่ง

ตัวนับไบนารีแบบสองทิศทางมักใช้ในการติดตามตำแหน่งทางกายภาพของวัตถุที่เคลื่อนที่ซึ่งถูกตรวจสอบโดยตัวเข้ารหัสแบบเพิ่มค่าดังแสดงในวงจรตัวอย่างด้านล่าง การเปลี่ยนแปลงตำแหน่งจะแสดงด้วยขอบขาขึ้นหรือขาลงบนสัญญาณเอาต์พุต A หรือ B ของตัวเข้ารหัส การเปลี่ยนแปลงตำแหน่งแต่ละครั้งจะสัมพันธ์กับระยะทางที่กำหนดไว้อย่างชัดเจน{\displaystyle d}โดยความแตกต่างของเฟสระหว่าง A และ B จะบ่งบอกทิศทางการเคลื่อนที่ (เช่น "ไปข้างหน้า" หรือ "ถอยหลัง") ค่าการนับจะเพิ่มขึ้นหรือลดลงเมื่อวัตถุเคลื่อนที่ไปในทิศทางไปข้างหน้าหรือถอยหลังตามลำดับ

แผนภาพโครงร่างอย่างง่ายของอินเทอร์เฟซตัวเข้ารหัสแบบเพิ่มค่า

ในการเริ่มต้นการติดตาม วัตถุที่ต้องการตรวจสอบจะถูกกำหนดตำแหน่งไว้ที่ตำแหน่งอ้างอิง (พี0{\displaystyle p_{0}}) และค่าการนับจะถูกรีเซ็ตเป็นศูนย์ จากนั้นเป็นต้นไป ค่าการนับจะแสดงตำแหน่งปัจจุบันในแง่ของการกระจัดจากตำแหน่งอ้างอิง ซึ่งวัดเป็น{\displaystyle d}หน่วยระยะทาง:พีโอฉันทีฉันโอn=พี0+ซีโอคุณnที*{\displaystyle position=p_{0}+Count*d}ค่าที่นับได้นั้นเทียบเท่ากับจำนวนเต็มที่มีเครื่องหมายในกรณีที่วัตถุสามารถเคลื่อนที่ไปทางด้านใดด้านหนึ่งของตำแหน่งอ้างอิงได้

เครื่องกำเนิดรูปคลื่นไซน์แบบขั้นบันได

รูป คลื่นแรงดัน ไซน์สามารถประมาณได้โดยการวนรอบสถานะเอาต์พุตของตัวนับจอห์นสันและรวมแรงดันเอาต์พุตผ่านเครือข่ายตัวต้านทานซึ่งมีน้ำหนักเพื่อแมปสถานะตัวนับแต่ละสถานะไปยังจุดในฟังก์ชันโคไซน์: [ 10 ]

เครื่องกำเนิดแรงดันไฟฟ้าไซน์โดยใช้ตัวนับจอห์นสัน

รูปคลื่นไซน์ที่ได้มีความถี่เอฟโอคุณที=เอฟฉันn/2n{\displaystyle f_{out}=f_{in}/2n}สำหรับn{\displaystyle n}ฟลิปฟลอปและความถี่สัญญาณนาฬิกาของเอฟฉันn{\displaystyle f_{in}}ดังนั้น ความถี่ของคลื่นไซน์จึงสามารถเปลี่ยนแปลงได้ง่ายๆ โดยการเปลี่ยนความถี่ของสัญญาณนาฬิกา

การบิดเบือนฮาร์มอนิกจะลดลงเมื่อเพิ่มn{\displaystyle n}ซึ่งจะทำให้ได้จำนวนขั้นที่มากขึ้นและขนาดขั้นที่เล็กลงในคลื่นไซน์ โดยการเพิ่มความแม่นยำของความต้านทาน และโดยการเพิ่มตัวเก็บประจุหรือตัวกรองแบบแอคทีฟเพื่อกรองความถี่ต่ำที่ขอบของขั้นแรงดันไฟฟ้า

รูปคลื่นไซน์แบบขั้นบันไดโดยใช้ตัวนับจอห์นสัน 8 บิต
ตัวนับจอห์นสัน 8 บิตมี 16 สถานะ ดังนั้นจึงครบหนึ่งรอบของคลื่นไซน์แบบขั้นบันไดทุกๆ 16 พัลส์นาฬิกา
บิตของตัวนับสำหรับแต่ละพัลส์นาฬิกาในช่วงหนึ่งรอบของคลื่นไซน์

ดูเพิ่มเติม

  • โลโก้ Wikimedia Commonsสื่อที่เกี่ยวข้องกับวงจรเคาน์เตอร์ในวิกิมีเดียคอมมอนส์

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไม่มีชื่อบทความ

ใน อิเล็กทรอนิกส์ดิจิทัล ตัว นับ เป็น วงจร ตรรกะแบบลำดับ ที่นับและเก็บจำนวนการเปลี่ยนแปลงเชิงบวกหรือเชิงลบของ สัญญาณนาฬิกา [ 1 ] โดยทั่วไป ตัวนับจะประกอบด้วย ฟลิปฟลอป...

ลักษณะเฉพาะ

ตัว นับ อิเล็กทรอนิกส์ เป็น วงจร ลอจิกแบบลำดับ ที่มีสัญญาณอินพุตเป็นสัญญาณนาฬิกาและกลุ่มของสัญญาณเอาต์พุตที่แสดงค่า "นับ" จำนวนเต็ม ในแต่ละขอบสัญญาณนาฬิกาที่ตรงตามเงื่อนไข วงจรจะเพิ่มค่า (หรือลดค่า ขึ้นอยู่กับ การออกแบบวงจร ) ค่าที่เก็บไว้...

สัญญาณ

ตัวนับทุกตัวมีกลุ่มสัญญาณพื้นฐานที่ใช้ร่วมกันในเครื่องสถานะ:

การเข้ารหัสเอาต์พุต

ในขณะที่นับ ตัวนับทุกตัวจะสร้างลำดับของรหัสเอาต์พุต (รูปแบบบิต) บนเอาต์พุตการนับ รหัสลำดับเหล่านี้จำนวนมาก ไม่ว่าจะโดยการออกแบบหรือเนื่องจากธรรมชาติของตัวนับ จะสอดคล้องกับระบบการเข้ารหัสที่ใช้กันอย่างแพร่หลาย...