วันจันทร์ที่ 23 กุมภาพันธ์ พ.ศ. 2558

lab 2

การทดลองที่ 2

ออกแบบวงจรดิจิทัลควบคุมการทำงานของ RGB LED


วิธีการทดลอง

จงออกแบบวงจรดิจิทัลโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA โดยวงจรดิจิทัลมี I/O ดังนี้
    - CLK (input) มีความถี่ 50MHz ใช้สำหรับกำหนดจังหวะการทำงานของวงจรทั้งหมด (เป็นการออก         แบบวงจรดิจิทัลแบบ Synchronous Design)
    - RST_B (input) เป็นอินพุตสำหรับใช้รีเซตแบบ Asynchronous สำหรับการทำงานของวงจรโดย           รวม (ทำงานแบบ Active-Low) ซึ่งได้จากวงจรปุ่มกด (Push Button)
    - PB (input) เป็นอินพุตจากปุ่มกด 1 ปุ่ม ทำงานแบบ Active-low เพื่อใช้ในการเปลี่ยน                           สีของ WS2812 RGB LED จำนวน 1ดวง
    - DATA (output) เป็นเอาต์พุตสำหรับนำไปควบคุมการทำงานของ WS2812 RGB LED เพียง               1 ดวง ซึ่งเป็นสัญญาณตาม ข้อกำหนดของชิป WS2812 เพื่อส่งข้อมูลจำนวน 24 บิต

พฤติกรรมการทำงานเป็นดังนี้
    - เมื่อเริ่มต้นหรือกดปุ่มรีเซต (RST_B) จะทำให้ค่าสีเป็น 0x000000 (24 บิต) และส่งออกไป                   ยัง WS2812 RGB LED หนึ่งครั้ง
    - เมื่อมีการกดปุ่ม PB แล้วปล่อยในแต่ละครั้ง จะมีการเปลี่ยนค่าสี 24 บิต แล้วส่งออกไปยัง                     RGB LED ใหม่หนึ่งครั้ง ตามลำดับดังนี้ 0x000000 -> 0x0000FF -> 0x00FF00 -> 0xFF0000         แล้ววนซ้ำ

แนวทางการออกแบบและทดสอบ
    - ออกแบบวงจรโดยใช้ภาษา 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 เครื่อง
6. RGB LED                                                                                                 1 ชุด

แนวทางการออกแบบ

จะต้องกำหนดให้การส่งค่าทั้ง 3 สัญญาณที่รับค่าจากปุ่มกดแต่ละปุ่มเป็นสัญญาณ PMW ที่ความถี่ 500 Hz เนื่องจากสัญญาณที่ส่งออกทาง output ทั้ง 3 สัญญาณ รูปแบบการส่งคือ จะส่งเป็น 24 บิตแบ่งเป็น 3 ชุด ชุดละ 8 บิตและเมื่อมีการกดปุ่มแล้วปล่อยในแต่ละครั้ง จะมีการเปลี่ยนค่าสี 24 บิตแล้วส่งออกไปยัง RGB LED ใหม่หนึ่งครั้ง ตามลำดับดังนี้ 0x000000 -> 0x0000FF -> 0x00FF00 -> 0xFF0000 แล้ววนซ้ำ และต้องมีการหน่วงเวลาของการกดปุ่ม ตัวเลขในการตรวจสอบเงื่อนไขจึงต้องกำหนดอย่างเหมาะสม

ผลการสังเคราะห์วงจร

Compilation Report

RTL View
ผลการทดลอง


วันเสาร์ที่ 14 กุมภาพันธ์ พ.ศ. 2558

ออกแบบวงจรดิจิทัล สร้างสัญญาณ PMW ควบคุมการทำงานของ RGB LED โดยใช้ภาษา VHDL

การทดลองที่ 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 ที่เป็นอิสระต่อกัน โดยกำหนดสัญญาณแต่ละคลื่นสัญญาณจากปุ่มกด