เรียนรู้ตัวเข้ารหัส วงจรอันชาญฉลาดที่ทำให้การแปลงที่สำคัญนี้เกิดขึ้นได้!
ตัวเข้ารหัสคือวงจรดิจิทัลที่แปลงอินพุตดิจิทัล M (< 2N) ให้เป็นเอาต์พุตโค้ดที่แตกต่างกัน (แสดงด้วย N บิต) โดยแสดงตำแหน่งของอินพุต โดยทั่วไปคือ 2N > M > N วงจรนี้ใช้กันอย่างแพร่หลายในระบบดิจิทัล ช่วยให้แปลงเส้นอินพุตขนานจำนวนมากให้เป็นเส้นเอาต์พุตน้อยลง
ตัวเข้ารหัส 4 ต่อ 2 ประกอบด้วยอินพุต 4 ตัว ได้แก่ I0, I1, I2 และ I3 พร้อมด้วยเอาต์พุต 2 ตัวซึ่งแสดงเป็น Z0 และ Z1 ดังนั้นจึงมีชุดอินพุตที่เป็นไปได้ 16 ชุดในขณะที่มีชุดเอาต์พุตที่เป็นไปได้เพียง 4 ชุดเท่านั้น ดังนั้นจึงไม่สามารถแมปชุดอินพุตทุกชุดไปยังชุดเอาต์พุตเฉพาะได้ ดังนั้นจึงต้องกำหนดข้อจำกัดที่อินพุต ในทุกช่วงเวลา สามารถตั้งค่าอินพุต 4 ตัวเป็น '1' ได้เพียงหนึ่งตัวเท่านั้นเพื่อรับรหัสไบนารีที่สอดคล้องกันที่เอาต์พุต หากตั้งค่าอินพุต 2 ตัวขึ้นไปเป็น '1' เอาต์พุตชุดใดชุดหนึ่งจาก 4 ชุดอาจปรากฏขึ้น แผนภาพด้านล่างแสดงสัญลักษณ์ตรรกะที่แสดงถึงตัวเข้ารหัส 4 ต่อ 2
นิพจน์ตรรกะสำหรับเอาต์พุต Z1 และ Z0 คือ:
Z1=I3+I2
Z0=I3+I1
เราสังเกตได้ว่ารูปแบบอินพุต (I3,I2,I1,I0=1,0,0,0) และ (I3,I2,I1,I0=0,1,1,0) สร้างเอาต์พุตเดียวกัน (Z1,Z0=1,1) รูปแบบแรกมีอินพุตเพียงตัวเดียวเป็น 1 ในขณะที่รูปแบบหลัง เรามีอินพุตสองตัวเป็น 1 เนื่องจากเอาต์พุตเหมือนกันสำหรับรูปแบบอินพุตทั้งสอง จึงยากที่จะระบุว่าสถานะอินพุตใดทำให้เกิดค่าดังกล่าว มีสถานการณ์บางอย่างที่เส้นอินพุตเพียงเส้นเดียวเท่านั้นที่จะมีค่าสูงในช่วงเวลาใดเวลาหนึ่ง (ตัวเข้ารหัสตามตำแหน่ง) อย่างไรก็ตาม เนื่องมาจากสัญญาณรบกวนหรือข้อผิดพลาด อาจเกิดขึ้นโดยไม่ได้ตั้งใจที่เส้นอินพุต 2 เส้นถูกตั้งค่าเข้าด้วยกัน
เพื่อกำจัดความคลุมเครือนี้ จึงใช้ตัวเข้ารหัสลำดับ ความสำคัญ
ตัวเข้ารหัส 8 ถึง 3 หรือที่เรียกอีกอย่างว่าตัวเข้ารหัสอ็อกทัลถึงไบนารี ประกอบด้วยอินพุต 8 ตัวที่มีป้ายกำกับว่า I0 ถึง I7 และเอาต์พุต 3 ตัวที่มีชื่อว่า Z2, Z1 และ Z0 แต่ละบรรทัดอินพุตจะถูกแมปกับตัวเลข 3 บิตที่ไม่ซ้ำกัน เอาต์พุตทั้งสามจะสร้างรหัสไบนารี 3 บิตตามลำดับ ไดอะแกรมด้านล่างแสดงสัญลักษณ์ตรรกะของตัวเข้ารหัสอ็อกทัลถึงไบนารี
ตัวเข้ารหัสทศนิยมเป็นไบนารีทั่วไปประกอบด้วยเส้นอินพุต 10 เส้นและเส้นเอาต์พุต 4 เส้น เส้นอินพุตแต่ละเส้นแสดงตัวเลขทศนิยม และเอาต์พุต 4 เส้นจะสร้างรหัสทศนิยมแบบไบนารี (BCD) ตัวเข้ารหัสนี้รับข้อมูลทศนิยมที่ถอดรหัสแล้วเป็นอินพุตและแปลงเป็นเอาต์พุต BCD ซึ่งสามารถเข้าถึงได้ผ่านเส้นเอาต์พุต แผนภาพด้านล่างแสดงสัญลักษณ์ตรรกะของตัวเข้ารหัสทศนิยมเป็น BCD
ตารางที่ 3 : ตารางค่าความจริงของตัวเข้ารหัส 8 ถึง 3 อินพุต
ตัวเข้ารหัสลำดับความสำคัญนั้นคล้ายกับตัวเข้ารหัสพื้นฐาน โดยจะแปลงอินพุตไบนารีจำนวนมากให้เป็นเอาต์พุตจำนวนน้อยลง เอาต์พุตของตัวเข้ารหัสนี้สะท้อนดัชนีไบนารีของสายที่เปิดใช้งานที่สำคัญที่สุด ซึ่งแตกต่างจากตัวเข้ารหัสพื้นฐาน หากอินพุตหลายตัวเปิดใช้งานพร้อมกันในตัวเข้ารหัสลำดับความสำคัญ อินพุตที่มีความสำคัญสูงสุดจะเป็นผู้กำหนดเอาต์พุต ซึ่งจะช่วยขจัดความคลุมเครือที่เราพบในตัวเข้ารหัสทั่วไป แม้ว่าตัวเข้ารหัสพื้นฐานจะสามารถจัดการชุดอินพุตที่เป็นไปได้ทั้งหมดได้ แต่ตัวเข้ารหัสพื้นฐานก็ยังต้องการตรรกะเพิ่มเติม ซึ่งทำให้ตัวเข้ารหัสพื้นฐานมีประโยชน์มากกว่าตัวเข้ารหัสพื้นฐาน แต่ต้องแลกมาด้วยความซับซ้อนที่เพิ่มขึ้น
ตัวเข้ารหัสลำดับความสำคัญ 4 ต่อ 2
ตัวเข้ารหัสลำดับความสำคัญ 4 ต่อ 2 มีอินพุต 4 ตัวชื่อ I3, I2, I1 และ I0 พร้อมด้วยเอาต์พุต 2 ตัวชื่อ Z1 และ Z0 ภายในการตั้งค่านี้ I3 จะได้รับการกำหนดลำดับความสำคัญสูงสุดในขณะที่ I0 จะได้รับการกำหนดลำดับความสำคัญต่ำสุด ในสถานการณ์นี้ หากอินพุตหลายตัวมีลำดับความสำคัญสูงพร้อมกันคือ '1' เอาต์พุตจะแสดงรหัส (ไบนารี) ของอินพุตที่มีลำดับความสำคัญสูงสุด ด้านล่างนี้คือตารางค่าความจริงที่แสดงฟังก์ชันการทำงานของตัวเข้ารหัสลำดับความสำคัญ เอาต์พุตอีกตัวหนึ่งถูกเพิ่มเข้ามาเรียกว่า 'V' (ถูกต้อง) เพื่อตรวจจับสถานะศูนย์ของอินพุตทั้งหมด
ตาราง 4: ตารางค่าความจริงของตัวเข้ารหัสลำดับความสำคัญ 4 ถึง 2 อินพุต
module priority_encoder_4_to_2(en, Din, Dout);
input en;
input [3:0] Din;
output reg [1:0] Dout;
always @ (Din,en)
begin
case (Din)
4'b00000001: Dout = 2'b000;
4'b0000001x: Dout = 2'b001;
4'b000001xx: Dout = 2'b010;
4'b00001xxx: Dout = 2'b011;
default: Dout = 2'bxx;
endcase
end
endmodule
module priority_encoder_8_to_3(en, Din, Dout);
input en;
input [7:0] Din;
output reg [2:0] Dout;
always @ (Din,en)
begin
case (Din)
8'b00000001: Dout = 3'b000;
8'b0000001x: Dout = 3'b001;
8'b000001xx: Dout = 3'b010;
8'b00001xxx: Dout = 3'b011;
8'b0001xxxx: Dout = 3'b100;
8'b001xxxxx: Dout = 3'b101;
8'b01xxxxxx: Dout = 3'b110;
8'b1xxxxxxx: Dout = 3'b111;
default: Dout = 3'bxxx;
endcase
end
endmodule