實驗原理:
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連結: