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

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

โจทย์ข้อที่ 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 แล้ววัดสัญญาณโดยใช้ออสซิลโลสโคป
           (ยังไม่ต้องต่อวงจร RGB LED จริง)
       -   บันทึกผลและเขียนรายงานการทดลอง



อุปกรณ์
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)



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

เมื่อการกดแล้วปล่อย 1 ครั้ง จึงจะเปลี่ยนค่า สี WS2812 RGB LED 24 บิต เรียงลำดับตามนี้ 0x000000 -->0x0000FF --> 0x00FF00 --> 0xFF0000 แล้ววนซ้ำ หรือ กดปุ่มรีเซต จะทำให้ค่าสีเป็น 0x000000  เเละ จากเอกสาร 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





โค้ด VHDL Testbench




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







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

ค่าสีเรึ่มต้น  x“000000”





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


ค่าสี x“0000FF”




ค่าสี  x“00FF00”




ค่าสี  x“FF0000”



เมื่อกดปุ่ม RST_B




Pin Planer




ขา I/O ของวงจรมีดังนี้

clk            ต่อกับขา หมายเลข 24  เป็น input clock
data          ต่อกับ หมายเลข 77 เป็น output 
pb             ต่อกับขา หมายเลข 88  เป็น input ปุ่มกด
RST_B      ต่อกับขา หมายเลข 91 เป็น input ปุ่มกด restart


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

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