【iBoard 电子学堂教程】【STM32通过 FSMC 读写 FPGA示例】
本文版权归 XiaomaGee所有,转载请注明出处。
_____________________________________
深入交流QQ群:
A: 204255896(500人超级群,满员) B: 165201798(500人超级群,满员)
C: 215053598(200人高级群,满员) D: 215054675(200人高级群)
E: 215055211(200人高级群) F: 78538605 (500人高级群)
G:158560047(500人高级群,满员)
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示例】相关推荐
- 【iCore、iBoard 电子学堂教程】《QuartusII12.0安装与使用指南.REV0》
点击下载 ____________________________________ 关于 ...... 交流方式: 官方博客:XiaomaGee.cnblogs.com 官方论坛:www.oshcn. ...
- 【iBoard 电子学堂教程】【uCGUI 例程及代码包下载】
_____________________________________ 深入交流QQ群: A: 204255896(1000人超级群,可加入) B: 165201798(500人超级群,满员) C ...
- 【iBoard电子学堂开发板例程】【12个 stm32 例程发布】
_____________________________________ 深入交流QQ群: A: 204255896(1000人超级群,可加入) B: 165201798(500人超级群,满员) ...
- 【iCore组合式双核心开发板教程】通过STM32 FSMC 读写FPGA Verilog 例子
文档及工程点击下载. _______________________________________ 关于-- 交流方式: 官方博客:XiaomaGee.cnblogs.com 官方论坛:www.o ...
- [黑金原创教程][连载][iBoard 电子学堂][第八卷 设计任意波发生器]第三篇 直接数字合成(DDS)原理...
一.什么是频率 频率是指单位时间内某事件重复的次数.在电子学中,信号的频率是指单位时间内信号的周期数,单位是赫兹(Hertz,简称Hz).很多年前有一个著名的德国物理学家海因里希 · 鲁道夫 · 赫兹 ...
- [黑金原创教程][连载][iBoard 电子学堂][第〇卷 电子基础]第一篇 认识电子元器件...
一.什么是电子元器件 常言道,巧妇难为无米之炊,电子元器件就是电子工程师的"米",它们是电子工程师日常设计中接触到最多的实物,掌握常用器件的各项特性,是一个合格的电子工程师必备技能 ...
- [黑金原创教程][连载][iBoard 电子学堂][第八卷 设计任意波发生器]第二篇 iBoard 任意波发生器原理...
一.iBoard任意波发生器硬件框图 iBoard 任意波发生器硬件框图如图一所示.它主要包含CPU电路.FPGA电路.接口电路.液晶与人机界面电路.直流DAC 电路.高速DA转换器.低通滤波器.衰减 ...
- [黑金原创教程][连载]关于《iBoard 电子学堂》的学习及进阶方式
<iBoard 电子学堂>自发布以来,受到广大网友的热烈关注.虽然我前期设计我花了大量精力,但能得到大家的认可,我也非常欣慰.由于<iBoard 电子学堂>是从工程的角度来设计 ...
- [黑金原创教程][连载][iBoard 电子学堂][第〇卷 电子基础]第二篇 电路图与印刷电路板...
一.什么是电路原理图 电路原理图是使用图形符号按照一定的顺序排列,详细表示电路.设备的基本连接关系,而不考虑实际位置.物理形式的一种简图,也常常简称电路图或者原理图. 1.原理图基本元素 电路原理图是 ...
最新文章
- 状态管理框架开发不完全指南
- 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析
- [spring]Attribute scope must be declared for element type bean
- 【渝粤教育】国家开放大学2018年秋季 0508-21T影视特技及后期合成 参考试题
- EmailMessage类
- Android NDK升级17后编译提示找不到mips64el-linux-android-strip
- 11个绝佳免费矢量素材下载网站,拿走不谢!
- Windows 入侵痕迹清理技巧
- Python 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误原因分析及解决方案
- Google确认Chrome存在严重漏洞,向20亿用户发出警告:你们需立即更新浏览器
- web安全—万能密码登录(跳过密码验证)
- 心态不好的时候留给自己看
- docker 批量垃圾清理
- chisel格雷码二进制转换
- 服务发现Discovery
- 数字孪生流域工程建设研究案例
- stm32 led屏控制卡_全彩LED显示屏出现亮线的时候怎么处理比较好呢?
- postman之get请求方法讲解
- 免费电子书籍下载站点●大全
- 喜报|众享链网荣获第二届中国可信区块链安全攻防大赛优秀案例奖