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

การทดลองที่ 3 ออกแบบวงจรดิจิทัลสร้างสัญญาณ PWM ควบคุมการทำงานของ WS2812 RGB LED โดยใช้ภาษา VHDL (แบ่งเป็น Components)


โจทย์ข้อที่ 3
นำวงจรเดิม (WS2812 RGB LED) ที่ได้ออกแบบไว้ด้วยภาษา VHDL ในการทดลองที่ 2 มาแก้ไข โดยแบ่งวงจรเดิม (design partitioning) ในระดับ top-level design ให้มีหรือประกอบด้วย component อย่างน้อย 3 ส่วน และออกแบบแต่ละส่วน ให้สามารถนำกลับมาใช้ได้อีก (design for reuse) และเมื่อนำมาร่วมกัน ยังสามารถทำงานได้ตามเดิม อธิบายการทำงานของแต่ละส่วนว่า มีอินเทอร์เฟส (interface) หลักการทำงาน และใช้เพื่อวัตถุประสงค์ในวงจร + การจำลองการทำงาน (Simulation) ของแต่ละส่วนด้วย VHDL Testbench (Unit Testing) และใช้ VHDL testbench เดิมทดสอบระบบรวม (Integration Testing)
โจทย์ข้อที่ 2
2) จงออกแบบวงจรดิจิลัทโดยใช้ภาษา VHDL สำหรับนำไปสร้างเป็นวงจรในชิป FPGA โดยใช้บอร์ดที่      มีอยู่ใน   ห้องแล็ป
     2.1) วงจรดิจิทัลมี 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 บิต
    2.2) พฤติกรรมการทำงานเป็นดังนี้
         - เมื่อเริ่มต้นหรือกดปุ่มรีเซต (RST_B) จะทำให้ค่าสีเป็น 0x000000 (24 บิต) และส่งออก

            ไปยัง WS2812 RGB LED หนึ่งครั้ง
         - เมื่อมีการกดปุ่ม PB แล้วปล่อยในแต่ละครั้ง จะมีการเปลี่ยนค่าสี 24 บิต แล้วส่งออกไปยัง        

             RGB LED ใหม่หนึ่งครั้ง ตามลำดับดังนี้ 0x000000 -> 0x0000FF -> 0x00FF00
              -> 0xFF0000 แล้ววนซ้ำ
   2.3) แนวทางการออกแบบและทดสอบ
        -  ออกแบบวงจรโดยใช้ภาษา VHDL
        -  เขียน VHDL Testbench เพื่อทดสอบการทำงาน และจำลองการทำงาน
        -  ทดสอบการทำงานในบอร์ด FPGA แล้ววัดสัญญาณโดยใช้ออสซิลโลสโคป
       -   บันทึกผลและเขียนรายงานการทดลอง




อุปกรณ์

1. บอร์ด Altera FPGA (WARRIOR CYCLONE3 DEV) ชิปหมายเลข EP3C10E144C8   1 บอร์ด
2. สายดาวน์โหลด ByteBlaster II Cable หรือ สายดาวน์โหลดUSB Blaster Cab                1 ชุด
3. เครื่องคอมพิวเตอร์                                                                                                       1 ชุด
4. ออสซิลโลสโคป                                                                                                          1 เครื่อง
5. สายวัด Logic Analyzer                                                                                               1 เส้น
6. WS2812 RGB LED                                                                                                   1 ดวง



ซอฟท์แวร์ที่ใช้
1. Altera Quartus II 13.1 (64-bit) Web Edition- ModelSim 

2. Altera 10.1d (Quartus II 13.1)





เเนวความคิดในการออกแบบ

 Block diagram


นำวงจรเดิม (WS2812 RGB LED) ที่ได้ออกแบบไว้ด้วยภาษา VHDL มาแก้ไข โดยแบ่งวงจรเดิม (design partitioning) ในระดับ top-level design ให้มีหรือประกอบด้วย component อย่างน้อย 3 ส่วน โดยทางกลุ่มได้ออกแบบเป็นสามส่วนดังต่อไปนี้


