โจทย์ข้อที่ 3
โจทย์ข้อที่ 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 บิตใหม่
หรือ เป็น 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 cycleT1L(logic 1,ช่วง low) มี 0.60 us จะได้ 30 clock cycle
RES มี 50 us จะได้ 2500 clock cycle
ทำการทดสอบย่อยของแต่ละส่วน แล้วนำสามส่วนที่ได้ออกแบบไว้นั้นมาใช้รวมกันในอีกหนึ่งไฟล์และทำการทดสอบรวม
โค้ด VHDL และ ผลการทดสอบการทำงานของแต่ละส่วนย่อย
ส่วนที่ 1 (a1) เป็นส่วนของปุ่มกดเเละปุ่ม reset
Code VHDL
Code VHDL
Code VHDL Test branch
ผลการสังเคราห์วงจร
กด ปุ่มกด add จะเป็น 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 ของ การ 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“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” (ไม่มีสี)









