การออกแบบตัวควบคุม VGA อย่างง่ายใน VHDL และ Verilog: 5 ขั้นตอน
การออกแบบตัวควบคุม VGA อย่างง่ายใน VHDL และ Verilog: 5 ขั้นตอน
Anonim
การออกแบบตัวควบคุม VGA อย่างง่ายใน VHDL และ Verilog
การออกแบบตัวควบคุม VGA อย่างง่ายใน VHDL และ Verilog

ในคำแนะนำนี้ เราจะออกแบบตัวควบคุม VGA อย่างง่ายใน RTL VGA Controller เป็นวงจรดิจิตอลที่ออกแบบมาเพื่อขับเคลื่อนจอภาพ VGA โดยจะอ่านจาก Frame Buffer (หน่วยความจำ VGA) ซึ่งแสดงถึงเฟรมที่จะแสดง และสร้างข้อมูลที่จำเป็นและสัญญาณซิงค์เพื่อการแสดงผล

หากคุณกำลังมองหา Verilog/System verilog code: เยี่ยมชมบล็อกของฉัน VGA Controller and Video System ใน Verilog

ขั้นตอนที่ 1: อินเทอร์เฟซของตัวควบคุม VGA

ต่อไปนี้เป็นสัญญาณอินเทอร์เฟซหลักในตัวควบคุม VGA

  • นาฬิกาพิกเซลหรือนาฬิกา VGA
  • สัญญาณ HSYNC และ VSYNC

สำหรับจอแสดงผล VGA ที่เลือก คุณต้องคำนวณความถี่ของนาฬิกาพิกเซลที่จำเป็นในการขับเคลื่อนก่อน ขึ้นอยู่กับพารามิเตอร์ 3 ตัว ได้แก่ พิกเซลแนวนอนทั้งหมด พิกเซลแนวตั้งทั้งหมด อัตราการรีเฟรชหน้าจอ

โดยทั่วไป F = THP * TVP * อัตราการรีเฟรช

ค้นหาเอกสารเกี่ยวกับนาฬิกาพิกเซลที่จำเป็นสำหรับจอแสดงผล VGA ต่างๆ ใน RAR ที่แนบมา

สัญญาณ HSYNC และ VSYNC ถูกสร้างขึ้นจากนาฬิกา Pixel เวลาของสัญญาณ HSYNC และ VSYNC ขึ้นอยู่กับจำนวนของพารามิเตอร์: Frontporch แนวนอนและแนวตั้ง Backporch แนวนอนและแนวตั้ง พิกเซลการแสดงผลแนวนอนและแนวตั้ง ความกว้างพัลส์ซิงค์แนวนอนและแนวตั้งและขั้ว

พารามิเตอร์เหล่านี้เป็นมาตรฐานสำหรับจอแสดงผล VGA ที่เลือก ค้นหาเอกสารเหล่านี้ใน RAR ที่แนบมา

พารามิเตอร์เหล่านี้เป็นพารามิเตอร์ที่กำหนดค่าได้ใน VGA Controller IP ของเรา

ขั้นตอนที่ 2: การรวมตัวควบคุม VGA เข้ากับจอแสดงผล VGA

การรวมตัวควบคุม VGA เข้ากับจอแสดงผล VGA
การรวมตัวควบคุม VGA เข้ากับจอแสดงผล VGA

รูปภาพแสดงวิธีการรวมตัวควบคุม VGA เข้ากับจอแสดงผล VGA คุณต้องมีส่วนประกอบเพิ่มเติมอีกสององค์ประกอบเพื่อให้ระบบสมบูรณ์:

  • Frame Buffer: หน่วยความจำที่เก็บเฟรมที่จะแสดง
  • Video DAC: DAC ที่แปลงข้อมูลดิจิตอล RGB และขับเคลื่อนจอแสดงผล VGA ด้วยสัญญาณอนาล็อก RGB ที่ระดับแรงดันไฟฟ้าที่เหมาะสม

