การทดลองที่ 1
ออกแบบวงจรดิจิทัล สร้างสัญญาณ PMW ควบคุมการทำงานของ RGB LED โดยใช้ภาษา VHDL
วิธีการทดลอง
จงออกแบบวงจรดิจิทัลโดยใช้ภาษา VHDL สําหรับนําไปสร้างเป็นวงจรในชิป FPGA โดยวงจรดิจิทัลมี I/O ดังนี้
- CLK (input) มีความถี่ 50MHz ใช้สําหรับกําหนดจังหวะการทํางานของวงจรทั้งหมด (เป็นการ
ออกแบบวงจรดิจิทัลแบบ Synchronous Design)
- RST_B (input) เป็นอินพุตสําหรับใช้รีเซตแบบ Asynchronous สําหรับการทํางานของวงจรโดยรวม
(ทํางานแบบ Active-Low) ซึ่งได้จากวงจรปุ่มกด (Push Button)
- PB[2:0] (input) เป็นอินพุตจากปุ่มกด 3 ปุ่ม ทํางานแบบ Active-low เพื่อใช้ในการเปลี่ยนค่า
Duty Cycle โดยเพิ่มทีละ 10 ในช่วง 0 ถึง 100 สําหรับสัญญาณ PWM(2:0) ที่มี 3 ช่องสัญญาณ
- PWM[2:0] (output) เป็นเอาต์พุตสําหรับนําไปควบคุมการทํางานของ RGB LED จํานวน 1 ดวง
พฤติกรรมการทํางานเป็นดังนี้
- เมื่อเริ่มต้นหรือกดปุ่มรีเซต RST_B ค่า PWM[2:0] จะเป็นลอจิก 0 ทัÊง 3 ช่องสัญญาณ และมีค่า
Duty Cycle สําหรับสัญญาณ PWM[i], i=0,1,2 เป็น 0
- เมื่อกดปุ่มใดๆ PB[i], i=0,1,2, แล้วปล่อยในแต่ละครั้ง จะเพิ่มค่า Duty Cycle ของสัญญาณ PWM
สําหรับช่องสัญญาณ i ทีละ 10 แต่ถ้าถึง 100 จะกลับไปเริ่มต้นที 0 ใหม่
- สัญญาณ PWM แต่ละช่อง ต้องมีความถี่เท่ากันและคงที่ และสามารถเลือกใช้ความถี่ได้ใน
ช่วง 500Hz ถึง 1kHz
แนวทางการออกแบบและทดสอบ
- ออกแบบวงจรโดยใช้ภาษา VHDL
- เขียน VHDL Testbench เพืÉอทดสอบการทํางาน และจําลองการทํางาน
- ทดสอบการทํางานในบอร์ด FPGA แล้ววัดสัญญาณโดยใช้ออสซิลโลสโคป
(ไม่ต้องต่อวงจร RGB LED จริง)
รายการอุปกรณ์
1. บอร์ด FPGA (Altra WARRIOR CYCLONE 3 EP3C10E144C) 1 บอร์ด
2. Byte Blaster II Cable หรือ USB Blaster Cable 1 ชุด
3. ออปซิโลสโคป 1 เครื่อง
4. สายวัด Logic Analzer 1 ชุด
5. เครื่องคอมพิวเตอร์ 1 เครื่อง
แนวทางการออกแบบ
จะต้องกําหนดให้การส่งค่าทั้ง 3 สัญญาณที่รับค่าจากปุ่มกดแต่ละปุ่มเป็นสัญญาณ PMW ที่ความถี่ 500 Hzเนื่องจากสัญญาณที่ส่งออกทาง output ทั่ง 3 มีการคํานวณและการกําหนดเงื่อนไขที่เหมือนกัน จึงใช้ตัวแปร array และ การวน loop มาช่วยในการเขียนโค้ด เพื่อให้ง่ายต่อการแก้ไข และทําความเข้าใจ ในส่วนของการกําหนดเงื่อนไขและการคํานวณ จะต้องกําหนดค่าของ Duty cycle ให้เพิ่มทีละ 10% จาก 0% จนถึง 100% และเมื่อถึง 100% แล้วจะวนกลับมาเป็น 0% เหมือนเดิมโดยใช้การกําหนดเงื่อนไข (if-else) ในส่วนต่อมาคือ การกดปุ่ม 1 ครั้งจะต้องมีการหน่วงเวลาของการกดปุ่ม ตัวเลขในการตรวจสอบเงื่อนไขจึงต้องกําหนดอย่างเหมาะสม
โค้ด VHDL
ผลการสังเคราะห์วงจร
![]() |
| Compilation Report |
![]() |
| RTL view |
![]() |
| รูปการต่อวงจร |
![]() |
| รูปคลื่นสัญญาณในช่วง 10 % , 20 % และ 30 % ตามลำดับ |
![]() |
| รูปคลื่นสัญญาณแสดงการเปลี่ยนแปลงของคลื่นทั้ง 3 ที่เป็นอิสระต่อกัน โดยกำหนดสัญญาณแต่ละคลื่นสัญญาณจากปุ่มกด |





ไม่มีความคิดเห็น:
แสดงความคิดเห็น