Xilinx AccelDSP与System Generator的简单应用.docx

上传人:b****2 文档编号:24389417 上传时间:2023-05-26 格式:DOCX 页数:8 大小:191.95KB
下载 相关 举报
Xilinx AccelDSP与System Generator的简单应用.docx_第1页
第1页 / 共8页
Xilinx AccelDSP与System Generator的简单应用.docx_第2页
第2页 / 共8页
Xilinx AccelDSP与System Generator的简单应用.docx_第3页
第3页 / 共8页
Xilinx AccelDSP与System Generator的简单应用.docx_第4页
第4页 / 共8页
Xilinx AccelDSP与System Generator的简单应用.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Xilinx AccelDSP与System Generator的简单应用.docx

《Xilinx AccelDSP与System Generator的简单应用.docx》由会员分享,可在线阅读,更多相关《Xilinx AccelDSP与System Generator的简单应用.docx(8页珍藏版)》请在冰豆网上搜索。

Xilinx AccelDSP与System Generator的简单应用.docx

XilinxAccelDSP与SystemGenerator的简单应用

XilinxAccelDSP与SystemGenerator的简单应用

2008-08-2010:

28:

30

分享:

标签:

  Xilinx AccelDSP System Generator matlab FPGA

     目前在嵌入式开发中,嵌入式cpu成为比较热门的开发方式,在FPGA中嵌入一个cpu核,并且可以按需添加一些cpu的外设。

用专门的编译器编译C语言后直接在cpu中运行,将逻辑控制与算发集成在一块芯片上,大大缩短了产品的开发周期。

然而,在数字信号处理中的算法由纯粹的c语言实现速度是一个很大的问题。

而直接用vhdl实现算法,可以大大提高信号的处理速度,比如fft需要大量的运算,而用vhdl硬件实现,可以在很少的时钟周期内完成一个1024点的fft。

然而从算法到vhdl的转换却是很麻烦的事,XinlixAccelDSP为此问题提供了支持。

     SystemGenerator可以在matlabsimulink实现仿真验证设计,可以将设计生成ISE的工程,还可以通过sharememory生成EDK的IP核,在EDK中直接加入工程,然后可以通过指针对其进行数据读写操作,就像读写存储器一样方便。

     AccelDSP可以将matlab描述的算法直接转换为vhdl语言描述的模块,也可以转换为,SystemGenerator的一个模块。

大大简化了从算法描述到vhdl的转换。

     下面以一个的在指纹图像细化处理中的一个简单的算法函数介绍一下,AccelDSP与SystemGenerator的联合使用。

     首先,打开AccelDSP,新建一个工程名为thin的工程,点击软件左边蓝色区域如下图所示的图标。

                                           

    然后在下图所示中选择“createnewproject”,工程名为thin,将已经编写好的thin.m文件和thinscript2.m文件加入到工程。

      

    然后点击OK完成创建工程,点击窗口左边的verifyfloatingpoint,选择脚本文件thinscript2.m,以一个二值化的简单矩阵验证细化功能:

data=[000011000;

     111111110; 

     111111100;

     001111000;

     101110000;  

     111110000;

     001110001;

     000100110

     000000101];

thin模块部分代码如下:

functionf=thin(din,start)

persistentx;

persistentflag;

persistentdelflag1;

persistentdelflag2;

ifisempty(x)

   x=zeros(1,9);

end

ifisempty(flag)

   flag=0;

end

ifisempty(delflag1)

   delflag1=0;

end

ifisempty(delflag2)

   delflag2=0;

end

.....................

...算法实现部分(略)

 

verifyfloatingpoint完成后,得到的结果如下图所示:

                                       

由图可见,该模块实现了图片细化的功能。

     此时,可以在窗口的中间见到如下图所示得工程设计文件的结构:

                               

     

     下面进一步完成设计,先选择好器件型号,在此使用spartan3e-xc3s500e-fp320-450MHz,Flow选择systemGenerator。

     下一步,点击Analyze完成后点击GenerateFixedPoint后得到一个生成报告,包括输入,输出和设计所用到的变量的定点量化信息。

     然后点击verify fixedpoint得到的结果与前面floatingpoint几乎一致。

