โจทย์ข้อที่ 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 cycleT0L(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
ผลการสังเคราห์วงจร
ค่าสีเรึ่มต้น 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
pb ต่อกับขา หมายเลข 88 เป็น input ปุ่มกด
RST_B ต่อกับขา หมายเลข 91 เป็น input ปุ่มกด restart


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