CONTACT | TEL : 02-728-3440, EMAIL : SALES@ASTRONLOGIC.COM
การออกแบบวงจรรับ – ส่งข้อมูลแบบอนุกรมด้วย FPGA ตอนที่ 1

» การออกแบบวงจรรับ – ส่งข้อมูลแบบอนุกรมด้วย FPGA ตอนที่ 1

ในการสื่อสารหรือการส่งข้อมูลในระบบดิจิตอลนั้นมีรูปแบบในการสื่อสารที่สำคัญอยู่ 2 แบบ คือ
1.การสื่อสารแบบขนาน (Parallel Communication)
การสื่อสารในรูปแบบที่ส่งข้อมูลออกไปทีเดียวพร้อมๆกันทั้ง 8 bits ผ่านสายสัญญาณทั้ง 8 เส้น การสื่อสารและการส่งข้อมูลแบบขนานจะแสดงให้เห็นดังรูปที่ 1

รูปที่ 1 ลักษณะการสื่อสารแบบขนาน

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

2.การสื่อสารแบบอนุกรม ( Serial Communication )
เป็นการสื่อสารโดยการส่งข้อมูลทีละบิท ผ่านสายสัญญาณเส้นเดียว จนครบทั้ง 8 bits หรือ ไบท์ โดยจะส่งบิทต่ำ (LSB) ออกไปก่อน สามารถแสดงให้เห็นหลักการส่งข้อมูล แบบอนุกรมได้ดังรูปที่ 2

รูปที่ 2 การส่งข้อมูลแบบอนุกรม

การอินเตอร์เฟสตามมาตรฐาน RS-232
มาตรฐาน RS-232 เป็นมาตรฐานที่ได้รับการพัฒนามานานและถูกใช้งานกันอย่างแพร่หลาย เราใช้ RS-232 เชื่อมต่อ DTE (Data Terminal Equipment) เข้ากับ DCE (Data Communication Equipment) เช่นการต่อเทอร์มินัลเข้ากับโมเด็ม มาตรฐาน RS-232 กล่าวถึงลักษณะทางกล,ลักษณะของสัญญาณไฟฟ้าและลักษณะการทำงานที่ใช้การอินเทอร์เฟส ตัวอย่างของอุปกรณ์ที่ใช้ในการอินเทอร์เฟสตามมาตรฐาน RS-232 ได้แก่ เทอร์มินัล , พล็อตเตอร์ , ลอจิกอนาไลเซอร์ (Logic Analyzer) และเครื่องพิมพ์ ถ้าการประยุกต์ใช้งานของเราต้องการทำอินเทอร์เฟสอุปกรณ์ เข้ากับอินเทอร์เฟสมาตรฐาน RS-232 เราจำเป็นต้องแปลงระดับสัญญาณ TTL ให้เป็นระดับสัญญาณแบบอื่น ซึ่งรายละเอียดของระดับสัญญาณที่ใช้สำหรับ RS-232 จะได้กล่าวต่อไป

ลักษณะสัญญาณที่ใช้ในการอินเทอร์เฟส
มาตรฐาน RS-232 ใช้สัญญาณเพียงเส้นเดียวในการส่งสัญญาณ โดยสัญญาณจะส่งไปในทิศทางเดียวกัน ในกรณีที่อัตราเร็วในการส่งข้อมูลมีค่าเท่ากับ 20 kbps (กิโลบิทต่อวินาที) ซึ่งค่านี้เป็นค่าสูงสุดที่ใช้ในการสื่อสารข้อมูล (ในปัจจุบันพัฒนาให้สามารถส่งข้อมูลได้มากกว่านี้) ระยะทางในการส่งข้อมูลไม่ควรเกิน 50 ฟุต (ตามข้อกำหนดในมาตรฐาน) สำหรับการแทนแรงดันของระดับสัญญาณจะแทนระดับสัญญาณของลอจิก “0” ด้วยค่าแรงดัน +3 โวลท์ ถึง +12 โวลท์ ส่วนลอจิก “1” จะแทนระดับสัญญาณด้วยค่าแรงดันระหว่าง –3 โวลท์ ถึง –12 โวลท์

การออกแบบตัวแปลงสัญญาณ
การเชื่อมต่อกับพอร์ทสื่อสารของคอมพิวเตอร์ส่วนบุคคลจะเลือกใช้พอร์ตสื่อสารแบบ อนุกรม 9 ขา (DB-9) ซึ่งสามารถทำการรับส่งข้อมูลได้แบบอนุกรม โดยลักษณะของสัญญาณจะเป็นไปตามมาตรฐาน RS-232 โดยลักษณะของการเชื่อมต่อของพอร์ตสื่อสารสำหรับคอนเน็คเตอร์แบบ DB-9 สามารถแสดงให้เห็นได้ดังรูปที่ 3 และรูปที่ 4

