热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【iCore4双核心板_FPGA】例程十七:基于FIFO的ARM+FPGA数据存取实验

实验现象:核心代码:intmain(void){*USERCODEBEGIN1*inti;intfsmc_read_data;charerr

实验现象:

核心代码:

int main(void)
{

/* USER CODE BEGIN 1 */
int i;
int fsmc_read_data;
char error_flag = 0;
char receive_data[50];
char buffer[15];
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 != '\r'){ //»ñÈ¡²Ù×÷ÃüÁî
buffer[i++] = *p++;
if(i > sizeof(buffer))i = 0;
}
for(i = 0;i //½«ÃüÁîת»¯ÎªÐ¡Ð´×Ö·û
buffer[i] = tolower(buffer[i]);
}

if(memcmp(buffer,"write_fifo",strlen("write_fifo")) == 0){//Ö´ÐÐдFifo
error_flag = 0;
usart6.printf(
"Data In Fifo:");
for(i = 0;;i++){
fpga_write(
0,i);
usart6.printf(
"%d ",i);
if(FIFO_FULL){
fpga_write(
0,i+1);
usart6.printf(
"%d ",i+1);
usart6.printf(
" \r\nFifo is Full!\r\n Data Out Fifo:");
for(i = 0;i <256;i++){ //¿ªÊ¼¶ÁÈ¡256¸öÊý¾Ý
fsmc_read_data = fpga_read(0);
usart6.printf(
"%d ",fsmc_read_data); //¶ÁÈ¡Öµ·¢ËÍÖÁ´®¿Ú
}
break;
}
}
}
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 fifo_wr_rd(
input clk_25m,
input rst_n,
input wrn,
input rdn,
input cs0,
input nadv,
input [22:16]ab,
inout [15:0]db,
output fifo_full_flag,
output led_red,
output led_green,
output led_blue
);

pll u1(
.inclk0(clk_25m),
.c0(clk_150m)
);

wire [15:0]data_out;
my_fifo u2(
.data(data_in),
.wrreq(
1'd1),
.wrclk(wr2),
.rdreq(
1'd1),
.rdclk(!rd),
.wrfull(fifo_full_flag),
.q(data_out)
);

reg [15:0]data_in;
always@(posedge wrn or negedge rst_n)
if(!rst_n)
data_in
<= 16'd0;
else
data_in
<= db;

reg wr1,wr2;
always@(posedge clk_150m or negedge rst_n)
if(!rst_n)
begin
wr1
<= 1'd0;
wr2 <= 1'd0;
end
else
{wr2,wr1}
<= {wr1,wr};


wire rd = rdn | cs0;
wire wr = wrn | cs0;

assign db = rd ? 16'hzzzz : data_out;
assign led_red = 1'd1;
assign led_green = 1'd0;
assign led_blue = 1'd1;

endmodule

源代码下载链接:

链接:http://pan.baidu.com/s/1jHFNhwq 密码:qktz

iCore4链接:


推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 流数据流和IO流的使用及应用
    本文介绍了流数据流和IO流的基本概念和用法,包括输入流、输出流、字节流、字符流、缓冲区等。同时还介绍了异常处理和常用的流类,如FileReader、FileWriter、FileInputStream、FileOutputStream、OutputStreamWriter、InputStreamReader、BufferedReader、BufferedWriter等。此外,还介绍了系统流和标准流的使用。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
author-avatar
幸福得味道2011_122
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有