วันอาทิตย์ที่ 17 พฤษภาคม พ.ศ. 2558

lab 4.3

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

ใช้ IP core สำหรับ 16x2 LCD ที่มีอยู่บนบอร์ด FPGA


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

1) สร้างวงจรดิจิทัลเพื่ออ่านค่าจาก 4x4 keypad แล้วแสดงผลด้วย LEDs
2) สร้างวงจรดิจิทัลเพื่อส่งตัวอักษร 'a' ผ่าน UART ไปยังคอมพิวเตอร์ เมื่อกดปุ่มแล้วปล่อยในแต่ละครั้ง โดยใช้ค่า baudrate เท่ากับ 9600 (เน้นส่งข้อมูลไบต์จาก FPGA ไปยังคอมพิวเตอร์เท่านั้น ยังไม่ต้องรับข้อมูล)
3) ใช้ IP core สำหรับ 16x2 LCD ที่มีอยู่บนบอร์ด FPGA เพื่อแสดงข้อความ "Hello World!"


รายการอุปกรณ์

1. บอร์ด FPGA (Altra WARRIOR CYCLONE 3 EP3C10E144C)              1 บอร์ด
2. Byte Blaster II Cable หรือ USB Blaster Cable                                         1 ชุด
3.เครื่องคอมพิวเตอร์                                                                                     1 เครื่อง


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



โค้ด VHDL





ผลการทดลอง

รูปเมื่อให้ FPGA แสดงผล LCD



lab 4.2

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

สร้างวงจรดิจิทัลเพื่อส่งตัวอักษร 'a' ผ่าน UART


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

1) สร้างวงจรดิจิทัลเพื่ออ่านค่าจาก 4x4 keypad แล้วแสดงผลด้วย LEDs
2) สร้างวงจรดิจิทัลเพื่อส่งตัวอักษร 'a' ผ่าน UART ไปยังคอมพิวเตอร์ เมื่อกดปุ่มแล้วปล่อยในแต่ละครั้ง โดยใช้ค่า baudrate เท่ากับ 9600 (เน้นส่งข้อมูลไบต์จาก FPGA ไปยังคอมพิวเตอร์เท่านั้น ยังไม่ต้องรับข้อมูล)
3) ใช้ IP core สำหรับ 16x2 LCD ที่มีอยู่บนบอร์ด FPGA เพื่อแสดงข้อความ "Hello World!"


รายการอุปกรณ์

1. บอร์ด FPGA (Altra WARRIOR CYCLONE 3 EP3C10E144C)              1 บอร์ด
2. Byte Blaster II Cable หรือ USB Blaster Cable                                         1 ชุด
3.เครื่องคอมพิวเตอร์                                                                                     1 เครื่อง

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

     


โค้ด VHDL




ผลการจำลองการทำงาน Model Sim



ผลการทดลอง

รูปแสดงสัญญาณที่ถูกส่งผ่าน UART เมื่อปุ่มถูกกด

รูปแสดงสัญญาณที่ถูกส่งผ่าน UART เมื่อปุ่มถูกกด (แบบ zoom)

ข้อความที่คอมพิวเตอร์ได้รับ

วันจันทร์ที่ 23 มีนาคม พ.ศ. 2558

lab 4.1

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

การสร้างวงจรดิจิทัลเพื่ออ่านค่าจาก keypad 4x4 และแสดงผล

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

1) สร้างวงจรดิจิทัลเพื่ออ่านค่าจาก 4x4 keypad แล้วแสดงผลด้วย LEDs
2) สร้างวงจรดิจิทัลเพื่อส่งตัวอักษร 'a' ผ่าน UART ไปยังคอมพิวเตอร์ เมื่อกดปุ่มแล้วปล่อยในแต่ละครั้ง โดยใช้ค่า baudrate เท่ากับ 9600 (เน้นส่งข้อมูลไบต์จาก FPGA ไปยังคอมพิวเตอร์เท่านั้น ยังไม่ต้องรับข้อมูล)
3) ใช้ IP core สำหรับ 16x2 LCD ที่มีอยู่บนบอร์ด FPGA เพื่อแสดงข้อความ "Hello World!"

รายการอุปกรณ์

1. บอร์ด FPGA (Altra WARRIOR CYCLONE 3 EP3C10E144C)              1 บอร์ด
2. Byte Blaster II Cable หรือ USB Blaster Cable                                         1 ชุด
3. 4x4 keypad                                                                                               1 ชุด
4.เครื่องคอมพิวเตอร์                                                                                     1 เครื่อง

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

         การแสดงค่าที่ได้จากการอ่านค่า keypad จะต้องกำหนดตัวแปรเพื่อทำหน้าที่ตรวจสอบว่าปุ่มใดบน keypad ถูกกด โดยทำการวน loop เช็กตาม row และ column เมื่อปุ่มถูกกด FPGA ก็จะรับข้อมูลมาแสดงด้วย LEDs เป็นเลขฐานสอง

โค้ด VHDL



ผลการทดลอง

1.1 แสดงผลผ่าน LED


รูปการต่อวงจร



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