本文版权归 XiaomaGee所有,转载请注明出处。

_____________________________________

深入交流QQ群:

A: 204255896500人超级群,满员) B: 165201798500人超级群,满员)
C: 215053598
200人高级群,满员) D: 215054675200人高级群)

E: 215055211200人高级群) F: 78538605 500人高级群)

G:158560047500人高级群,满员)

YY 7182393

YY频道80518139(不定期语音群课)

论坛:http://www.heijin.org

店铺:http://i-board.taobao.com

博客:http://XiaomaGee.cnblogs.com

提示:请关注论坛和博客,以便浏览本文档最新版本

_____________________________________

一、 ARM 程序介绍

1. 写函数

1 #define fpga_write(offset, data) *((volatile unsigned short int*)(CS0_BASE + (offset << 17))) = data

其中:

  • offset为空间偏移量,范围为 0~7(8个空间);
  • data 为数据,16位整数,范围为 0~65535;
  • CS0_BASE 为ARM连接FPGA cs0的基地址,具体内容详见原理图。

若向空间2写入1234,则调用方法为:

1 fpga_write(2,1234);

2. 读函数

1 #define fpga_read(offset) *((volatile unsigned short int*)(CS0_BASE + (offset << 17)))

其中:

  • offset 为空间偏移量,范围为0~7(共8个空间);
  • 范围值为16位证书,范围为0~65535;
  • CS0_BASE 为ARM连接FPGAcs0的基地址,具体内容详见原理图。

若读取空间2的值,则调用方法为:

1 unsigned short int read_data;
2
3 read_data = fpga_read(2);

二、 FPGA 程序介绍

图示为FSMC 代码生成的顶层模块连接示意图,其中:

  • DB[15..0] AB[18..16] WR RD CS0 连接到 ARM上;
  • LED_FPGA 使用outg[0] 控制其亮和灭(可以通过面板控制);
  • ina[15..0] ~ inh[15..0] 为读取数据输入,共包含8个空间,每个空间16位;
  • outa[15..0]~outh[15..0]为写入空间寄存器,共8个空间,每个空间16位;

具体实现原理请参考 fsmc.v 程序。

//fsmc read / write ep4ce6 demomodule fsmc(ab,   //addressdb,    //datawrn,    //wrrdn,    //rdresetn,    //resetncsn,    //csina,    //input data ainb,    //input data binc,    //input data cind,    //input data dine,    //input data einf,    //input data fing,    //input data ginh,    //input data houta,    //output data aoutb,    //output data aoutc,    //output data aoutd,    //output data aoute,    //output data aoutf,    //output data aoutg,    //output data aouth    //output data a
    );input[2:0]    ab;inout[15:0] db;input wrn;input rdn;input resetn;input csn;input [15:0] ina;input [15:0] inb;input [15:0] inc;input [15:0] ind;input [15:0] ine;input [15:0] inf;input [15:0] ing;input [15:0] inh;output reg [15:0] outa;output reg [15:0] outb;output reg [15:0] outc;output reg [15:0] outd;output reg [15:0] oute;output reg [15:0] outf;output reg [15:0] outg;output reg [15:0] outh;wire rd;wire wr;reg [15:0] indata;assign rd = !(csn & rdn); //get rd pulse  ____|~~~~|______assign wr = !(csn & wrn); //get wr pulse  ____|~~~~|______assign db = rd ? indata:16'hzzzz;//write data, 根据地址线选择八个空间写入,每个空间16位always @(negedge wr or negedge resetn)beginif(!resetn)beginouta <= 16'h0000;outb <= 16'h0000;outc <= 16'h0000;outd <= 16'h0000;oute <= 16'h0000;outf <= 16'h0000;outg <= 16'h0000;outh <= 16'h0000;end    else  begincase (ab)            3'b000:outa <= db;3'b001:outb <= db;3'b010:outc <= db;3'b011:outd <= db;3'b100:oute <= db;3'b101:outf <= db;3'b110:outg <= db;3'b111:outh <= db;default:;endcaseendend//read data 根据地址线选择8个空间读取,每个空间 16位always @(rd or !resetn)beginif(!resetn)indata <= 16'h0000;else  begincase (ab)3'b000:indata <= ina;3'b001:indata <= inb;3'b010:indata <= inc;3'b011:indata <= ind;3'b100:indata <= ine;3'b101:indata <= inf;3'b110:indata <= ing;3'b111:indata <= inh;default:;endcaseendendendmodule

三、 功能测试

如上图所示,FPGA 内把outh[15..0] 输出的数据,取非后连接到 ina[15..0],ARM程序会写入空间7(也就是outh[15..0]),然后读取空间0(也就是ina[15..0]),然后做数据取非校验,判断成功与否。每轮测试 65536次,共进行300轮测试。核心代码如下:

for (i = 0; i < 65536; i++) {fpga_write(7, i);dat = fpga_read(0);if ((dat + i) != 65535) {errors++;}else success++;}

四、 软件界面

界面包含四个按键,按下【开始测试】则进行读写测试,测试中,按下【停止测试】则停止测试,按下【发光管亮】则FPGA 控制的发光二极管亮,【发光管灭】则FPGA控制的发光二极管灭。

