社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 1781|回复: 1

Cyclone V试用报告二 ROM空间测试

[复制链接]

345

TA的帖子

123

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2012-12-9 10:45:42 | 显示全部楼层 |阅读模式
FPGA中“时间”和“空间”是两个比较重要的概念。所谓时间,多指系统运行速度;空间,大都关乎逻辑门、内存等资源的使用。在FPGA开发中,以时间换空间和以空间换时间是经常用到的。随着FPGA资源越来越丰富,人们似乎不再那么关心空间使用,更关心时间资源。内存空间的使用可以通过牺牲空间来提升系统运行速度,Cyclone V 拥有丰富的存储资源:
■ DDR3 SDRAM
            ■ Four 128-Mbyte (MB) device with a 16-bit data bus
            ■ Two 128-MB device with a 8-bit data bus
■ One 18-MB SSRAM
■ One 512-MB synchronous flash        
通过向导,建立调用ROM的IP核:
Tools--MegaWizard Plug-In Manager:
1.jpg
FPGA大部分封装好的IP核都可以通过该方式调用,可以看出,可用的IP核还是很丰富的。
2.jpg

可以选择需要的存储类型,
3.jpg

按照向导一步步设置就可以,Cyclone V 新增M10K,比原来的M4K 使用更加便捷。

在设置过程中,需要添加.mif/.hex文件,该文件存储了rom表里面的数据,mif文件的获取可以通过C编程或Matlab编程获得:
以存储正弦波数据为例,可通过C语言编程获取,
         #include "stdio.h"
#include "conio.h"
#include "math.h"
main()
{
    int i;
    float j;
    int y;
    FILE *fp;
    if((fp = fopen("rom.mif", "wa")) == NULL)
        exit(1);
    for(i = 0; i < 128; i++)
    {
        y = 128 * sin(j) + 128;
        fprintf(fp, "%d:%d;\n", i, y);
        j += 2 * 3.1416 / 128;
    }
    fclose(fp);
    printf("Hello, world\n");
    getch();
}

Matlab编程参考如下:
width=10; %宽度是10,指数据位数
depth=1024; %深度是1024,指地址位数
index = linspace(0,pi/2,depth);
sin_a=sin(index); %归一化
sin_d=fix(sin_a*(2^width-1)); %量化
plot(sin_d);
axis([0,depth-1,0,2^width-1]);
%===============================
%&iquest;&ordf;&Ecirc;&frac14;&ETH;&acute;mif&Icirc;&Auml;&frac14;&thorn;
%===============================
addr=0:depth-1;
str_width=strcat('WIDTH=',num2str(width));
str_depth=strcat('DEPTH=',num2str(depth));
fid=fopen('d:\sin.mif','w'); %新建mif文件,存放任意位置和文件名任意
%如果只写文件名,则在当前目录下建立此文件
fprintf(fid,str_width);
fprintf(fid,';\n');
fprintf(fid,str_depth);
fprintf(fid,';\n\n');
fprintf(fid,'ADDRESS_RADIX=HEX;\n'); %%%下面的数据输入选择16进制,可根据情况改写
fprintf(fid,'DATA_RADIX=HEX;\n\n');
fprintf(fid,'CONTENT BEGIN\n');
fprintf(fid,'\t%X : %X;\n',[addr;sin_d]) %开始写数据
fprintf(fid,'END;\n');
fclose(fid);

在设置完之后,会看到向导生成的文件:
4.jpg

可以直接调用rom_inst.v里面的子模块:
sin_test rom_test_inst (
.address ( address_sig ),
.clock ( clock_sig ),
.q ( q_sig )
);

直接在主模块里面调用即可。

[ 本帖最后由 buer1209 于 2012-12-9 10:47 编辑 ]
此帖出自FPGA/CPLD论坛


回复

使用道具 举报

1944

TA的帖子

0

TA的资源

裸片初长成(初级)

Rank: 10Rank: 10Rank: 10

荣誉会员勋章

发表于 2012-12-9 22:20:10 | 显示全部楼层
太高深,看不懂啊。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-12-15 01:06 , Processed in 0.143616 second(s), 20 queries , Redis On.

快速回复 返回顶部 返回列表