ตำแหน่งขา DB-9
สัญญาณ
1
Data Carrier Detect : DCD
2
Received Data : RxD
3
Transmitted Data : TxD
4
Data Terminal Ready : DTR
5
Signal Ground : GND
6
Data Set Ready : DSR
7
Request To Send : RTS
8
Clear To Send : CTS
9
Ring Indicator : RI

 

รูปที่ 3 การจัดขาของคอนเน็คเตอร์พอร์ตอนุกรมแบบ DB-9

รูปที่ 4 การต่ออุปกรณ์ภายนอกกับคอมพิวเตอร์โดยใช้สัญญาณเพียง 3 เส้น

วงจรอแดปเตอร์
จากหัวข้อที่ผ่านมาตอนนี้เราทราบแล้วว่าในการสื่อสารแบบอนุกรมนั้น ในระดับของลอจิก “0” จะแทนระดับลอจิกด้วยระดับแรงดันระหว่าง +3 โวลท์ ถึง +12 โวลท์และในระดับของลอจิก “1” จะแทนระดับลอจิกด้วยระดับแรงดันระหว่าง –3 โวลท์ ถึง –12 โวลท์ เพราะฉนั้นต้องทำการแปลง ระดับของลอจิก “1” และ “0” ให้เป็นระดับแรงดันดังกล่าว ซึ่งจะต้องใช้วงจรในการแปลงระดับแรงดัน สามารถแสดงลักษณะการส่งข้อมูลแบบอนุกรมที่ผ่านตัวแปลงแรงดันได้ดังรูปที่ 5 ในส่วนของวงจรแปลงระดับแรงดันสำหรับการสื่อสาร RS-232 นั้นจะใช้ไอซีเบอร์ MAX232 หรือ ICL232 ดังรูปที่ 6

รูปที่ 5 รูปแบบการสื่อสารแบบอนุกรม

รูปที่ 6 วงจรแปลงระดับแรงดันของการสื่อสารแบบอนุกรม


รูปแบบของการส่งข้อมูลแบบอนุกรมและอัตราบอดในการสื่อสาร
อัตราบอด (Baud Rate) คือความเร็วในการรับ - ส่งข้อมูลอนุกรมมีหน่วยเป็นบิตต่อวินาที ซึ่งจะบอกจำนวนบิตที่รับ - ส่งในเวลา 1 วินาที เช่น ส่งข้อมูลด้วยอัตรา 9600 บิตต่อวินาที ก็คือการส่งข้อมูลตัวอักขระขนาด 10 บิต (บิต Start 1 บิต บิตข้อมูล 8 บิต บิต Stop 1 บิต) ได้ 960 ตัวอักขระใน 1 วินาที ซึ่งตารางที่ 1 แสดงอัตราบอดของ UART ที่ใช้กันทั่ว ตารางที่ 1 เป็นการแสดงอัตราบอดทั่วไปที่ใช้ในการโอนย้ายข้อมูลแบบอนุกรม

ตารางที่ 1 อัตราบอดที่ใช้กันทั่วไป

อัตราบอด
ช่วงเวลาของแต่ละบิต
110
9.91 ms
150
6.67 ms
300
3.33 ms
600
1.67 ms
1200
0.833 ms
2400
0.417 ms
4800
0.208 ms
9600
0.104 ms
19200
0.052 ms

 

รูปที่ 7 การแปลงข้อมูลแบบขนานเป็นข้อมูลแบบอนุกรม

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


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


อุปกรณ์ที่ทำหน้าที่แปลงข้อมูลแบบอนุกรมเป็นข้อมูลแบบขนานและแปลงข้อมูลแบบขนานเป็นข้อมูลแบบอนุกรมเรียกว่า UART (Universal Asynchronous Receiver-Transmitter) ซึ่งนอกจากจะมีหน้าที่ในการแปลงข้อมูลแล้ว UART ยังมีหน่วยควบคุมและหน่วยตรวจสอบการทำงานอีกด้วย ในการส่งข้อมูลขนาด 8 บิต แบบอนุกรมนี้จะต้องมีบิตเริ่มต้น (Start Bit) และบิตหยุด (Stop Bit) เพิ่มขึ้นมาซึ่งจะทำให้ข้อมูลที่ถูกส่งไปจริงๆนั้นมีขนาด 10 บิต

หลักการออกแบบวงจรรับ – ส่งข้อมูลแบบอนุกรมด้วย FPGA
สำหรับวงจรสื่อสารข้อมูลแบบอนุกรมที่เรากำลังจะออกแบบกันนั้น จะมีคุณสมบัติดังนี้ Baud Rate = 9600 Bits/Sec, Data = 8 Bits, Start Bit = 1 Bit, Stop Bit = 1 Bit, Parity = none

