博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iCore4 双核心板_FPGA】例程十:FSMC总线通信实验——复用地址模式
阅读量:4496 次
发布时间:2019-06-08

本文共 2245 字,大约阅读时间需要 7 分钟。

实验原理:

  STM32F767上自带FMC控制器,本实验将通过FMC总线的地址复用模式实现STM32与FPGA

之间通信,FPGA内部建立RAM块,FPGA桥接STM32和RAM块,本实验通过FSMC总线从STM32向

RAM块中写入数据,然后读取RAM出来的数据进行验证。

核心代码:

int main(void){  int i;    unsigned int fpga_read_data;    system_clock.initialize();    fsmc.initialize();    led.initialize();        LED_GREEN_ON;        while(1){                for(i = 0;i < 256; i++){            fpga_write(i,i);                                         }        for(i = 0;i < 100000; i++);        for(i = 0;i < 256;i++){            fpga_read_data = fpga_read(i);                       if(fpga_read_data != i){                LED_GREEN_OFF;                LED_RED_ON;            }        }        }}
module fsmc_ctrl(    input clk_25m,    input pll_100m,   input rst_n,        input FSMC_CLK,    input NADV,    input WRn,    input RDn,    input CSn,    input [23:16]AB,    inout [15:0]DB);    //--------------------wire---------------------------------//    wire rd = (CSn | RDn);    wire wr = (CSn | WRn);//--------------------ab-----------------------------------//    reg [23:0]address;    always @ (posedge NADV or negedge rst_n)        begin            if(!rst_n)                begin                    address <= 24'd0;                end            else                 begin                    address <= {AB,DB};                end                    end//--------------------clk----------------------------------//    reg wr_clk1,wr_clk2;            always @(posedge pll_100m or negedge rst_n)        begin            if(!rst_n)                begin                    wr_clk1 <= 1'd1;                    wr_clk2 <= 1'd1;                end            else                {wr_clk2,wr_clk1} <= {wr_clk1,wr};    //提取写时钟        end            wire clk = (!wr_clk2 | !rd);    //--------------------db_out-------------------------------//    wire [15:0]db_out;    assign DB = !rd ? db_out : 16'hzzzz;//--------------------my_ram-------------------------------//    my_ram u1(        .address(address),        .clock(clk),        .data(DB),        .wren(!wr),        .rden(!rd),        .q(db_out)        );//例化ram模块    //--------------------endmodule----------------------------//endmodule

源代码下载链接:

链接: 密码:syfc

iCore4链接:

转载于:https://www.cnblogs.com/xiaomagee/p/7462979.html

你可能感兴趣的文章
Java 8
查看>>
Javascript异步机制
查看>>
无序数组排序后的最大相邻差值
查看>>
CSS——img标签消除3px
查看>>
如何得到yum的rpm包
查看>>
Swift 设置导航栏透明
查看>>
机器学习的一些常用算法
查看>>
蘑菇街基于Docker的私有云实践
查看>>
堆和优先队列
查看>>
宽度优先搜索
查看>>
leetcode63 Unique Paths II
查看>>
兼容多浏览器的本地存储
查看>>
3分钟实现网页版多人文本、视频聊天室 (含完整源码)
查看>>
取消一个本地svn目录与svn的联系
查看>>
C++中值传递(pass-by-value)和引用传递(pass-by-reference)
查看>>
maven也是apache下的项目
查看>>
python -- 程序异常与调试(程序调试)
查看>>
TensorFlow的学习
查看>>
HAOI2007 反素数ant
查看>>
从提升树到 XGBoost, 原理简介
查看>>