软件包及 PDF 文档下载:

http://files.cnblogs.com/xiaomagee/iboard_fsmc_pub.zip

【iBoard 电子学堂教程】【STM32通过 FSMC 读写 FPGA示例】相关推荐

  1. 【iCore、iBoard 电子学堂教程】《QuartusII12.0安装与使用指南.REV0》

    点击下载 ____________________________________ 关于 ...... 交流方式: 官方博客:XiaomaGee.cnblogs.com 官方论坛:www.oshcn. ...

  2. 【iBoard 电子学堂教程】【uCGUI 例程及代码包下载】

    _____________________________________ 深入交流QQ群: A: 204255896(1000人超级群,可加入) B: 165201798(500人超级群,满员) C ...

  3. 【iBoard电子学堂开发板例程】【12个 stm32 例程发布】

    _____________________________________ 深入交流QQ群: A: 204255896(1000人超级群,可加入) B: 165201798(500人超级群,满员)  ...

  4. 【iCore组合式双核心开发板教程】通过STM32 FSMC 读写FPGA Verilog 例子

    文档及工程点击下载. _______________________________________ 关于--  交流方式: 官方博客:XiaomaGee.cnblogs.com 官方论坛:www.o ...

  5. [黑金原创教程][连载][iBoard 电子学堂][第八卷 设计任意波发生器]第三篇 直接数字合成(DDS)原理...

    一.什么是频率 频率是指单位时间内某事件重复的次数.在电子学中,信号的频率是指单位时间内信号的周期数,单位是赫兹(Hertz,简称Hz).很多年前有一个著名的德国物理学家海因里希 · 鲁道夫 · 赫兹 ...

  6. [黑金原创教程][连载][iBoard 电子学堂][第〇卷 电子基础]第一篇 认识电子元器件...

    一.什么是电子元器件 常言道,巧妇难为无米之炊,电子元器件就是电子工程师的"米",它们是电子工程师日常设计中接触到最多的实物,掌握常用器件的各项特性,是一个合格的电子工程师必备技能 ...

  7. [黑金原创教程][连载][iBoard 电子学堂][第八卷 设计任意波发生器]第二篇 iBoard 任意波发生器原理...

    一.iBoard任意波发生器硬件框图 iBoard 任意波发生器硬件框图如图一所示.它主要包含CPU电路.FPGA电路.接口电路.液晶与人机界面电路.直流DAC 电路.高速DA转换器.低通滤波器.衰减 ...

  8. [黑金原创教程][连载]关于《iBoard 电子学堂》的学习及进阶方式

    <iBoard 电子学堂>自发布以来,受到广大网友的热烈关注.虽然我前期设计我花了大量精力,但能得到大家的认可,我也非常欣慰.由于<iBoard 电子学堂>是从工程的角度来设计 ...

  9. [黑金原创教程][连载][iBoard 电子学堂][第〇卷 电子基础]第二篇 电路图与印刷电路板...

    一.什么是电路原理图 电路原理图是使用图形符号按照一定的顺序排列,详细表示电路.设备的基本连接关系,而不考虑实际位置.物理形式的一种简图,也常常简称电路图或者原理图. 1.原理图基本元素 电路原理图是 ...

最新文章

  1. 状态管理框架开发不完全指南
  2. 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析
  3. [spring]Attribute scope must be declared for element type bean
  4. 【渝粤教育】国家开放大学2018年秋季 0508-21T影视特技及后期合成 参考试题
  5. EmailMessage类
  6. Android NDK升级17后编译提示找不到mips64el-linux-android-strip
  7. 11个绝佳免费矢量素材下载网站,拿走不谢!
  8. Windows 入侵痕迹清理技巧
  9. Python 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误原因分析及解决方案
  10. Google确认Chrome存在严重漏洞,向20亿用户发出警告:你们需立即更新浏览器
  11. web安全—万能密码登录(跳过密码验证)
  12. 心态不好的时候留给自己看
  13. docker 批量垃圾清理
  14. chisel格雷码二进制转换
  15. 服务发现Discovery
  16. 数字孪生流域工程建设研究案例
  17. stm32 led屏控制卡_全彩LED显示屏出现亮线的时候怎么处理比较好呢?
  18. postman之get请求方法讲解
  19. 免费电子书籍下载站点●大全
  20. 喜报|众享链网荣获第二届中国可信区块链安全攻防大赛优秀案例奖

热门文章

  1. 面试官:说出Redis 16 个常见使用场景
  2. 合宙lua库详解-ril
  3. 昨天买了款philips 9@9e, 发文庆祝一下
  4. LocalDateTime 输入天数,天数是浮点数,折算成天,时,分,秒计算到LocalDateTime
  5. 【学习笔记】数据库系统原理 第十章 数据库事务恢复技术
  6. sqllite查询数据量_Sqlite3查询指定行数数据
  7. 为什么领导不重视软件质量?
  8. 董付国老师与Python大事记
  9. matalab 阶跃信号代码
  10. java计算机毕业设计ssm+jsp线上授课系统