嵌入式设计初体验:永远的hello,world
目前,xilinx的zynq系列FPGA炒的火热,SOC成为FPGA发展的必然趋势。可见所有功能均用硬件描述语言设计是不科学的。硬件逻辑独有的并行性使其在实时处理和并行算法中占尽优势,但当执行串行操作时却需要使用笨重的状态机来完成。因此,要实现对实时性要求不高的串行操作,对各类IP核的总体控制调度,亦或是快速移植软件协议栈时,利用FPGA内部CPU是个比较好的选择。
硬核CPU只在特定系列FPGA芯片中,性能当然没的说,占用的资源也非常少。但相比硬核,microblaze可移植性较强,性能要求不高的场合下还是非常灵活的。本文依然以经典的串口打印字符串“hello,world”为例,搭建基于microblaze的简单嵌入式系统。
create block design,添加microblaze软核后点击Run Block Automation。
这里暂时不使用DDR之类的缓存设备,利用片内Memory存储代码,因此将Local Memory容量增大。
点击OK后工具自动生成CPU系统所需要的所有必要硬件模块,包括:时钟管理单元,复位逻辑,调试模块,microblaze CPU,以及local memory。
双击clk_wiz_1模块,根据开发板对其进行配置。本例中开发板上使用200MHz差分晶振作为时钟源,做如下改动。
开发板上复位按键低电平有效,改为Active low。
实现串口打印字符串功能,首先得有串口模块提供硬件支持,添加uartlite IP核。串口IP核同样可以根据需求重配置,这里保持默认设置:波特率9600,数据位是8bit,无校验位。
IP核添加并配置完毕,同样利用工具自动连接。点击Run Connection Automation,选中所有可连接选项。重新布局后嵌入式硬件系统结构如下:
点击左侧竖排工具栏中的Validate Design,保证系统没有连接错误。
右击Source窗口中block design名称,依次选中Generate Output Products和Generate HDL Wrapper。前者生成可综合,布局布线的.v文件,后者产生工程顶层封装。
需要注意的是,生成顶层文件时,可以选择顶层文件自动更新或手动编辑。当需要手动添加硬件模块到顶层文件时选择可手动编辑方式,这里保持默认。
之后添加XDC文件,给出引脚号及电平标准即可。
点击vivado界面上侧主选项栏File->Export->Export Hardware。这里要选中Include bitstream,否则SDK中无法识别硬件系统。最后点击File->Lanch SDK启动软件开发工具,开始软件设计流程。建立第一个软件工程时会自动生成BSP包,相当于硬件系统中物理约束了的映射,之后可重复利用,还是比较方便的。
打开HelloWorld工程中.c文件,其中有三个函数,其实是对串口一些操作的封装。
这了为了方便观察现象,将串口打印函数放置在while循环中,使其连续打印字符串。保存后代码自动编译。
选中工具栏Xilinx Tools->Program FPGA下载代码。此处在下方选择生成的HelloWorld.elf可执行文件,将硬件比特流和软件代码同时下载到FPGA中。
打开串口调试助手,设置好波特率以及显示格式,可以看到不断打印“Hello World”字符串。
本文搭建了基于Microblaze的最简单的嵌入式系统,对IP Integrator和SDK环境有了初步的认识。在后续的博文中,会进一步阐述自定义总线形式IP核的生成,调用以及与CPU之间的数据交互。
嵌入式设计初体验:永远的hello,world的更多相关文章
- 痞子衡嵌入式:恩智浦机器视觉模块OpenMV-RT那些事(1)- 初体验
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是机器视觉模块OpenMV-RT初体验. 近些年机器视觉应用一直是个很火的方向,想象一下机器如果能长上"眼睛",是不 ...
- 痞子衡嵌入式:走进二维码(QR Code)的世界(2)- 初体验(PyQt5.11+MyQR2.3+ZXing+OpenCV4.2.0)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是走进二维码(QR Code)的世界专题之初体验. 接上篇 <走进二维码(QR Code)的世界(1)- 引言> 继续更文,在 ...
- 微软最新设计Fluent Design System初体验
微软最新设计Fluent Design System初体验 本文图片不全!建议移步知乎专栏查看!!! https://zhuanlan.zhihu.com/p/30582886 原创 2017-11- ...
- 痞子衡嵌入式:MCUXpresso Config Tools初体验(Pins, Clocks, Peripherals)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso Config Tools三大件(Pins, Clocks, Peripherals). 不知道大家有没有这样的感受 ...
- OPhone SDK初体验
OPhone SDK初体验 write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 背景说明 中国伟大的垄断龙头,世界上也是顶尖的中移动最 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
随机推荐
- Ipython自动导入Numpy,pandas等模块
一.引言 最近在学习numpy,书上要求安装一个Ipythpn,可以自动导入Numpy,pandas等数据分析的模块,可是当我安装后,并不能自动导入numpy模块,还需要自己import.我就去查了一 ...
- ESLint 的正式使用感受
介绍ESLint ESLint 是一个代码规范和错误检查工具,有以下几个特性 所有东西都是可以插拔的.你可以调用任意的rule api或者formatter api 去打包或者定义rule or fo ...
- 网页设计——4.html基本标签链接,图片,表格
今天主要认识一个有趣的html标签 1.超链接标签a 基本结构:<a href="url" >内容 </a> url就是网页地址. 但直接用这种超链接,会自 ...
- javascript设计模式——组合模式
前面的话 在程序设计中,有一些和“事物是由相似的子事物构成”类似的思想.组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的“孙对象”构成的.本文将详细介绍组合模式 宏命令 宏 ...
- 三十天学不会TCP,UDP/IP网络编程-IP头格式祥述
我又来了,这篇文章还是来做(da)推(guang)介(gao)我自己的!俗话说事不过三,我觉得我下次得换个说法了,不然估计要被厌恶了,但是我是好心呐,一定要相信我纯洁的眼神.由于这两年接触到了比较多的 ...
- JS 获取上传文件的内容
<div> 上传文件 : <input type="file" name = "file" id = "fileId" / ...
- springMVC(1)---@RequestMapping详解
@RequestMapping详解 RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径.这句话,太熟悉了. ...
- Android数据存储之内部存储、外部存储
首先来介绍下什么是内部存储? 在Android平台下,有着自己独立的数据存储规则,在windows平台下,应用程序能够自由的或者在特定的訪问权限基础上訪问或改动其它应用程序下的文件资源. 可是在And ...
- 【日常学习】【IDA*】codevs2449 骑士精神题解
题目描写叙述 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在不论什么时候一个骑士都能依照骑士的走法(它能够走到和它横坐标相差为1.纵坐标相差为2或 ...
- python内置函数(四)
python内部提供了非常多内建函数. 以下让我们从a-z開始学习python的内建函数 1.1 id(object) 返回对象的id(身份),返回的这个是一个整数(integer)是唯一的,在这个对 ...