本文简单介绍ISE平台下的MicroBlaze的大致框架,然后分析开源的C代码在平台中的是使用以及通信原理的分析与笔者本身的理解。本文不介绍
本次使用的是ISE14.7搭建平台,使用xilinx_openpowerlink_2.4.1_1开源平台进行分析

MicroBlaze简介及搭建环境分析

MicroBlaze嵌入式软核是一个被Xilinx公司优化过的可以嵌入在FPGA中的RISC处理器软核,具有运行速度快、占用资源少、可配置性强等优点,广泛应用于通信、军事、高端消费市场等领域。 Xilinx公司的MicroBlaze 32位软处理器核是支持CoreConnect总线的标准外设集合。MicroBlaze处理器运行在150MHz时钟下,可提供125 D-MIPS的性能,非常适合设计针对网络、电信、数据通信和消费市场的复杂嵌入式系统。
----来自百度百科
ISA的RISC(Reduce)精简指令集体系架构,一般用于嵌入式系统的CPU设计。还有CISC,这个后面有时间了进行详细的解释。
这里进行简单的解释下软核。我们都知道,FPGA分软核和硬核,所谓软核就是使用FPGA资源,搭建一个CPU。(如何搭建参考《自己动手写CPU》这本书就是教我们如何搭建一个自己的CPU,后面笔者会详细介绍)然后搭建一个最小系统,就可以借助相应的工具进行C代码的编写了。而硬核就是最近比较火的ZYNQ系列(X家)。

上图就是ZYNQ框架。可以看到,其分为PL(programmable Logic)和PS(Processing System)。PL就是我们熟悉的FPGA部分,而PS就是所谓的硬核,一般嵌入的是两颗ARM Cortex-A9 系列处理器。一般使用AXI总线进行数据的交互。各司其职,从而提高工作效率。软核实现的功能笔者理解和硬核类似,只是实现原理与占用资源上可能会有这很大的差别。
本次实验平台使用的就是ISE提供的MicroBlaze IP进行的。接下来是实验的工程搭建

  • 首先需要搭建ISE下的软核环境

    首先例化顶层,类似于Vivado的生成一个顶层的文件,然后根据自己的开发板核心板的设计,将使用的端口,ddr等进行管脚约束,然后生成.bit文件即可。
    这里笔者用的是搭建好的工程,由于ISE软核使用的比较少,因此没有详细研究。但是对于microblazeIP核的配置应该类似于Vivado中的ZYNQ核的配置,因此这里直接跳过。将生成的文件下载进开发板。
    这里的顶层的RTL也是比较简单的。

    没有数据的交互,只需要用到一个例化的IP即可。
    这里下载必须先将bit下载到开发板,类似于Vivado平台下的导入SDK。不过这里需要使用xsdk进行编译。这估计也就是Xilinx抛弃ISE平台的原因。ISE使得各个部分变得极为分散,代码书写,烧写,仿真等都是需要一个独立的模块才能完成。而使用过Vivado的都清楚其所有流程只需要根据官方提供的按钮一步一步的完成即可。

    将其烧写进开发板就可以使用XSDK了。
  • XSDK的简单操作以及展示

    打开之后刷新,然后编译烧写就可以运行了。下面是运行的控制窗口打印的结果。

    主站打印信息,这里使用开源官方提供的上位机软件作为主站,使用FPGA作为从站新型通信。
  • C代码的分析
    首先打开我们的源文件。

    这里参照一般Vivado的开发经验,打开找C源码,然后进入笔者看到了一个platform.c文件。本以为这个就是.C文件,然后仔细看了下代码,发现其很简单!!简单的有点过分!于是笔者觉得有点不对,试着debug下,果然,跳出来了一个main.c函数。就是下面截图的。这里笔者先不管文件的位置与为什么会出现这样的原因,直接分析代码。主函数的代码!

    !!!!!!!!!!!(有关于开源,笔者后面有时间了聊)

    开始进入正题。
  • 文件说明

    文件说明部分简单说明了软件代码版权等问题,对文件进行了简单的介绍,这个软件是一个CN的demo,包含了文件嵌入式应用
  • 头文件
  • 全局定义
    这里定义了一些变量, 一这里定义了一些IP地址,MAC地址等信息。也就是从站的相关信息。
    一些结构体,以及一些局部变量。
  • main()函数

    期待已久的main函数终于来了。首先看其注释部分。描述的内容是其主要是一个从站的嵌入式demo,返回值是一个退出函数。
    下面一句一句来分析

    首先上图的第一句。这里是一个数据类型的定义。使用的是无符号32位整型,定义了一个ret这里的函数返回是powerlink内部定义的参数,就是没有错误或者运行成功的意思。

    第两行代码就是定义了一个数组,将MAC地址存入,这个MAC地址是之前定义过的。
    第三行代码就是定义一个变量。用于后面使用。以上为前三行代码。

    第四行代码是用于初始化GPIO的这里我们进入函数买得到了下面的函数,很奇怪!!这里问题保留,记得笔者之前在ZYNQ中初始化GPIO的时候,还是挺麻烦的。

    第五行应该是用于选择接入节点的

进入函数发现无法找到参数,于是使用的就是0,作为返回值