ภาคส่งข้อมูลแบบอนุกรม
ในส่วนนี้เป็นการออกแบบ FPGA ให้ทำหน้าที่เป็นตัวส่งข้อมูลแบบอนุกรมให้แก่อุปกรณ์ต่างๆ เช่น คอมพิวเตอร์ , ไมโครคอนโทรลเลอร์ เป็นต้น รูปแบบการส่งข้อมูลแบบอนุกรม แสดงดังรูปที่ 8

รูปที่ 8 รูปแบบการส่งข้อมูลแบบอนุกรม

จากรูปที่ 8 สัญญาณ Tx เป็นสัญญาณขนาด 1 บิต ใช้สำหรับส่งข้อมูลแบบอนุกรมออกไป ในการออกแบบวงจรส่งข้อมูลแบบอนุกรมจะต้องมีสัญญาณ CLOCK เป็นสัญญาณอ้างอิง เพื่อกำหนดความเร็วในการส่งข้อมูลซึ่งจะต้องตรงกับทางภาครับด้วย ความเร็วในการส่งข้อมูลนี้ก็คือ Baud Rate นั้นเอง เช่น ต้องการส่งข้อมูลด้วยความเร็ว 9600 บิตต่อวินาที ก็จะต้องกำหนดให้สัญญาณ CLOCK มีค่าเท่ากับ 9600 Hz เมื่อสัญญาณ TxEn มีค่าเป็นลอจิก “0” แสดงว่ายังไม่ต้องการส่งข้อมูล จะทำให้สัญญาณ Tx มีสถานะเป็นลอจิก “1” จนกว่าสัญญาณ TxEn จะมีสถานะเป็นลอจิก “1” แสดงว่าต้องการส่งข้อมูลออกไป จะทำให้สัญญาณ Tx มีค่าเป็นลอจิก “0” เพื่อเป็นการบอกทางภาครับว่าจะเริ่มต้นส่งข้อมูลออกไป หลังจากนั้นจะทำการส่งข้อมูลออกไป DataTx[7..0] เป็นข้อมูลที่ต้องการส่งแบบอนุกรม โดยส่งบิตที่มีความสำคัญต่ำสุด (Bit 0) ออกไปก่อน จะส่งข้อมูลออกไปที่ละบิตจนครบทั้ง 8 บิต จากนั้นสัญญาณ Tx จึงมีสถานะเป็นลอจิก “1” เพื่อบอกทางภาครับว่าเป็นการสิ้นสุดการส่งข้อมูล เราสามารถนำวิธีการส่งข้อมูลแบบอนุกรมที่ได้กล่าวมาแล้วมาเขียนเป็น State Diagram ได้ดังรูปที่ 9

รูปที่ 9 State Diagram ของการส่งข้อมูลแบบอนุกรม


จาก State Diagram ในรูปที่ 9 เมื่อ TxEn มีค่าเป็นลอจิก “0” จะทำให้ Tx มีค่าเท่ากับลอจิก “1” และจะยังอยู่ใน State 1 จนกว่า TxEn จะมีค่าเป็นลอจิก “1” จึงจะเข้าสู่ State 2 ใน State 2 สัญญาณ Tx จะมีค่าเป็นลอจิก “0” เป็นการกำหนดบิตเริ่มต้นการส่งข้อมูล หลังจากนั้นจะเข้าสู่ State 3 ซึ่งจะเป็นการส่งข้อมูลออกไปที่ละบิต เริ่มต้นจะส่งข้อมูลบิตที่ 0 ออกไปก่อนและวนส่งข้อมูลออกไปจนครบ 8 บิต จึงจะหลุดเข้าสู่ State 4 จะกำหนดให้ Tx มีค่าเป็นลอจิก “1” เป็นการกำหนดบิตสิ้นสุดการส่งข้อมูล หลังจากนั้นจึงกลับเข้าสู่ State 1 ใหม่อีกครั้ง

ภาครับข้อมูลแบบอนุกรม
สำหรับภาครับข้อมูลแบบอนุกรมการทำงานจะคล้ายๆ กับทางภาคส่ง ข้อมูลแบบอนุกรมจะถูกส่งมาจากตัวส่ง เช่นคอมพิวเตอร์ , โครคอนโทรลเลอร์ เป็นต้น ข้อมูลแบบอนุกรมที่ส่งมาจะมีลักษะดังรูปที่ 10

 

รูปที่ 10 รูปแบบการรับข้อมูลแบบอนุกรม