ส่วนที่ 1 (a1) เป็นส่วนของปุ่มกดเเละปุ่ม reset 
input
clk     เป็น clock cycle
pb     เป็น ปุ่มกด
rst_b เป็น ปุ่ม reset
output
add   เป็นการ cheak การกด ปุ่มกด ถ้ากด ปุ่มกด add จะเป็น 1 ไม่กด ปุ่มกด add จะเป็น 0
re      เป็นการ cheak การกด ปุ่มกด reset ถ้ากด ปุ่มกด reset  re จะเป็น 1
         ไม่กด ปุ่มกด reset  re จะเป็น 0
ส่วนที่ 2 (a2)  เป็นส่วนของการเปลี่ยนค่าสีของ  WS2812 RGB LED 24 บิต
input
clk     เป็น clock cycle
add   เป็นการ cheak การกด ปุ่มกด มาจากส่วนที่ 1 (a1)
re      เป็นการ cheak การกด ปุ่มกด reset มาจากส่วนที่ 1 (a1)
output
rgb    เป็น การเปลี่ยนค่าสีของ  WS2812 RGB LED 24 บิต
         เมื่อการกดแล้วปล่อย 1 ครั้ง จึงจะเปลี่ยนค่า สี WS2812 RGB LED 24 บิต เรียงลำดับตามนี้ 
         0x000000 -->0x0000FF --> 0x00FF00 --> 0xFF0000 แล้ววนซ้ำ หรือ กดปุ่ม reset 
         จะทำให้ ค่าสีเป็น 0x000000  

 
ส่วนที่ 3 (a3) เป็นส่วน data transfer time ของเเต่ละบิต
input
clk    เป็น clock cycle
rgb    เป็น การเปลี่ยนค่าสีของ  WS2812 RGB LED 24 บิต มาจากส่วนที่ 1 (a2)
output
data  เป็นการควบคุมการทำงานของ WS2812 RGB LED เพียง        1 ดวง ซึ่งเป็นสัญญาณตามข้อกำหนดของชิป WS2812 เพื่อส่งข้อมูลจำนวน 24 บิต
จากเอกสาร Datasheet ทำให้ทราบว่า เเต่ละบิตมี data transfer time
(นับตาม  clock  cycle) ไม่เท่ากัน ขึ้นอยู่ว่าบิตนั้นเป็น  logic 0 หรือ 1,ช่วง high หรือ low
หรือ เป็น reset บิตใหม่





จากโจทย์ที่ให้มา 1  clock  cycle  ใช้คาบ 20 ns เเละ จากตารางเมื่อนำเปรียบเทียบจะได้ว่า
                   20 ns  จะได้          1                 clock  cycle  
                   x   ns  จะได้   (1*x ns)/20ns     clock  cycle  
ดังนั้น
T0H(logic 0,ช่วง high) มี 0.35 us จะได้ 17.5 ประมาน 18 clock  cycle
T1H(logic 1,ช่วง high) มี 0.70 us จะได้  35 clock  cycle
T0L(logic 0,ช่วง low)  มี 0.80 us จะได้  40 clock  cycle
T1L(logic 1,ช่วง low)  มี 0.60 us จะได้  30 clock  cycle
RES   มี 50 us จะได้  2500  clock  cycle

 ทำการทดสอบย่อยของแต่ละส่วน แล้วนำสามส่วนที่ได้ออกแบบไว้นั้นมาใช้รวมกันในอีกหนึ่งไฟล์และทำการทดสอบรวม
โค้ด VHDL และ ผลการทดสอบการทำงานของแต่ละส่วนย่อย
 ส่วนที่ 1 (a1) เป็นส่วนของปุ่มกดเเละปุ่ม reset 

Code VHDL




Code VHDL Test branch





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



ผลการจำลองการทำงานด้วย Modelsim

กด ปุ่มกด add จะเป็น 1



 กด ปุ่มกด restart  re จะเป็น 1





ส่วนที่ 2 (a2)  เป็นส่วนของการเปลี่ยนค่าสีของ  WS2812 RGB LED 24 บิต

Code VHDL




Code VHDL Test branch




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



ผลการจำลองการทำงานด้วย Modelsim