接下来对于结构体进行初始化。

void *memset(void *s, int ch, size_t n);

函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.

如注释,设置MAC地址

C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字符到存储区 str1

接下来两个函数用来初始化
Initialize applications event module
Initialize ARP module
之后就是一些打印信息的代码。如下。

最后进行一些判断。若是相关设置正确,就可以进行程序演示。如下图

  • 初始化OpenPowerLink堆栈
  • 初始化同步数据应用程序
  • 设置接收到的非PowerLink以太网帧的转发
  • 返回指定sdo命令连接状态的字符串

一旦有错误,就退出主函数。
关闭相关的接口一以及端口。返回0.函数执行结束!!

具体函数的细节这里不在此博文展开。后面将结合理论,对于函数中代码进一步分析!以上

(三.1)基于MicroBlaze的PowerlinkC代码分析相关推荐

  1. java tcp 三次握手_用Java代码分析TCP的三次握手四次挥手过程

    (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志.因此它表示对刚才客户 ...

  2. mahout基于Hadoop的CF代码分析(转)

    来自:http://www.codesky.net/article/201206/171862.html mahout的taste框架是协同过滤算法的实现.它支持DataModel,如文件.数据库.N ...

  3. mahout基于hadoop的CF代码分析

    mahout的taste框架是协同过滤算法的实现.它支持DataModel,如文件.数据库.NoSQL存储等,也支持hadoop的MapReduce.这里主要分析的基于MR的实现. 基于MR的CF实现 ...

  4. 5 款逆向工具,7 款代码分析工具,11 项优化建议

    本文作者:小木箱,原文发布于:小木箱成长营 [小木箱成长营]包体积优化系列文章: 包体积优化 · 实战论 · 怎么做包体积优化? 做好能晋升吗? 能涨多少钱? 包体积优化 · 方法论 · 揭开包体积优 ...

  5. clang-tidy——静态代码分析框架

    clang-tidy--静态代码分析框架 clang-tidy介绍 clang-tidy是一个基于clang的静态代码分析框架,支持C++/C/Objective-C. 它是一个功能更强大的lint工 ...

  6. 开源项目kcws代码分析--基于深度学习的分词技术

    http://blog.csdn.net/pirage/article/details/53424544 分词原理 本小节内容参考待字闺中的两篇博文: 97.5%准确率的深度学习中文分词(字嵌入+Bi ...

  7. 基于windows PE文件的恶意代码分析;使用SystemInternal工具与内核调试器研究windows用户空间与内核空间...

    基于windows PE文件的恶意代码分析:使用SystemInternal工具与内核调试器研究windows用户空间与内核空间 ******************** 既然本篇的主角是PE文件,那 ...

  8. 基于Android13的系统启动流程分析(三)之FirstStageMain阶段

    Android13系统启动阶段大致分为FirstStageMain阶段和SecondStageMain,此章主要讲FirstStageMain阶段 (若分析有误敬请指教) 本章讲解的方向和你将收获的知 ...

  9. [系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. Jon Person教你如何用.NET/.NETCF写GPS应用程序。
  2. 浅谈对BFC的认识,以及用bfc解决浮动问题
  3. Oracle 返回结果集 sys_refcursor
  4. 初次在Linux CentOS上安装RabbitMQ
  5. php获取图片所有颜色代码,php 获取一张图片所有点的颜色值
  6. Spring在多线程中bean的注入问题
  7. shell表达语句中,各种符号的释义 用法
  8. 从shell(终端)中退出python
  9. wex5bex5 ---- (一)
  10. Android开发最佳学习路线图
  11. 面对陌生环境,机器人如何像人一样自由穿行?
  12. win8.1+ubuntu13.10 双硬盘 uefi+gpt ASUS S400 安装经验
  13. 局部加权回归Loess对比MFCC三角滤波(吴恩达机器学习中说,Loess算法用到了aircraft的自动驾驶中)
  14. Python+PIL 轻松制作九宫格图片
  15. 操作文件操作符的工作模式:LT(电平触发)ET(边缘触发)实验对比
  16. Caffe深度学习框架作者贾扬清online内容分享II
  17. 数据库 Oracle分区介绍
  18. 如果一直都没钱,还要不要感谢贫穷?
  19. uniapp无法唤起相机的避坑之旅(安卓10以上,以及鸿蒙手机)
  20. 目前中国互联网现状和UI设计行业现状分析!

热门文章

  1. 关于elasticsearch boostrap checks failed错误类型整理及解决方法
  2. 3元购买微信小程序解决方案一个月
  3. Elasticsearch分页解决方案
  4. 解决Amlogic S905或S9xxx在安装Armbian_20.02.0卡logo或无反应的方法
  5. 我不断收到“ Uncaught SyntaxError:意外令牌o”
  6. 计算机网络对等模式,计算机网络有两种常用的工作模式,它们是对等模式和客户/服务器模式。QQ聊天属于________模式。...
  7. 非模态对话框的创建于销毁
  8. css 左边阴影_css揭秘-用户体验
  9. qq登陆inc.php,登陆验证 qq登陆验证 php 登陆验证
  10. HoloLens 2开发:Pcx 渲染点云单眼显示问题