จากรูปที่ 10 สัญญาณ Rx เป็นสัญญาณขนาด 1 บิตใช้สำหรับรับข้อมูลแบบอนุกรมที่ส่งมาจากตัวส่ง ในการออกแบบภาครับข้อมูลจะต้องมีสัญญาณ CLOCK เป็นสัญญาณอ้างอิง เพื่อกำหนดความเร็วในการรับข้อมูลซึ่งจะต้องสอดคล้องกับทางภาคส่ง เช่นภาคส่งใช้อัตราเร็วในการส่งข้อมูลเท่ากับ 9600 บิตต่อวินาที ทางภาครับก็จะต้องกำหนดให้มีอัตราเร็วในการรับข้อมูลเป็น 9600 บิตต่อวินาทีเช่นกัน เพราะฉะนั้นจะต้องกำหนดให้สัญญาณ CLOCK มีความถี่เท่ากับ 9600 Hz เมื่อสัญญาณ Rx มีค่าเป็นลอจิก “1” แสดงว่ายังไม่มีการส่งข้อมูลออกมา จะรอจนกว่า Rx มีค่าเป็นลอจิก “0” แสดงว่าทางภาคส่งจะเริ่มส่งข้อมูลมาแล้ว หลังจากนั้นจะทำการอ่านข้อมูลเข้ามาเก็บไว้ที่ละบิตจนครบทั้ง 8 บิต และตรวจสอบสัญญาณ Rx ว่าเป็นลอจิก “1” หรือไม่ หากเป็นลอจิก “1” แสดงว่าสิ้นสุดการส่งข้อมูล และกำหนดให้สัญญาณ DataRx[7..0] มีค่าเท่ากับสัญญาณที่รับมาได้ และกำหนดให้สัญญาณ RxEn มีค่าเป็นลอจิก “1” เพื่อเป็นสัญญาณกระตุ้นให้วงจรต่อไปนำข้อมูล DataRx[7..0] ไปใช้งาน เราสามารถนำวิธีการรับข้อมูลแบบอนุกรมที่ได้กล่าวมาแล้วมาเขียนเป็น State Diagram ได้ดังรูปที่ 11

รูปที่ 11 State Diagram ของการรับข้อมูลแบบอนุกรม

จาก State Diagram ในรูปที่ 11 เริ่มต้นจะอยู่ใน State 1 หากสัญญาณ Rx มีค่าเป็นลอจิก “1” จะไม่มีการเปลี่ยน Stateจะให้ค่า RxEn เป็นลอจิก “0” และ Buff[7..0] ซึ่งเป็น Buffer สำหรับเก็บข้อมูลที่อ่านมาได้จากสัญญาณ Rx มีค่าเป็น “00000000” เมื่อสัญญาณ Rx มีค่าเป็นลอจิก “0” แสดงว่าเป็นบิตเริ่มต้นของข้อมูลจะเปลี่ยนเป็น State 2 เมื่อเข้ามาที่ State 2 แสดงว่าได้มีการส่งบิตเริ่มต้นข้อมูลมาแล้ว ใน State นี้จะยังคงกำหนดให้ Buff[7..0] มีค่าเท่ากับ “00000000” , RxEn เป็นลอจิก “0” และ Bit มีค่าเท่ากับ 0 หลังจากนั้นจะเข้าสู่ State 3 โดยอัตโนมัติ ภายใน State 3 จะมีการอ่านข้อมูลจาก Rx เข้ามาเก็บไว้ใน Buff จะอ่านข้อมูลจนครบทั้ง 8 บิต นำข้อมูลที่ได้ทั้งหมดเก็บไว้ใน Buff และกำหนดให้สัญญาณ RxEn มีค่าเป็นลอจิก “0” เมื่ออ่านข้อมูลจนครบทั้ง 8 บิตแล้วก็เปลี่ยน State เป็น State 4 ภายใน State 4 จะมีการโอนย้ายข้อมูลจาก Buff มาเก็บไว้ใน DataRx ซึ่งเป็นข้อมูลขนาด 8 บิตทั้งหมดที่รับมาได้ และกำหนดให้ RxEn มีค่าเป็นลอจิก “1” เพื่อเป็นสัญญาณกระตุ้นให้ภาคอื่นๆ รับทราบว่าได้รับข้อมูลมาครบ 8 บิตแล้ว หลังจากนั้นก็จะกลับมา State 1 เพื่อรอรับข้อมูลอีกครั้ง

ถึงตอนนี้ท่านผู้อ่านคงพอจะทราบหลักการออกแบบ FPGA เพื่อทำหน้าที่เป็นตัวรับ – ส่งข้อมูลแบบอนุกรมกันแล้ว ในตอนต่อไปจะเป็นการใช้โปรแกรม MAX+Plus II เป็นเครื่องมือช่วยในการออกแบบเพื่อใช้งานกับ FPGA จริงๆ หากท่านใดสนใจสอบถามข้อมูลเพิ่มเติมได้ที่ email : support@astronlogic.com หรือสนใจเยี่ยมชมได้ที่ website : http://www.astronlogic.com