嵌入式设计初体验:永远的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 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
随机推荐
- Bin、App_Data等文件夹详述(转自http://blog.csdn.net/zzjiadw/article/details/6801506)
ASP.NET应用程序和ASP.Net网站所共有的文件: App_Browsers 包含 ASP.NET 用于标识个别浏览器并确定其功能的浏览器定义 (.browser) 文件.有关更多信息,请参见浏 ...
- Less的条件表达式
Less的条件表达式 当需要根据表达式,而不是参数的值或数量进行匹配时,条件表达式(Guards)就显得非常有用.如果你熟悉函数式编程的话,对条件表达式也不会陌生. 为了尽可能地接近CSS的语言结构, ...
- Server SQL2008对文件的基础操作(1)
1.一个文件的基本框架为:文件名.文件地址.文件大小.文件最大的大小.文件的增量(Filegrowth). 2.文件有mdf.ndf.ldf 三种文件的区别. 3.文件组可以进行文件的管理 FileG ...
- JAVA提高十九:WeakHashMap&EnumMap&LinkedHashMap&LinkedHashSet深入分析
因为最近工作太忙了,连续的晚上支撑和上班,因此没有精力来写下这篇博客,今天上午正好有一点空,因此来复习一下不太常用的集合体系大家族中的几个类:WeakHashMap&EnumMap&L ...
- 拆分字符and读取properties文件
在方法里面建立properties对象 Properties pps = new Properties(); 调用.load()方法 pps.load(new FileInputStream(&quo ...
- gitlab环境搭建
企业级的git管理程序.最好用的之一吧.估计其它的也得叫之二. 怎么搭建呢? 2G以上配置的机器才可以搞. . 如下 安装需要注意的是.如果开了80端口,8080的需要修改配置文件 下面会提到 1. ...
- 音频传输之Jitter Buffer设计与实现
在语音通信中Jitter Buffer(下面简称JB)是接收侧一个非常重要的模块,它是决定音质的重要因素之一.一方面它会把收到的乱序的语音包排好序放在buffer里正确的位置上,另一方面它把接收到的语 ...
- java 事件处理
Java事件处理机制:EventObject类作为描述事件信息的事件信息类的基类,由EventListener接口派生新的接口或类来作为事件接收方的类,再定义事件源类. 事件信息类的构造方法必须含有事 ...
- 基于iTextSharp的PDF文档操作
公司是跨境电商,需要和各种物流打交道,需要把东西交给物流,让他们发到世界各地.其中需要物流公司提供一个运单号,来追踪货物到达哪里?! 最近在和DHL物流公司(应该是个大公司)对接,取运单号的方式是调用 ...
- 【NOI2015】程序自动分析
https://www.luogu.org/problem/show?pid=1955 并查集+离散化. 先执行所有x=y问题,即合并x和y. 再依次执行所有x!=y问题,即查询x和y是否处于同一集合 ...