หนึ่งใน Video DAC ที่ง่ายและเป็นที่นิยมที่สุดคือ ADV7125 เป็น DAC 8 บิตที่แปลงคำดิจิตอล RGB เป็นสัญญาณแอนะล็อก 0-0.7 V และขับเคลื่อนจอแสดงผล VGA

ขั้นตอนที่ 3: การออกแบบเฟรมบัฟเฟอร์

เป็นหน่วยความจำที่ 'เก็บ' ภาพที่จะแสดง โดยทั่วไปจะเป็น RAM หรือ ROM บางครั้ง เราจะหารือถึงวิธีออกแบบเฟรมบัฟเฟอร์เพื่อแสดงภาพ บัฟเฟอร์เฟรมส่งข้อมูลดิจิทัลนี้ไปยัง Video DAC ตามคำสั่งจากตัวควบคุม VGA

ก่อนอื่นเราต้องตัดสินใจเลือกความลึกของพิกเซลที่ต้องการ มันตัดสินคุณภาพของภาพ ความหลากหลายของสีที่พิกเซลสามารถแสดงได้ สำหรับ DAC 8 บิต เราต้องแสดงองค์ประกอบสีหลักของพิกเซล: R, G และ B ในแต่ละ 8 บิต หมายความว่า พิกเซลเป็น 24 บิต

แต่ละพิกเซลจะถูกจัดเก็บในลักษณะที่ต่อเนื่องกันในตำแหน่งหน่วยความจำบัฟเฟอร์เฟรม

สมมติว่าภาพที่จะแสดงมีขนาด 800x600 พิกเซล

ดังนั้นเฟรมบัฟเฟอร์ที่ต้องการคือ 800x600 = 480000 x 24 บิตหน่วยความจำ

ขนาดหน่วยความจำรวม 800x600x24 = 1400 kB โดยประมาณ

ถ้าภาพขาวดำ 800x600x1 = 60 kB โดยประมาณ

บล็อก RAM อาจใช้เพื่อเป็นตัวแทนของ Frame Buffer ใน Xilinx FPGA

ขั้นตอนที่ 4: บันทึกย่อ

  • จำเป็นต้องมีสัญญาณเพิ่มเติมบนตัวควบคุม VGA ขึ้นอยู่กับ DAC ที่เลือก ผมเคยใช้ ADV7125
  • เพิ่มรอบการหน่วงเวลาผ่าน flip-flop บน VSYNC และ HSYNC ก่อนขับจอแสดงผล VGA นี่เป็นเพราะเวลาแฝงของ DAC และหน่วยความจำ สัญญาณพิกเซลควรซิงโครไนซ์กับ HSYNC และ VSYNC ในกรณีของฉันมันเป็น 2 รอบล่าช้า
  • หากเฟรมบัฟเฟอร์ตามขนาดที่กำหนดไม่สามารถออกแบบบน FPGA ได้เนื่องจากข้อจำกัดขนาดบล็อกแรม ให้ใช้หน่วยความจำที่เล็กกว่าเพื่อแสดงภาพ และแก้ไขโค้ดเพื่อเลื่อนไปยังที่อยู่ในขอบเขตของหน่วยความจำที่มีอยู่ แทนที่จะเป็นขอบเขตของฟูลเฟรม การดำเนินการนี้จะทำซ้ำภาพเดียวกันซ้ำแล้วซ้ำอีกตลอดทั้งหน้าจอ อีกวิธีหนึ่งคือการปรับขนาดพิกเซลซึ่งแต่ละพิกเซลจะถูกจำลองเพื่อแสดงภาพทั้งหมดแบบเต็มหน้าจอด้วยความละเอียดที่น้อยกว่า ซึ่งสามารถทำได้โดยปรับแต่งตรรกะการเพิ่มที่อยู่ในโค้ด
  • IP นั้นพกพาได้อย่างสมบูรณ์ใน FPGA ทั้งหมด และมีการตรวจสอบเวลาสูงถึง 100 MHz บน Virtex-4 FPGA

ขั้นตอนที่ 5: ไฟล์แนบ

RAR ประกอบด้วย:

  • รหัสคอนโทรลเลอร์ VGA
  • PDFs ของมาตรฐาน VGA

แนะนำ: