【iCore1S 双核心板_ARM】例程十七:FSMC实验——读写FPGA

时间:2023-03-09 03:01:36
【iCore1S 双核心板_ARM】例程十七:FSMC实验——读写FPGA

实验现象:

先烧写FPGA程序,再烧写ARM程序,ARM程序烧写完毕后即开始读写RAM测试,测试成功,绿色ARM·LED亮,测试失败,红色ARM·LED闪烁。

核心代码:

int main(void)
{ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
MX_FSMC_Init(); /* USER CODE BEGIN 2 */
int i;
unsigned short int fsmc_read_data;
LED_GREEN_ON; /*ÂÌÉ«ledÁÁ£¬±íʾ²âÊÔÕý³£
ºìÉ«ledÁÁ£¬±íʾ²âÊÔʧ°Ü£¬²âÊÔ½áÊø*/ /* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while ()
{
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
for(i = ;i < ;i++){
fpga_write(i,i); //ÏòFPGAдÈëÊý¾Ý
}
for(i = ;i < ;i++){
fsmc_read_data = fpga_read(i); //´ÓFPGA¶ÁÊý¾Ý
if(fsmc_read_data != i){
LED_GREEN_OFF;
LED_RED_ON;
while();
}
} }
/* USER CODE END 3 */ }
 module FSMC_Ctrl(
ab,
db,
wrn,
rdn,
csn,
PLL_100M,
RST_n,
nadv
); //-------------------------fsmc ------------------------------//
input [:]ab;
inout [:]db;
input wrn;
input rdn;
input csn;
input PLL_100M;
input RST_n;
input nadv; wire rd;
wire wr;
wire [:]DB_OUT;
//-------------------------rd_wr ----------------------------//
assign rd = (csn | rdn);
assign wr = (csn | wrn); //-------------------------ab ------------------------------//
reg [:]address;
always @ (posedge nadv or negedge RST_n)
begin
if(!RST_n)
begin
address <= '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 <= 'd1;
wr_clk2 <= 'd1;
end
else
{wr_clk2,wr_clk1} <= {wr_clk1,wr}; //提取写时钟
end wire clk = (!wr_clk2 | !rd); //------------------------db_out -------------------------//
assign db = !rd ? DB_OUT : 'hzzzz; //------------------------ma_ram ------------------------//
my_ram u1( //ram块例化
.address(address),
.clock(clk),
.data(db),
.wren(!wr),
.rden(!rd),
.q(DB_OUT),
); //-------------------------endmodule ------------------------------//
endmodule

实验方法及指导书:

链接:https://pan.baidu.com/s/1fN0LlFdfTBUqA7VeLMxieA
提取码:zbjj

【iCore1S 双核心板_ARM】例程十七:FSMC实验——读写FPGA