实验现象:

核心代码:

int main(void)
{/* USER CODE BEGIN 1 */int i;int address,data;char error_flag = 0;char receive_data[50];char buffer[8];char *p;/* 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_USART6_UART_Init();MX_FMC_Init();/* USER CODE BEGIN 2 */usart6.initialize(115200);usart6.printf("Hello, I am iCore4!\r\n");LED_GREEN_ON;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(usart6.receive_ok_flag == 1){usart6.receive_ok_flag = 0;memset(receive_data,0,sizeof(receive_data));memset(buffer,0,sizeof(buffer));for(i = 0;i < 30;i ++){receive_data[i] = usart6.receive_buffer[i];}p = receive_data;i = 0;while(*p != ':'){                                    //»ñÈ¡²Ù×÷ÃüÁwrite or read£©buffer[i++] = *p++;if(i > sizeof(buffer))i = 0;}for(i = 0;i < sizeof(buffer);i++){//½«ÃüÁîת»¯ÎªÐ¡Ð´×Ö·ûbuffer[i] = tolower(buffer[i]);}if(memcmp(buffer,"read",strlen("read")) == 0){//Ö´ÐжÁ²Ù×÷error_flag = 0;p++;address = atoi(p);if(address > 255)error_flag = 1;p++;if(strchr(p,','))error_flag = 1;if(!error_flag){data = fpga_read(address);usart6.printf("Read FPGA Ram:%d\r\n",data);}                    }else{error_flag = 1;}if(error_flag){LED_RED_ON;LED_GREEN_OFF;usart6.printf("Bad Command!\r\n");}else{LED_RED_OFF;LED_GREEN_ON;}}}/* USER CODE END 3 */}

module dual_port_ram_ctrl(input clk_25m,input rst_n,input wrn,input rdn,input cs0,inout [15:0]db,input [23:16]ab,output led_red,output led_green,output led_blue
);//-----------------------------ram-----------------------------//
wire [15:0]dataout_a;
wire [15:0]dataout_b;ram u1(.data_a(data_a),.address_a(address_a),.wren_a(wren_a),.rden_a(rden_a),.clock_a(!clk_a),.q_a(dataout_a),.data_b(db),.address_b(ab),.wren_b(1'd0),.rden_b(!rd),.clock_b(clk_b),.q_b(dataout_b)
);//-----------------------------clk_100m-----------------------------//

pll u2(.inclk0(clk_25m),.c0(clk_100m)
);//-------------------------------clk_a-----------------------------//
reg clk1,clk2;
always@(posedge clk_100m or negedge rst_n)if(!rst_n)beginclk1 <= 1'd0;clk2 <= 1'd0;endelse {clk2,clk1} <= {clk1,clk_25m};wire clk_a = (clk_25m & clk1);//-------------------------------data-----------------------------//
reg [9:0]data;
always@(posedge clk_25m or negedge rst_n)if(!rst_n)data <= 10'd0;else if(data == 10'd511)data <= 10'd0;else data <= data + 1'd1;//-------------------------write & read port a-------------------//
reg wren_a;
reg rden_a;
reg [9:0]data_a;
reg [9:0]address_a;always@(posedge clk_a or negedge rst_n)if(!rst_n)beginwren_a <= 1'd0;rden_a <= 1'd0;data_a <= 10'd0;address_a <= 10'd0;endelse if(data >= 10'd0 && data <= 10'd255)beginwren_a <= 1'd1;rden_a <= 1'd0;data_a <= data;address_a <= data;endelse if(data >= 10'd256 && data <= 10'd511)beginwren_a <= 1'd0;rden_a <= 1'd1;address_a <= data - 10'd256;end//-----------------------------ram a---------------------------//
reg error;always@(negedge clk1 or negedge rst_n)if(!rst_n)error <= 1'd0;elsebeginif(wren_a || dataout_a == address_a)error <= 1'd0;elseerror <= 1'd1;end//--------------------------ram_a_led---------------------------//
reg ledr,ledg,ledb;
always@(posedge error or negedge rst_n)if(!rst_n)beginledr <= 1'd1;ledg <= 1'd0;ledb <= 1'd1;    endelsebeginledr <= 1'd0;ledg <= 1'd1;ledb <= 1'd1;            end
assign {led_red,led_green,led_blue} = {ledr,ledg,ledb};//--------------------------ram_b_rd----------------------------//
wire rd = (cs0 | rdn);
wire wr = (cs0 | wrn);reg wr_clk1,wr_clk2;
always@(posedge clk_100m or negedge rst_n)if(!rst_n)beginwr_clk1 <= 1'd1;wr_clk2 <= 1'd1;endelse {wr_clk2,wr_clk1} <= {wr_clk1,wr};wire clk_b = (!wr_clk2 | !rd);
assign db = !rd ? dataout_b : 16'hzzzz;endmodule

源代码下载链接:

链接:http://pan.baidu.com/s/1qYqNlwg 密码:9il4

iCore4链接:

【iCore4 双核心板_FPGA】例程十六:基于双口RAM的ARM+FPGA数据存取实验相关推荐

  1. 【iCore1S 双核心板_FPGA】例程十二:基于单口RAM的ARM+FPGA数据存取实验

    实验现象: 核心代码: module single_port_ram(input CLK_12M,input WR,input RD,input CS0,inout [15:0]DB,input [2 ...

  2. 【iCore4 双核心板_FPGA】例程十一:FSMC总线通信实验——独立地址模式

    实验原理: STM32F767上自带FMC控制器,本实验将通过FMC总线的地址独立模式实现STM32与FPGA 之间通信,FPGA内部建立RAM块,FPGA桥接STM32和RAM块,本实验通过FSMC ...

  3. 【iCore1S 双核心板_FPGA】例程十六:基于SPI的ARM与FPGA通信实验

    实验现象: 核心代码: int main(void) {int i,n;char buffer[20];char spi_buffer[20];HAL_Init();system_clock.init ...

  4. 【iCore4 双核心板_FPGA】例程八:乘法器实验——乘法器使用

    实验现象: 程序运行时,绿色led闪烁(目前,具体的乘法器调用请参考iCore3乘法器例程) 核心代码: module multiplier_ctrl(input clk_25m,input rst_ ...

  5. 【iCore4 双核心板_FPGA】例程七:状态机实验——状态机使用

    实验现象: 按键每按下一次,三色LED改变一次状态. 核心代码: //--------------------module_rst_n---------------------------// mod ...

  6. 【iCore4 双核心板_FPGA】例程五:基础逻辑门实验——逻辑门使用

    实验现象: 打开tool-->Netlist viewer-->RTL viewer可观察各个逻辑连接 核心代码: //--------------------module_logic_g ...

  7. 【iCore1S 双核心板_FPGA】例程十:乘法器实验——乘法器的使用

    实验现象: 通过FPGA 的一个I/O 口连接LED:设定I/O 为输出模式.内部乘法器完成乘法计算后 改变输出LED 的状态(红色LED 闪烁). 核心代码: module MULT(input C ...

  8. 【iCore1S 双核心板_FPGA】例程十五:基于I2C的ARM与FPGA通信实验

    实验现象: 核心代码: int main(void) {int i,n;char buffer[20];char i2c_buffer[20];HAL_Init();system_clock.init ...

  9. 【iCore3 双核心板_FPGA】例程十二:Modelsim仿真实验

    实验指导书及代码包下载: 链接:http://pan.baidu.com/s/1hs4zNFY 密码:5z62 iCore3 购买链接: https://item.taobao.com/item.ht ...

最新文章

  1. python中newfile是干嘛用的_python 文件操作方法
  2. SQL基础(四):SQL命令
  3. Django框架(19.Django中获取url的参数(位置参数以及关键字参数))
  4. hmailserver mysql密码_第二步:点晴MIS系统Email模块hMailServer数据库连接配置指引
  5. python unittest生成html报告_python unittest--HTMLTestRunner生成报告
  6. linux mysql 静态库_Linux静态库与动态库实例详解
  7. 信息学奥赛一本通——1000:入门测试题目
  8. wc命令统计文件数据数量信息
  9. PS基础学习 2---图层蒙版
  10. 化工计算机软件基础考试题,2013年化工工程师基础知识网友版真题(下午卷)...
  11. node mysql 搭建博客_node.js+Hexo+Git搭建个人博客
  12. 表格数据的识别与提取
  13. 管理感悟:看清软件功能的“二八定律”
  14. Java三种方法实现字符串排序
  15. Mbed记录 STM32F207ZG板子引脚图
  16. 在哪儿比较好下载建筑学西方近现代的外文文献?
  17. hiar sdk for android,HiAR | HiAR SDK for Unity | 涂涂乐开发教程
  18. php qq登陆网站实例代码,QQ登陆网站实例代码
  19. 华东师大在职计算机分数线,报考华东师范大学在职研究生分数线是多少呢?
  20. Poly-Yolo复现

热门文章

  1. 阿里最新php面试题及答案,面经网-阿里php面试题(四)
  2. java+set+split_阿里资深工程师教你如何优化 Java 代码!
  3. c语言smile定义函数,【C初始之习题五】
  4. 浏览器里面看到的表单数据映射到python_python爬虫入门01:教你在 Chrome 浏览器轻松抓包...
  5. int signed in mysql_【转】mysql 中int类型字段unsigned和signed的区别
  6. python解放二次开发_[转载]Python二次开发程序详解
  7. 计算机寄存器端口,CPU和外设之间的数据传送方式有哪几种
  8. 大学计算机基础总结,大学计算机基础第二章总结
  9. Vim 重复操作的宏录制
  10. 导入数据中文乱码_基于Navicat和Kettle的数据迁移完全解读(多图)