创建一个NIOS环境 注意事项
前言:(先了解下硬件)
本板卡目前主要适合以下几类人:
(1)对FPGA 逻辑开发有强烈的兴趣,并且有一定的HDL基础
(2)计划采用FPGA图像架构,学习并研究图像算法的朋友
(3)准备研究使用FPGA,掌握FPGA图像算法处理架构的朋友
(4)找不到方向,想学习新知识,掌握FPGA未来动向的朋友,有决心吃苦的朋友
IP_Board Mini板卡介绍:
(1)VIP_Board Mini板卡由CrazyBingo本人开发,IC大小的板卡,麻雀虽小,五脏俱全。板卡采用Altera Cyclone IV
FPGA, 以EP4CE10E22C8N为核心,实现VGA、USB、CMOS接口、SDRAM、按键、LED等资源的配置,实现基本的基于FPGA的视频图像架 构,奠定后期HDL-VIP的基础,可作为实现硬件加速视频图像VIP算法处理的工具。
(2)关于VIP_Board Mini板卡的USB驱动安装过程,请参照《基于VIP_Board Mini的HDL-VIP开发教程.pdf》第四章“VIP_Board Mini
USB驱动安装教程”。
(3)关于更多VIP_Board Mini板卡介绍、逻辑代码、HDL-VIP代码例程实现分析,以及本软件的使用等内容,请详细阅读参照《基于VIP_Board Mini的HDL-VIP开发教程.pdf》。
(4)更多关于FPGA软硬件需求,相关的视频图像处理算法的的指导、斧正,以及相关的交流、合作,请邮件thereturnofbingo@gmail.com,本人愿意回答任何本人愿意回答的问题,并在第一时间回复您的指正!
板卡例程设计将在这FPGA的1W个LE的中,充分利用外围电路,榨干FPGA资源,最大程度的发挥其速度与性能,以实现最基本的视频图像VIP算法处理功能。独家编写教程:《基于VIP_Board Mini的HDL-VIP开发教程》,首先将通过例程来驱动、实现外驱动电路,简化FPGA HDL-VIP的门槛,由浅入深,逐步带领大家进入HDL-VIP开发之路。
关于VIP_Board Mini板卡的详细外设及功能介绍,如下表所示:
序号
|
功能模块
|
功能介绍
|
1
|
FPGA
|
采用Altera Cyclone
IV系列FPGA,作为VIP的CPU
|
2
|
VGA模块
|
采用ADV7123实现16Bit的真彩VGA接口电路,作为视频图像的显示接口
|
3
|
SDRAM
模块
|
采用Hynix的16Bit SDRAM HY57V641620,共有4Banks
*1024*16Bit的资源,作为视频图像的内存
|
4
|
USB模块
|
采用Cypress的68013方案,作为板卡与PC通信的桥片,以USB2.0实现FPGA与PC的视频图像传输功能
|
5
|
CMOS摄像头模块
|
支持官哥全系列摄像头模块(http://mcudiy.taobao.com),板卡暂定OV7725,最高能到640*480@60fps的图像
|
6
|
电源模块
|
采用MP2214 DCDC方案,USB通信兼提供电源,额定保险丝500mA电流,保护PC免受损害
|
7
|
FLASH
|
采用EPCS4串行SPI FLASH,4Mbit的空间足以承受1W LEs FPGA的逻辑代码
|
8
|
按键模块
|
(1) 1个全局复位按键
(2) 2个用户按键
|
9
|
LED灯
|
板载8个LED灯,采用74HC595实现3线串行配置
|
10
|
用户IO
|
引出20个用户IO(与VGA公用),提高了灵活性
|
11
|
JTAG接口
|
标准Altera JTAG接口,支持sof测试及jic固件的烧写
|
板卡集成VGA接口,继承了原先VIP_Board CMOS采集显示之路。不过为了解决使用VGA显示器的笨重繁琐的弊端,挣脱这原始的束缚,花了九牛二虎之力,终于设计并完善了VIP_Board的终端显示设备—通过USB传输,使用PC作为视频图像显示的终端。USB通过板载CY7C68013 USB IC链接实现,在不损失原有VGA接口的基础上,实现了基于USB2.0的视频图像传输。同时,为了降低USB视频图像算法开发的难度,加速VIP开发的进程,将重心转移到图像处理算法上,本人专门为此套件/为同类FPGA-VIP需求编写了USB_Cmmera_VIP_Panel上位机平台,软件包含了最基本的图像采集功能,主要如下:
(1)软件接受图像分辨率为640*480,默认采集并实时显示8Bit灰度图像。
(2)支持Bayer阵列数据格式的图像采集,转为RGB888并实时显示,帧率在15FPS左右。
(3)支持8Bit灰度数据格式的图像采集,并实时显示,帧率能达到30FPS。
(4)按键触发Capture,开始采集并实时显示外部输入的视频图像。
(5)按键触发Save,保存触发瞬间的画面到本机桌面,以CB_年月日时分秒.bmp命名
(6)支持垂直镜像功能,选择/取消Flip Vertical实现。
(7)支持水平镜像功能,选择/取消Flip Horizontal实现。
(8)USB数据正常连接与否,将在Help左边实时显示相关Logo标志。
(9)未完待续……
如下图为640*480分辨率、Bayer阵列的视频接收,并且竖直方向镜像模式的视频采集,当前为15FPS
板卡的FPGA代码例程,主要分为HDL-Logic,以及HDL-VIP2个部分,第一部分为HDL-Logi Examples,这部分例程主要基于Verilog HDL,实现基本的逻辑外设开发功能。这部分主要例程如下表所示:
序号
|
文件夹
|
内容介绍
|
1
|
01_Board_InterfaceTest
|
VIP底板LED、KEY的测试
|
2
|
02_VGA_Display_Test640480
|
VIP底板VGA 640*480@60Hz测试
|
3
|
02_VGA_Display_Test12801024
|
VIP底板VGA1280*1024@60Hz测试
|
4
|
03_VGA_Char_Display_Test
|
VIP底板VGA字符显示实验
|
5
|
04_SDRAM_VGA_Display_Test640480
|
SDRAM+VGA测试Demo
|
6
|
05_CMOS_OV7725_RGB640480
|
SDRAM+OV7725+VGA的视频显示
|
7
|
06_USB_OV7725_RAW_Demo
|
OV7725+68013的USB视频显示
|
第二部分为HDL-VIP Example,这部分例程主要基于Verilog HDL,实现基于HDL的Video Image
Processor视频图像算法的硬件加速处理。这部分主要例程序如下表所示:
序号
|
文件夹
|
内容介绍
|
1
|
01_CMOS_VIP_RGB888_YCbCr444
|
【VGA】RGB888转YCbCr444 VIP算法实现
|
2
|
02_CMOS_VIP_YCbCr444_RGB888
|
【VGA】YCbcR422转RGB888 VIP算法实现
|
3
|
03_CMOS_VIP_RAW2RGB888
|
【VGA】Bayer阵列转RGB888 VIP算法实现
|
4
|
04_USB_OV7725_RGB2Gray_Demo
|
【USB】RGB888转Gray灰度VIP算法实现
|
5
|
05_USB_OV7725_YCbCr2Gray_Demo
|
【USB】YCbCr422转Gyay灰度VIP算法实现
|
6
|
06-1_USB_OV7725_Gray_Mean_Filter
|
【USB】灰度图像的均值滤波VIP算法实现
|
7
|
06-2_USB_OV7725_Gray_Median_Filter
|
【USB】灰度图像的中值滤波VIP算法实现
|
8
|
07_USB_OV7725_Gray_Sobel_Demo
|
【USB】灰度图像的Sobel边缘检测VIP算法实现
|
9
|
08_USB_OV7725_Gray_Median_Filter_Sobel
|
【USB】灰度图像的中值滤波→Sobel VIP算法实现
|
10
|
09_USB_OV7725_Gray_Sobel_Erosion
|
【USB】灰度图像的Sobel→腐蚀运算VIP算法实现
|
11
|
10_USB_OV7725_Gray_Sobel_Erosion_Dilation
|
【USB】灰度图像的Sobel→腐蚀运算→膨胀运算VIP算法实现
|
12
|
11_USB_OV7725_Gray_Median_Filter
_Sobel_Erosion_Dilation
|
【USB】灰度图像的中值滤波→Sobel→腐蚀运算→膨胀运算VIP算法实现
|
好了,大家可以看到CrazyBingo开发了众多核心算法,非常值得借鉴和学习,但是基于某种原因,我们不得不进行nios项目开发中,但是CrazyBingo开发板目前还未配相关例程,所以对此我们进行了一些简单的nios例程开发,方便大家。
使用软件:Quartus
II 13.1 QSYS(建议大家使用12.0或13.1以上版本)
FPGA:EP4CE10E22C8
开发板:视频图像算法处理开发板 mini VIP 2.0
操作系统:xp
32bit
大家若环境一样,可以下载软件包使用。
更多相关细节请关注我的博客:
http://www.cnblogs.com/ccjt/
http://blog.chinaaet.com/shenyae86
我的淘宝:
http://ccjt.taobao.com/
新建一个工程(文件目录:D:\altera\ext\qsys_cb
这个目录直接用)
Clk:全部相连
Onchip_MM:指令和数据均需要链接
PIO:修改名字后,注意配置方向,数据长度等。引脚需要手动引出
Timer:若需要中断,还需要链接 中断线
NIOS,配置复位,中断向量
以上配置好后,重新分配基地址,直至没有错误,就可以生产nios了
此过程大约需要几分钟。
在我的系统下
也不过 1分钟。
直接拷贝此参考即可
qsys_ext3 u0 (
.clk_clk
(<connected-to-clk_clk>), // clk.clk
.sdram_wire_addr
(<connected-to-sdram_wire_addr>), // sdram_wire.addr
.sdram_wire_ba
(<connected-to-sdram_wire_ba>), // .ba
.sdram_wire_cas_n
(<connected-to-sdram_wire_cas_n>), // .cas_n
.sdram_wire_cke
(<connected-to-sdram_wire_cke>), // .cke
.sdram_wire_cs_n
(<connected-to-sdram_wire_cs_n>), // .cs_n
.sdram_wire_dq
(<connected-to-sdram_wire_dq>), // .dq
.sdram_wire_dqm
(<connected-to-sdram_wire_dqm>), // .dqm
.sdram_wire_ras_n
(<connected-to-sdram_wire_ras_n>), // .ras_n
.sdram_wire_we_n
(<connected-to-sdram_wire_we_n>), // .we_n
.led_external_connection_export
(<connected-to-led_external_connection_export>), //
led_external_connection.export
.spcs_external_dclk
(<connected-to-spcs_external_dclk>), // spcs_external.dclk
.spcs_external_sce
(<connected-to-spcs_external_sce>), // .sce
.spcs_external_sdo
(<connected-to-spcs_external_sdo>), // .sdo
.spcs_external_data0 (<connected-to-spcs_external_data0>), // .data0
.altpll_0_c2_clk
(<connected-to-altpll_0_c2_clk>), // altpll_0_c2.clk
.reset_reset_n
(<connected-to-reset_reset_n>) // reset.reset_n
);
添加nios文件,不然编译会出错。
编译完成后,开始进行软件设计
使用了EPCS、SDRAM、PIO、TIMER、PLL等等众多资源
选择空间目录(这样利于文件管理)
使用工程模版
自动生成
看到显示,说明nios已启动。
继续改进
增加:测试sdram
#include <stdio.h>
#include "system.h"
#include "string.h"
#define LEN (0x120000)
unsigned int * ram
= (unsigned int *)(SDRAM_BASE+0x10000); //SDRAM地址
int main()
{
unsigned int i=0;
printf("Hello from Nios II,I'm CrazyBingo!\n");
//*
//向ram中写数据,当ram写完以后,ram的地址已经变为(SDRAM_BASE+0x10100)
for(i=0;i<LEN;i++){
ram = i;
}
printf("wirte ok!\n");
//读取ram中的数据
for(i=0;i<LEN;i++){
if((i%(2560)==0) || i!=ram)printf("address:%08x-%08x\n",i,ram);
}
printf("read ok!\n");
//*/
return 0;
}
2015-3-25
由网友:奇迹再现 整理
|