1、实验6VGA彩条图像实验6 VGA彩条图像一、实验目的1. 掌握VGA显示器与DE2-70连接方法;2. 了解VGA 显示控制;3. 利用VGA显示高性能彩条测试图像。二、硬件设计说明DE2-70多媒体开发板的VGA输出支持30bits高性能图像输出,在此,设计一个基于Avalon ST总线的高性能彩条测试图像发生器。图6-1硬件的结构如图6-1所示,利用“Test Pattern Generator”和“Clocked Video Output”这两个IP核完成VGA彩条图像的输出。三、实验步骤(一)硬件初建:新建“demo_vga”工程图6-2鼠标左键双击桌面上的“Quartus II”快
2、捷方式图标,耐心等待片刻,即可启动 “QuartusII”设计页面,如图6-2所示。在“QuartusII”设计页面内,鼠标左键单击“File New Project Wizard”。弹出“New Project Wizard:introduction”,如图6-3所示。图6-3鼠标左键单击图6-3所示页面的“next”按钮跳过此页,进入“New Project Wizard: Directory, Name, Top-level entity”页面。在“New Project Wizard: Directory, Name, Top-level entity”页面:“the working
3、directory for this project”(工程路径)可以任意填写,例如:“E:/demo/demo_VGAcolpattern”。 “the name of this project”(工程名字)填为“demo_vga”。图6-4“the name of the top-level design entity for this project”(工程顶层实体名称)会自动与工程名字相同,也为“demo_vga”,如图6-4所示。这里需要注意:编写顶层文件时注意这个名字。图6-5鼠标左键单击“next”按钮,弹出图6-5所示的问句。图6-6鼠标左键单击“是” 按钮,进入“Add Fi
4、les page 2 of 5”页,如图6-6所示。由于实验到这里还没有建立任何档案。再加上后面步骤中也可以添加,故鼠标左键单击“Next”按钮跳过此页,进入“Family & Device Settings page 3 of 5”页。在“Family & Device Settings page 3 of 5”页面:“Device family”栏里的“family”选择“Cyclone II”。“Available devices”栏里选择“EP2C70F896C6”器件,其它为缺省设置。图6-7如图6-7所示。鼠标左键单击“next”按钮的话,还会出现第4页EDA工具的设置和第5页的“
5、Summary”,如果用到可以在此设置。由于目前没有用到,所以在这里就可以用鼠标左键单击 “Finish”按钮,完成新工程的初建。新建的“Quartus II-E:/demo/demo_VGAcolpattern/demo_vga-demo_vga”工程页面如图6-8所示。图6-8在“Quartus II-E:/demo/demo_VGAcolpattern/demo_vga-demo_vga”工程页面内“Project Navigator”(工程导航)下面的“entity”栏里,可以看到“Cyclone II: EP2C70F896C6”,和基于“Cyclone II: EP2C70F896
6、C6”芯片的工程“demo_vga”。图6-9这里需要注意:工程初建过程牵涉到几个方面,过程中的步骤没有先后之分。例如,完成“Quartus II”工程的初建后,如果发现“entity”栏里不是“Cyclone II: EP2C70F896C6”,如图6-9所示。鼠标左键双击“Stratix II: AUTO”,或者箭头指着“Stratix II:AUTO”然后鼠标单击右键,在下拉菜单里点击“settings”,两种方法都能使“Settings-demo_vga”的设置页弹出,在“Device”中,可以重新设置成如前面的图6-7所示。初建的“Quartus II-E:/demo/demo_VG
7、Acolpattern/demo_vga-demo_vga”工程页面,会自动保存在路径“E:demodemo_VGAcolpattern”下。如果想要再次打开此工程页面,可以再次打开此路径下的工程文件夹“demo_VGAcolpattern”,如图6-10所示。图6-10鼠标左键双击带有蓝色“Quartus”图标的“demo_vga”文件,就可以打开“Quartus II-E:/demo/demo_VGAcolpattern/demo_vga-demo_vga”工程页面。(二)利用“SOPC Builder”工具产生新硬件系统 配置硬件是个繁琐的事情,如果一个硬件参数配置不对,整个系统就不能用
8、,所以简便而实用的方法是从友晶科技的大师们提供的范例里拷贝硬件配置,另外还可以从已经做通的实验里拷贝硬件配置。在“Quartus II-E:/demo/demo_VGAcolpattern/demo_vga-demo_vga”工程页面,鼠标左键单击“open”按钮,弹出“打开”对话框。在 “查找范围”选择某个已经做通的实验所在的路径,把路径下的“nios0.sopc”文件拷贝到此实验所在的路径“E:/demo/demo_VGAcolpattern”下。鼠标左键双击“nios0.sopc”文件,打开后可以重新配置硬件。有些在此实验需要的硬件可以保留,有些用不到的硬件可以一个个删除:鼠标左键单击硬
9、件名称使其蓝色高亮,然后单击硬件默认显示栏下的“Remove”按钮,即可删去此硬件。在此,作为参考再次把此实验所需硬件完整配置一遍。虽然此实验会用到VGA显示器,但是此处不需要VGA_Controller,因此不需要拷贝VGA_Controller的ip核,直接建立硬件系统。在初建的“Quartus II-E:/demo/demo_VGAcolpattern/demo_vga-demo_vga”工程页面内,鼠标左键单击“Tools SOPC Builder”,弹出“Create New System”对话框,如图6-11所示。图6-11在“Create New System”对话框里:“Sys
10、tem Name”项后输入“nios0”。这里需要注意:编写顶层文件例化“nios0”系统时,要审视顶层文件中“System Name”是否是“nios0”。图6-12 “Target HDL”项一般选择“Verilog”。 鼠标左键单击“OK”按钮,即初步建成工程的“SOPC Builder”工具页面,如图6-12所示。在“SOPC Builder”工具页面里可以添加实现此工程所需硬件,形成良好的硬件系统。添加的硬件会在默认空白区出现,并且可以修改、删除,在默认空白区还显示硬件的连接。图6-13选择Verilog,表示“SOPC Builder”会将你稍后所配置的IP,以Verilog表示,
11、若你熟悉VHDL,也可以选择VHDL。这里的设定不是限制了日后只能用Verilog或VHDL写代码,因为Quartus II本来就允许Verilog与VHDL混合編程,也就是说Verilog的module可以使用VHDL的entity,VHDL的entity可以使用Verilog的module,最后都能顺利编译。这里需要注意:如果配置硬件的过程中暂停设计,关闭“SOPC Builder”工具页面会弹出一个问句,如图6-13所示。鼠标左键单击“Save”按钮,建立的硬件信息就保存到路径“E:/demo/demo_VGAcolpattern”下的 “nios0.sopc” 文件中。如果需要再次打开
12、此工程的“SOPC Builder”工具页面完成后续的硬件配置的话,可以先打开“Quartus II-E:/demo/demo_VGAcolpattern/demo_vga-demo_vga”工程页面(方法如图6-10所示),在工程页面内,鼠标左键单击“open”按钮弹出“打开”页面。在“查找范围”找到路径“E:demodemo_VGAcolpattern”下的“nios0.sopc”文件,鼠标左键双击 “nios0.sopc” 文件,即可打开本工程的“SOPC Builder”工具页面。(三)配置硬件1定义时钟 确认“SOPC Builder”工具页面的“Target/Device Fami
13、ly”是“Cyclone II”。在如图6-14所示的“Clock Settings”栏里可以看到50.0MHz,代表Nios II CPU在DE2-70可以运行在50.0MHz,但这时CPU降频在跑,正常情況下,Nios II CPU在DE2-70可以运行100.0MHz,所以可以用PLL将clk倍频成100.0Mhz。图6-142增加用来保存 Nios程序的片上存储器(On Chip Memory(RAM or ROM))“On Chip Memory”在FPGA芯片内,是DE2-70上所有存储器中存储量最小,但是速度最快的存储器。图6-15在“SOPC Builder”工具页面,鼠标左键
14、单击System Contents- Component Library- Memories and Memory Controllers - On Chip - On Chip Memory(RAM or ROM) - Add 。弹出“on chip memory”设置页面,如图6-15所示。在“on chip memory”设置页面:“Total Memory Size”设置为80960;其他为缺省设置,鼠标左键单击“Finish”按钮。不用管状态框里的错误,添加 Nios处理器后会自动消失。“Total memory size”与能使用的M4K存储器数量、FPGA、Nios II CPU
15、和Megafunction(如fcfifo)都会影响“On-chip Memory”的size,本教程使用 80k。“On Chip Memory”会在“SOPC Builder”工具页面默认空白区有显示如图6-16所示。如果想修改“On Chip Memory”的设置,可以左键双击硬件名称,会重新弹出如图6-15所示的设置页面。对于其他硬件来说,方法类似。图6-16把“onchip_memory2_0”改成“onchip_mem”。图6-173添加Nios II处理器(Nios II Processor)在“SOPC Builder”工具页面,鼠标左键单击System Contents-Co
16、mponent Library-Nios II Processor - Add,弹出“Nios II Processor”设置页面。在“Nios II Processor”设置页面:CPU设置为Nios II/f处理器;Reset Vector指向on-chip memory;Exception Vector指向 on-chip memory。如图6-17所示。鼠标左键单击“Finish”按钮,把“cpu_0”改成“cpu”。4添加调试接口(JTAG-UART)在“SOPC Builder”工具页面,鼠标左键单击System Contents-Component Library-Interfa
17、ce Protocols - Serial - JTAG UART -Add,弹出“JTAG UART”设置页,如图6-18所示。使用缺省设置,鼠标左键单击 “Finish”按钮。把“jtag_uart_0”改成“jtag_uart”。图6-18JTAG UART是PC与SOPC进行序列传输的一种方式,也是Nios II CPU标准的输出/输入设备。如printf()通过JTAG UART,经过USB Blaster将输出结果显示在PC的Nios II EDS上的console,scanf()通过USB Blaster经过JTAG UART将输入传给SOPC。5添加两个内部定时器(Interv
18、al Timer)图6-19在“SOPC Builder”工具页面,鼠标左键单击System Contents-Component Library-Peripherals -Microcontroller Peripherals - Interval Timer -Add,弹出“Interval Timer”设置页,按照图6-19所示设置,鼠标左键单击“Finish”按钮。把“timer_0”改成“timer”。6添加系统ID(System ID)图6-20在“SOPC Builder”工程页面,鼠标左键单击System Contents-Component Library-Periphera
19、ls- Debug and Performance- System ID Peripheral-Add,弹出“System ID peripheral”设置页面,如图6-20所示。使用缺省设置,鼠标左键单击“Finish”按钮,把“sysid_0”的名称改为“sysid”。“SOPC Builder”会使用System ID为每个系统提供识别符号,Nios II EDS可以识别符号防止使用者往FPGA上烧录了与“.ptf”不符合的“.sof”。7增加PLL本实验需要一个25MHz的时钟用做VGA Clock。图6-21在“SOPC Builder”工具页面,鼠标左键单击System Conte
20、nts-Component Library- PLL- PLL - Add。在弹出的对话框里,鼠标左键单击“Launch Alteras ALTPLL MegaWizard”,使按钮周框内侧出现虚方框,如图6-21所示。鼠标左键单击“next”按钮,进入ALTPLL多项设置页面。默认进入的页面是: 1 parameter settings栏的“General / Modes”设置页,显示为: 1 parameter settings为深兰色背景,“General / Modes”为General / Modes ,如图6-22左上角所示,此页缺省设置。图6-22图6-23鼠标左键单击 2 ou
21、tput clocks栏,默认转换到“c0-Core/External output clocks”的设置页面,在“c0-Core/External output clocks”的设置页面: 2 output clocks为深兰色背景,“clk c0”为clk c0,“clk c0”各参数按照图6-23所示页面设置。鼠标左键单击“Finish”按钮,并且单击经过的所有页面的“Finish”按钮。设置了PLL后,在本工程硬件系统的“SOPC Builder”工具页面,“Clock Settings” 栏下:“clk_0” 改名为“clk_50”;“pll_0_c0” 改名为“clk_25”;如图
22、6-24所示。图6-248增加 Test Pattern Generator 图6-25在“SOPC Builder”工具页面中,鼠标左键单击System Contents Component Library Video and Image Processing Test Pattern Generator Add,弹出“Test Pattern Generator”设置页面。在“Test Pattern Generator”设置页面,严格按照图6-25设置参数,然后鼠标左键单击“Finish”按钮,在“SOPC Builder”工具页面下部有错误提示,先不要理它,将该硬件的名称改为“tpg”
23、。图6-269增加 Clocked Video Output 在“SOPC Builder”工具页面中,鼠标左键单击System ContentsComponent Library Video and Image Processing IO Clocked Video Output Add。 弹出“Clocked Video Output”设置页面。在“Clocked Video Output”设置页面,严格按照图6-26所示设置参数,将该硬件的名称改为“vga”。图6-27此时,出现如图6-27左图所示情况,需要手动将“tpg”与“vga”连接起来。将光标移至器件左端,出现中图所示情况,鼠标
24、左键单击小白点,使其变成黑点,移开光标可以看到“tpg”与“vga”连接起来,如右图所示。到此已经完成了“nios0”硬件系统的搭建,结构如图6-28所示。图6-28(四)产生“.ptf”文件在“SOPC Builder”工具页面,鼠标左键单击 System AutoAssign Base Addresses,菜单自动设置映射地址;在“SOPC Builder”工具页面,鼠标左键单击System AutoAssign IRQs菜单自动设置中断号,中断号越小,优先级越高。一般把 Timer 的优先级设为最高。 图6-29鼠标左键单击“Generate”按钮。如果弹出问句,鼠标左键单击“Save”
25、按钮。 “Generate”过程中,弹出的“Generating System”页面显示有进度提示,如图6-29所示。当进度提示出现“info:system generation was successful”时“Generate”完成,“Generate”完成后,鼠标左键单击“Exit”按钮。如果弹出是否保存的问句,也用鼠标左键单击“Save”按钮。这里需要注意:“.ptf”文件与“Generate”完成后生成的其他文件都自动保存在路径 “E:/demo/demo_VGAcolpattern”下。(五)编写顶层文件“SOPC Builder”工具已经产生了“nios0”硬件系统,下面要在“Q
26、uartus II”里例化“nios0”,并且把“nios0”硬件系统与其他的逻辑电路、芯片的输入输出管腿连接。例化“nios0”硬件系统可以用原理图方法,或者用“Verilog”语言编写顶层文件。在此,采用“Verilog HDL”语言来编写顶层文件例化“nios0”硬件系统。图6-30在“Quartus II-E:/demo/demo_VGAcolpattern/demo_vga-demo_vga”工程页面,鼠标左键单击File New ,弹出“New”框。鼠标左键双击“Verilog HDL File”,打开“.v”文件录入区,如图6-30所示录入框中可以看到一条垂直的闪烁录入光标的文件
27、录入区。就像平时使用word文档时一样,把下面篇幅中提供的“demo_vga.v”内容(注意只拷贝冒号后面的内容)拷贝进去。demo_vga.v”内容如下:module demo_vga( input iCLK_50, / 50 MHz output 9: 0 oVGA_B, output 9: 0 oVGA_G, output 9: 0 oVGA_R, output oVGA_CLOCK, output oVGA_BLANK_N, output oVGA_SYNC_N, output oVGA_HS, output oVGA_VS ); wire clk_25; wire vid_h, vi
28、d_v, vid_h_sync, vid_v_sync; assign oVGA_CLOCK = clk_25; assign oVGA_SYNC_N = 0; assign oVGA_BLANK_N = (vid_v | vid_h); assign oVGA_HS = vid_h_sync; assign oVGA_VS = vid_v_sync; nios0 nios0_inst ( / global signals .clk_50(iCLK_50), / 50 MHz .clk_25(clk_25), /vga clock .reset_n(1b1), / CPU Reset .vid
29、_clk_to_the_vga (clk_25), .vid_data_from_the_vga ( oVGA_R, oVGA_G,oVGA_B), .vid_h_from_the_vga (vid_h), .vid_v_from_the_vga (vid_v), .vid_h_sync_from_the_vga (vid_h_sync), .vid_v_sync_from_the_vga (vid_v_sync) ); endmodule介绍顶层文件中部分代码完成的功能: “clk_25”输出端是“nios0”系统内部的锁相环元件的25MHz时钟输出,连接到“nios0”的“vid_clk_
30、to_the_vga”输入端(“Clocked Video Output”元件的视频时钟输入端,作为VGA扫描时序产生电路的时钟)。 “Clocked Video Output”产生的行、场同步信号“vid_h_sync”,“vid_v_sync”与VGA需要的同步信号极性相反,所以需要反相后再输出:assign oVGA_HS = vid_h_sync; assign oVGA_VS = vid_v_sync; 产生ADV7123的25MHz时钟输入:assign oVGA_CLOCK = clk_25; 产生ADV7123的同步信号输入(低电平有效,固定为低):assign oVGA_SY
31、NC_N = 0; 产生ADV7123的消隐信号输入(低电平有效),“Clocked Video Output”的 “vid_h”,“vid_v”是高电平有效,将这两个信号相或后反相即可:assign oVGA_BLANK_N = (vid_v | vid_h); (六)分配管腿 图6-31由于每个实验都是用DE2-70多媒体开发板,故所用的“.tcl”文件都是一样的。把路径“D:SOPC实验资料VGAcolpattern资料”下的“pinsde270.tcl”文件拷贝到此实验路径“E:demodemo_VGAcolpattern”下。然后,在“Quartus II-E:/demo/demo_VGAcolpattern/demo_vga-demo_vga”工程页面中,鼠标左键单击Tools TCL Scripts 菜单,弹出“Tcl Scripts”对话框,如图6-31所示。鼠标左键单击“pinsde270.tcl”使其高亮,然后鼠标左键单击“Run”按钮,稍等片刻即可以完成管腿分配。(七)硬件编译图6-32
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1