เมื่อกดปุ่ม จะเปลี่ยน จาก x“000000”  เป็น  x“0000FF”




 เมื่อกดปุ่ม จะเปลี่ยน จาก x“0000FF”  เป็น  x“00FF00”





 เมื่อกดปุ่ม จะเปลี่ยน จาก x“00FF00”  เป็น  x“FF0000”





เมื่อกดปุ่ม จะเปลี่ยน จาก x“FF0000”  เป็น  x“000000”




เมื่อกดปุ่ม restart จะเป็น  x“000000”





 ส่วนที่ 3 (a3) เป็นส่วน data transfer time ของเเต่ละบิต

Code VHDL




Code VHDL Test branch




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



ผลการจำลองการทำงานด้วย Modelsim

ค่า data transfer time ของ  x“000000”



ค่า data transfer time ของ  x“0000FF




ค่า data transfer time ของ   x“00FF00”




 ค่า data transfer time ของ  x“FF0000”




ค่า data transfer time ของ  การ reset ค่าใหม่







การทำงานของวงจรรวม

Code VHDL



Code VHDL Test branch



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




ผลการจำลองการทำงานด้วย Modelsim

เมื่อกดปุ่ม จะเปลี่ยน จาก x“000000”  เป็น  x“0000FF”






เมื่อกดปุ่ม จะเปลี่ยน จาก x“0000FF”  เป็น  x“00FF00”





เมื่อกดปุ่ม จะเปลี่ยน จาก x“00FF00”  เป็น  x“FF0000”




เมื่อกดปุ่ม จะเปลี่ยน จาก x“FF0000”  เป็น  x“000000”



เมื่อกดปุ่ม restart จะเป็น  x“000000”




ค่า data transfer time ของ  x“000000”




ค่า data transfer time ของ  x“0000FF




ค่า data transfer time ของ   x“00FF00”




ค่า data transfer time ของ  x“FF0000”



ค่า data transfer time ของ  การ restart ค่าใหม่




Pin Planer

ขา I/O ของวงจรมีดังนี้
clk            ต่อกับขา หมายเลข 22  เป็น input clock
data         ต่อกับขา หมายเลข 75 เป็น output pwm
pb            ต่อกับขา หมายเลข 88  เป็น input ปุ่มกด

rst_b     ต่อกับขา หมายเลข 91 เป็น input ปุ่มกด restsrt


 ขั้นตอนการทดลองและผลการทำงาน    
 รูปภาพการทดลอง

ภาพรวมของวงจร โดยใช้ WS2812 RGB LED  1 ดวง




เมื่อกดปุ่มครั้งเเรก จะเปลี่ยน จาก x“000000” (ไม่มีสี) เป็น  x“0000FF” (สีน้ำเงิน)




เมื่อกดปุ่มครั้งที่สอง จะเปลี่ยน จาก x“0000FF” (สีน้ำเงิน) เป็น  x“00FF00” (สีเขียว)




เมื่อกดปุ่มครั้งที่สาม จะเปลี่ยน จาก x“00FF00” (สีเขียว) เป็น  x“FF0000” (สีเเดง)




รูปคลื่นสัญญาณจากออสซิลโลสโคป 

ไม่กดปุ่มจะได้ x“000000” (ไม่มีสี)






เมื่อกดปุ่มครั้งเเรก จะเปลี่ยน จาก x“000000” (ไม่มีสี) เป็น  x“0000FF” (สีน้ำเงิน)






เมื่อกดปุ่มครั้งที่สอง จะเปลี่ยน จาก x“0000FF” (สีน้ำเงิน) เป็น  x“00FF00” (สีเเดง) 





เมื่อกดปุ่มครั้งที่สาม จะเปลี่ยน จาก x“00FF00” (สีเเดง)  เป็น  x“FF0000” (สีเขียว)







เมื่อกดปุ่มครั้งที่สาม จะเปลี่ยน จาก 
x“FF0000” (สีเขียว)  เป็น  x“000000” (ไม่มีสี) 









เมื่อกดปุ่ม restart จะเป็น  x“000000” (ไม่มีสี) 


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

แสดงความคิดเห็น