一种基于双口ram的fpga内部硬核与软核通信的方法

文档序号:9887578阅读:983来源:国知局
一种基于双口ram的fpga内部硬核与软核通信的方法
【技术领域】
[0001 ]本发明涉及一种基于双口 RAM的FPGA内部硬核与软核通信的方法。
【背景技术】
[0002] 当前电力电子领域的FPGA中硬核与软和的交换数据,一般使用总线地址映射的方 法传递数据有一定的局限性;所以采用双口ram通信方式越来越多的被使用,但是缺少一种 合理的通信协议;现有的通信方式,由于存储过程同步,因此,需要实时的中断来处理收到 的信息,CPU是使用率过高,对硬件要求也高。

【发明内容】

[0003] 本发明要解决的技术问题是现有的双口 ram通信方式,需要实时的中断来处理收 到的信息,CPU是使用率过高,对硬件要求也高,导致成本高昂。
[0004] 为解决上述技术问题,本发明采用的技术方案是:一种基于双口 RAM的FPGA内部硬 核与软核通信的方法,在双口 RAM中开辟数据状态区域RAM#1、数据状态区域RAM#2、数据状 态区域RAM#3、数据状态区域RAM#4、数据状态区域RAM#5和数据状态区域RAM#6;所述RAM# 1 用于描述电气量、参数、命令数据的读写状态;硬核、软核通过交互读取这些读写状态来控 制双方数据的交换;所述RAM#2用于写入RAM#1中硬核收集的数据,当硬核写入数据到相关 RAM#2中,并置位RAM#1中的标志状态后,软核根据RAM#1中的状态读取RAM#2中的数据,并处 理此数据;所述RAM#3用于写入软核的命令,并置位RAM#1中的标志状态;硬核根据RAM#1中 的状态读取RAM#3中的命令,并执行;所述RAMM,用于软核硬核信息的修改;1)软核把参数 写入RAM#4中,并置位RAM# 1中的标志状态;硬核根据RAM# 1中的状态读取RAM#4中的参数, 并修改参数;2)硬核把参数写入RAM#4中,并置位RAM#1中的标志状态;软核根据RAM#1中的 状态读取RAMM中的参数,查看此参数是否正确,可靠;所述RAM#5,用于写入硬核的故障信 息,并置位RAM#1中的标志状态;软核根据RAM#1中的状态读取RAM#5中的故障代码并存储显 示;所述RAM#6,用于写入硬核故障发生时的波形信息,并置位RAM#1中的标志状态;软核根 据RAM#1中的状态读取RAM#6中的故障代码并存储显示。
[0005] 本发明的优点是:利用双口 ram的特性,在FPGA的软核硬核之间用一种高效,异步, 占用资源少的通信方式实现,提供了一种可靠并高效的通信协议,硬核软核只需经常读取 RAM#1里面很少的几个标志位,就可以知道整个通信的情况。整个存储过程是一个异步的过 程,不需要像其他的通信方式那样,需要实时的中断来处理收到的信息。大大降低了 CPU是 使用率,节省了更多宝贵的硬件资源。
【具体实施方式】
[0006] 本发明一种基于双口 RAM的FPGA内部硬核与软核通信的方法,具体步骤如下:
[0007] 在双口 RAM中开辟了 一块数据状态的区域RAM# 1,用来描述电气量,参数,命令等数 据的读写状态;硬核,软核能否方便的读取这些状态来控制双方数据的交换;
[0008] RAM#1的地址定义
[0009]
[0(
[0011] 1 · 1 · lRAM2_state(硬核读/写,软核读/写)
[0012] RAM2_state:分为三个状态0,1,2,3。0:软核空闲;1:硬核正在写RAM#2; 2:硬核写 完RAM#2; 3:软核正在读RAM#2;
[0013] 当硬核200ms发送周期时间到的时候,检测到RAM2_state! = 3,就可以向RAM2中写 [0014] 数据,写之前把RAM2_state设置为1;全部写完后把RAM2_state值2;
[0015] 软核循环读取RAM2_state,如果RAM2_state为2;则开始读取RAM#2中的数据;读之 前把RAM2_state设置为3;全部读完后把RAM2_state设置为0;
[0016] 软核可以通过判断RAM2_state状态是否能从状态0变成2,判断通信是否中断; [0017] 硬核可以通过判断RAM2_state状态是否能从状态2变成0,判断通信是否中断; [0018] 1.1.2RAM2_ID(硬核读,软核写)
[0019] RAM2_ID里面为某个从模块ID的值;
[0020]当硬核向RAM#2中写数据之前需要判断RAM2_ID的值;
[0021] 1 · 1 · 3RAM3_W_ord(硬核读,软核读/写)和RAM3_R_ord(硬核读/写,软核读)RAM3_ W_ord,RAM3_R_ord范围就是RAM#3缓冲区大小(0~31);
[0022] RAM3_W_ord:命令写指针;
[0023] RAM3_R_ord:命令读指针;偏移量:0x300;
[0024] 具体应用(RAM3_W_ord,RAM3_R_ord):
[0025] ①注会的当显示下发一个命令时
[0026] ②判断RAM3_W_ord的范围是不是在(0~31)之间,如果不是则RAM3_W_ord = 0 ; RAM3_R_ord = 0;
[0027] ③把命令写入RAM3_W_ord+0x300地址中,让RAM3_W_ord指向下一个区域;
[0028] 读命令:
[0029] (1)硬核循环读取 RAM3_W_ord,RAM3_R_ord;
[0030] (2)如果他们的范围不在(0 ~31)之间则RAM3_W_or d = 0; RAM3_R_or d = 0;
[0031] (3)如果 RAM3_W_ord! = RAM3_R_ord;则读取 RAM3_R_ord+0x300 中的命令,并执行; 让RAM3_R_ord指向下一个区域;
[0032] 1.1.4RAM4_ord,RAM4_ID,RAM4_addr,RAM4_EN0B,
[0033] RAM4_ord分别为三个状态0,1,2,3; 0:空闲;1:软核申请主板参数;2:主板参数上 传完毕,软核可以读取;3:软核修改参数,等待主板修改;
[0034] RAM4_ID:模块的ID (根据实际情况定义)
[0035] RAM4_addr:传递的数据的地址,详见参数表
[0036] RAM4_EN0B:有效数据位(000000000) 2~(1 111 111 11) 2;软核传上来的数,只有数 据的有效数据位为1时,硬核才能修改此参数;
[0037] 读参数:
[0038] (1)软核需要读取某一页数据;
[0039] (2)软核把RAM4_ID写入模块ID;
[0040] (3)软核把RAM4_addr写入传递页的数据地址;
[0041] (4)RAM4_ord = 1 ;
[0042] (5)表示软核需要读取模块ID为RAM4_ID;数据地址为RAM4_addr的数据;
[0043] (6)硬核准备好数据写入到0x340~0x342区域;并且RAM4_ord = 0x02;
[0044] (7)软核循环读取RAM4_ord如果RAM4_ord= =0x02;则开始读取0x340~0x342区 域的内容,显示到界面;读取完毕后,RAM4_ord==0;
[0045] 写参数:
[0046] (1)当人机界面发送修改参数命令;
[0047
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1