实验现象:

写RAM命令格式:write:地址(0-255),数据(0-65535)\cr\lf

读RAM命令格式:read:地址(0-255)\cr\lf

核心代码:

int main(void)
{ /* USER CODE BEGIN 1 */
int i;
int address,data;
char error_flag = ;
char receive_data[];
char buffer[];
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();
usart6.printf("Hello, I am iCore4!\r\n"); /* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while ()
{
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
if(usart6.receive_ok_flag == ){
usart6.receive_ok_flag = ;
memset(receive_data,,sizeof(receive_data));
memset(buffer,,sizeof(buffer));
for(i = ;i < ;i ++){
receive_data[i] = usart6.receive_buffer[i];
}
p = receive_data;
i = ;
while(*p != ':'){ //»ñÈ¡²Ù×÷ÃüÁwrite or read£©
buffer[i++] = *p++;
if(i > sizeof(buffer))i = ;
}
for(i = ;i < sizeof(buffer);i++){//½«ÃüÁîת»¯ÎªÐ¡Ð´×Ö·û
buffer[i] = tolower(buffer[i]);
}
if(memcmp(buffer,"write",strlen("write")) == ){//Ö´ÐÐд²Ù×÷
error_flag = ;
p++;
address = atoi(p);
if(address > )error_flag = ;
p++;
p = strchr(p,',');
if(p == NULL)error_flag = ;
if(!error_flag){
p++;
data = atoi(p);
if(data > )error_flag = ; if(!error_flag){
fpga_write(address,data);
usart6.printf("Write FPGA Ram Successfully!");
}
}
}else{
if(memcmp(buffer,"read",strlen("read")) == ){//Ö´ÐжÁ²Ù×÷
error_flag = ;
p++;
address = atoi(p);
if(address > )error_flag = ;
p++;
if(strchr(p,','))error_flag = ;
if(!error_flag){
data = fpga_read(address);
usart6.printf("Read FPGA Ram:%d\r\n",data);
}
}else{
error_flag = ;
}
}
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 ram_ctrl(
input clk_100m,
input rst_n,
input wr_n,
input rd_n,
input cs0,
input [:]ab,
inout [:]db,
output led_red,
output led_green,
output led_blue
);
//----------------------------clk------------------------------//
wire wr,rd;
wire [:]data_out; assign wr = wr_n | cs0;
assign rd = rd_n | cs0; reg wr_0,wr_1;
always@(posedge clk_100m or negedge rst_n)
if(!rst_n)
begin
wr_0 <= 'd1;
wr_1 <= 'd1;
end
else
{wr_1,wr_0} <= {wr_0,wr}; wire clk = !wr_1 | !rd;
assign db = !rd ? data_out:'hzzzz; //----------------------------ram------------------------------//
ram u1(
.clock(clk),
.wren(!wr),
.rden(!rd),
.address(ab),
.data(db),
.q(data_out)
); //----------------------------led_ctrl-------------------------//
reg led;
always@(posedge clk or negedge rst_n)
if(!rst_n)
led <= 'd1;
else
led <= ~led; assign {led_red,led_green,led_blue} = {'d1,led,1'd1}; endmodule

源代码下载链接:

链接:http://pan.baidu.com/s/1pKZTJAj 密码:pkf7

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 [:]DB, input ...

  2. 【iCore3 双核心板_FPGA】实验十八:基于单口RAM的ARM+FPGA数据存取实验

    实验指导书及代码包下载: http://pan.baidu.com/s/1i58Ssvz iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

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

    实验现象: 核心代码: module DUAL_PORT_RAM( input CLK_12M, inout WR, input RD, input CS0, :]A, :]DB, output FP ...

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

    实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; int address,data; ; ]; ]; char *p; /* US ...

  5. 【iCore3 双核心板_FPGA】实验十九:基于双口RAM的ARM+FPGA数据存取实验

    实验指导书及代码包下载: http://pan.baidu.com/s/1pLReIc7 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  6. 【iCore3 双核心板】例程十五:USB_CDC实验——高速数据传输

    实验指导书及代码包下载: http://pan.baidu.com/s/1gemYjz9 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  7. 【iCore4 双核心板_FPGA】例程十:FSMC总线通信实验——复用地址模式

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

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

    实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,通过串口精灵给ARM发送数据从而给FPGA发送数据 ,会接收到字符GINGKO. 3.通过串口精灵发送命令可以控制ARM·L ...

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

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

随机推荐

  1. Burp Suite之爬网模块(二)

    Spider功能 Burp Spider爬网介绍 Burp Spider 是一个映射 web 应用程序的工具.它使用多种智能技术对一个应用程序的内容和功能进行全面的清查. 通过跟踪 HTML 和 Ja ...

  2. Nodejs学习之mongodb Error: failed to connect to [localhost:27017]

    在连接mongodb时出现以下错误提示信息 events.js: throw er; // Unhandled 'error' event ^ Error: failed to connect to ...

  3. IT 产品 需求 痛点

    英文应该有个 汉语发音 标注 这样的平台软件.罗马音.

  4. AGC027 E - ABBreviate

    目录 题目链接 题解 代码 题目链接 AGC027 E - ABBreviate 题解 神仙啊 建议查看https://img.atcoder.jp/agc027/editorial.pdf 定义a ...

  5. R2 day2

    简单写一下吧 emmmm,来晚了1h,没赶上,所以没交.......(捂脸 T1 开始读错题了诶 开烤1.2h后 发现是个傻逼题.... 排序一下,维护前缀最左,右端点 随机数据我跑的比他们都慢... ...

  6. scrollview滑动到某区域执行某种方法

    在这里通过  offset.y   检测滑动到的区域 通过if 语句执行需要的方法   -(void)scrollViewDidScroll:(UIScrollView *)scrollView { ...

  7. EasyUI学习总结(六)——EasyUI布局

    一.EasyUI布局介绍 easyUI布局容器包括东.西.南.北.中五个区域,其中中心面板是必须的,而东.西.南.北这四个面板是可选的,如果布局里面不需要东.西.南.北这四个面板,那么可以把相应的di ...

  8. normalize.css的使用

    normalize.css有下面这几个目的: 保护有用的浏览器默认样式而不是完全去掉它们一般化的样式:为大部分HTML元素提供修复浏览器自身的bug并保证各浏览器的一致性优化CSS可用性:用一些小技巧 ...

  9. .Net AppDomain详解(二)

    AppDomain 类 表示应用程序域,它是一个应用程序在其中执行的独立环境. 此类不能被继承. 命名空间:   System程序集:  mscorlib(位于 mscorlib.dll) 继承层次结 ...

  10. Spring Boot异常处理

    一.默认映射 我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局 ...