zoukankan      html  css  js  c++  java
  • 【iCore4 双核心板_FPGA】例程十一:FSMC总线通信实验——独立地址模式

    实验原理:

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

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

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

    核心代码:

    int main(void)
    {
        long int i;
        unsigned int fpga_read_data;
    
        system_clock.initialize();
        fsmc.initialize();
        led.initialize();
        
        LED_GREEN_ON;
        
        /*FSMC²âÊÔ*/
        while(1){        
            /*fmc²âÊÔ*/
            for(i = 0;i < 256; i++){
                fpga_write(i,i);                                    //ÏòFPGAдÊý¾Ý
            }
            
            for(i = 0;i < 100000; i++);
            for(i = 0;i < 256;i++){
                fpga_read_data = fpga_read(i);            //´ÓFPGAÖжÁÈ¡Êý¾Ý
                if(fpga_read_data != i){
                    LED_GREEN_OFF;
                    LED_RED_ON;
                    while(1);
                }
            }    
        }
    }
    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);
    
    //--------------------clk----------------------------------//
        reg wr_clk1,wr_clk2,wr_clk3;    
        
        always @(posedge pll_100m or negedge rst_n)
            begin
                if(!rst_n)
                    begin
                        wr_clk1 <= 1'd1;
                        wr_clk2 <= 1'd1;
                    end
                else
                    {wr_clk3,wr_clk2,wr_clk1} <= {wr_clk2,wr_clk1,wr};    //提取写时钟
            end
            
        wire clk = (!wr_clk1 | !rd);
        
    //--------------------db_out-------------------------------//
        wire [15:0]db_out;
        assign DB = !rd ? db_out : 16'hzzzz;
    
    //--------------------my_ram-------------------------------//
        my_ram u1(
            .address(AB),
            .clock(clk),
            .data(DB),
            .wren(!wr),
            .rden(!rd),
            .q(db_out)    
        );//例化ram模块
        
    //--------------------endmodule----------------------------//
    endmodule

    源代码下载链接:

    链接:http://pan.baidu.com/s/1misqyko 密码:eg83

    iCore4链接:

  • 相关阅读:
    页脚保持在未满屏页面的底部
    jquery tab选项卡
    Unity 物体在屏幕内跟随鼠标移动
    Unity 中一些图形学知识
    Unity 简单的第三人称视角
    Unity 一个简单的鼠标跟随
    Unity常用操作代码
    3D渲染管线
    教你如何利用threejs对3D模型皮肤进行DIY
    从Maya中把模型搬运至网页的过程
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/7505170.html
Copyright © 2011-2022 走看看