说明通过了定点数的验证。

     接着点击GenerateRTL,通过后点击VerifyRTL,通过后可以看到入下图所示的图标出现:

                                      

     此时点击此图标根据提示选择好相应的目录就可以生成在SystemGenerator的模块了。

 

     紧接着启动matlab2007a,打开sumilink,点击xilinxblockset,可以看到刚才生成的模块,如下图:

 

 

                        

       然后新建一个.mdl文件,命名为thincore.mdl,将此模块添加进去,并加入sharememory中的“toregester”和“fromregester”,然后加入BasicElements中的SystemGenerator模块,添加一个index中的EDKprocessor,按下图所示连接好各个模块:

       

                                

      然后双击EDKprocessor,将10个寄存器添加到memorymap中点击OK。

双击System Generator,按下图所示选择好后点击Generate就可以生成EDK的ip核了。

      

 

                          

 

 

     在生成的目录下面找到pcores文件夹。

将其中的文件夹复制到EDK的工程目录下面的pcore文件夹中去。

然后打开已经建好的xps工程,在IPCatalog下出现了一个ProjectLocalpcores。

点开可以看到一个IP核,将其,加入到工程中,并将起连接到plb总线上,选择好地址空间,自动生成地址。

然后点击DeviceConfiguration->updatebitstream,更新比特文件。

运行完成后,新建一个softwareproject编写代码,并初始化thincore_plbw核。

其初始化程序如下:

voidInitialize_thincore()

 xc_iface_t*iface;

 xc_to_reg_t*face_x1,*face_x2,*face_x3;

  xc_to_reg_t*face_x4,*face_x5,*face_x6;

 xc_to_reg_t*face_x7,*face_x8,*face_xp,*face_start;

 xc_from_reg_t*face_del;

 xc_create(&iface,&THINCORE_PLBW_ConfigTable[0]);

 xc_get_shmem(iface,"x1",(void**)&face_x1);

  xc_get_shmem(iface,"x2",(void**)&face_x2);

 xc_get_shmem(iface,"x3",(void**)&face_x3);

 xc_get_shmem(iface,"x4",(void**)&face_x4);

 xc_get_shmem(iface,"x5",(void**)&face_x5);

 xc_get_shmem(iface,"x6",(void**)&face_x6);

 xc_get_shmem(iface,"x7",(void**)&face_x7);

 xc_get_shmem(iface,"x8",(void**)&face_x8);

 xc_get_shmem(iface,"x9",(void**)&face_xp);

 xc_get_shmem(iface,"start",(void**)&face_start);

 xc_get_shmem(iface,"del",(void**)&face_del);

  x1=(Xuint32*)face_x1->din; 

  x2=(Xuint32*)face_x2->din; 

  x3=(Xuint32*)face_x3->din; 

  x4=(Xuint32*)face_x4->din; 

  x5=(Xuint32*)face_x5->din; 

  x6=(Xuint32*)face_x6->din; 

  x7=(Xuint32*)face_x7->din; 

  x8=(Xuint32*)face_x8->din; 

  xp=(Xuint32*)face_xp->din; 

  start=(Xuint32*)face_start->din; 

  del=(Xuint32*)face_del->dout;

      其中x1~xp为全局变量,分别指向thincore核的各个端口的映射地址。

      初始化后就可以在C语言程序中直接用指针对端口进行读写。

一个实际的指纹图片细化结果如下图所示:

                

 可见,在算法上实现了指纹细化的功能。

而且在实际中相对于直接用C语言实现大大提高了指纹细化的速度。

至此,完成了从matlab算法描述自动到vhdl的实现,最后到嵌入式cpu核调用的实现的一个简单的应用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1