在嵌入式设计中使用MicroBlaze(Vivado版本)

在嵌入式设计中使用MicroBlaze(Vivado版本)转自 https://blog.csdn.net/duinodu/article/details/46723181原文Xilinx官方文档《ug898-vivado-embedded-design》第三章一、MicroBlaze处理器设计介绍(略)二、创建带有MicroBlaze处理器的IP设计使用Vivado进行MicroBlaze设计和使用ISE有很大的不同。(译者加:所以你要…

大家好,欢迎来到IT知识分享网。在嵌入式设计中使用MicroBlaze(Vivado版本)

转自 https://blog.csdn.net/duinodu/article/details/46723181

原文Xilinx官方文档《ug898-vivado-embedded-design》第三章

一、MicroBlaze处理器设计介绍(略)

二、创建带有MicroBlaze处理器的IP设计

使用Vivado进行MicroBlaze设计和使用ISE有很大的不同。(译者加:所以你要仔细看下面的说明)

Vivado IDE使用IP综合设计工具进行嵌入式开发。IP综合工具是一个基于图像界面的工具,能够帮助你构建复杂的IP子系统。

Vivado IDE的IP目录中提供了很多现成的IP核,提供使用。你也可以向这个目录添加自定义的IP核。

 

开始IP综合设计(步骤)

1、在工作流导向面板中的IP Integrator中,点击Create Block Design。(表示你要开始构建带有IP核的框图了)

2、Add IP,找到MicroBlaze,添加到Block中。

(当然,也可以用tcl命令添加IP核:create_bd_cell -type ip -vlnv xilinx.com:ip:microblaze:9.3 microblaze_0)

3、双击MicroBlaze的Block,开始配置软核。

 

三、MicroBlaze配置窗口(配置窗口说明)

MicroBlaze的配置向导提供如下功能:

—可一键配置的基于模板的配置对话框

—MicroBlaze主要参数的评估:相对面积,频率,性能表现,评估是基于对话框中给定的参数。

—配置流程的向导

—所有配置选项的提示,用来理解各个选项的作用

—使用Adaanced按钮,可以直接访问tabbed接口的所有选项。

 

MicroBlaze配置向导提供如下向导页:

—配置向导(Configuration Wizard):第一页,提供模板选择和一般设置。

—一般设置(General):执行单元的选择,优化。

—异常(Exceptions):异常功能的使能。(如果在第一页选中了该功能)

—调试(Debug):断点和查看点的数量。(如果在第一页选中了该功能)

—缓存(Cache):缓存设置。(如果在第一页选中了该功能)

—内存管理单元(MMU):MMU设置。(如果在第一页选中了该功能)

—总线(Buses):总线设置。最后一页,总是显示。

 

在配置向导的欢迎页中,左边显示的是当前设置的频率、面积和性能的相对评估值。

频率:这个值是用当前架构的最大值进行归一化取得相对值。表示当前设置能够达到的频率。(这个值可能会比实际的值超过30%,不要把这个估计值当做系统一定能达到的频率的保证。)

面积:这个值表示LUT数量,用当前架构的最大值进行归一化取得相对值。…(…5%…)

性能:当前设置下的相对性能估计。

BRAMs:(Vivado 2015.1中没找见)

DSP48或者MULT18:(Vivado 2015.1中没找见)

 

第一页(Welcome Page)

使用配置向导最简单的办法便是,使用六个配置模板中的一个,每一个配置模板都是一个完整的配置方案。你可以使用模板作为自己配置的起点,再修改模板给定的设置。

每当你修改一个选项,左边的评价参数便会实时更新。下面介绍这六个配置模板。

—最小面积(Minimum Area):软核提供的最小架构。没有缓存和调试。

—最强性能(Maximum Performance):可能的最大性能。拥有很大的缓存和调试,拥有所有的执行单元。

—最高频率(Maximum Frequency):可能的最高频率。小缓存,没有调试,一部分执行单元。

—带有MMU的Linux(Llinx with MMU):当运行带有MMU的linux时,能够获得高性能的设置。内存管理使能,大的缓存和调试,所有的执行单元。

—低端的带有MMU的Linux:…内存管理使能,小的缓存和调试。

—典型:在性能、面积、频率中取了折中。适合脱机程序,低开销内核。有缓存和调试功能。

 

一般设置

如果模板没有选择,也可以在页面中,根据项目需求,进行选项配置。当你把鼠标放在选项上时,会出现一个提示,告诉你它有什么用。下面详细介绍这些选项。

—Select implemention to optimize area(with lower instruction throughput):使能面积优化功能。如果选了这个,implementation就会优化面积,尤其是减少流水线数量,从5条减少到3条。(推荐:建议在资源比较紧张的架构,如Artix-7,使能这个选项。然而,如果对性能有敏感的要求,就不要选这个选项,因为一些指令需要额外的时钟周期去执行。另外,对于MMU, Branch Target Cache, Instruction Cache Streams, Instruction Cache Victims, Data Cache Victims, ACE是不能进行面积优化的。)

—Enable MicroBlaze Debug Module Interface:使能调试功能。用Xilinx Microprocessor Debugger来下载、调试程序。(推荐:除非面积资源奇缺,否则不要禁止这个功能。)

—Use Instruction and Data Caches:当执行放在LMB之外的程序的时候,可以使用指令缓存来改善性能。指令缓存有如下特点:….当使用外部存储时,激活这个选项可以明显地改善性能,即使这个缓存很小。

—Enable Exceptions:当使用一个支持异常的操作系统时,需要激活这个选项。或者在一个单独的程序中添加异常回调函数。

—Use Memory Management:当使用一个支持虚拟内存保护的操作系统时(如Linux),需要激活。(当你使能面积优化或者堆栈保护功能时,内存管理单元是不可见的,自动禁止)

—Enable Discrete Ports:使能软核上的独立端口。

 

第二页(General)

1、指令(Instructions)

—使能桶型移位器(Enable Barrel Shifter):使能软核中的筒形移位器硬件。激活这个参数,就可以使用如下指令(bsrl,bsra,…)使能这个可以提高应用的性能,但是会增大软核的尺寸。如果激活,编译器会自动使用筒形移位器指令。

—使能浮点单元(Enable Floating Point Unit):使能一个单精度浮点单元(FPU)。使用FPU可以明显地提高应用的单精度浮点性能,同时也会增大软核的尺寸。

—使能整形乘法器(Enable Integer Multiplier):使能一个整形乘法器硬件。若激活,则可以在给MUL32赋值时,使用mul和muli指令。当给MUL64赋值时,使用mulh,mulhu,mulhsu指令。这个参数可以设置为NONE,可以把MUL或者DSP48释放,用作其他用途。这样做对软核的面积影响很小。当使用这个选项,编译器自动使用mul指令。

—使能整形触发器(Enable Integer Divider):使能一个整形除法器硬件。若激活,可以使用idiv,iduvu指令。使能这个选项可以提高应用中的除法性能,但是增大了软核的尺寸。当使用这个选项,编译器自动使用idiv指令。

—使能额外机器状态寄存器指令(Enable Additional Machine Status Register Instructions):若激活,则可以读写MSR,使用msrset和msrclr命令。可以提高访问MSR的性能。

—使能模式比较器(Enable Pattern Comparator):如激活,则可以使用模式匹配指令pcmpbf,pcmpeq,pcmpne。模式匹配字节查找指令(pattern comparator byte find, pcmpbf)返回找到的第一个字节的位置,提高字符串和模式匹配操作的效率。若使能,SDK库会自动使用这个指令。pcmfeq和pcmpne指令根据两个字是否相同,返回1或者0。这些指令会提高setting flags的效率,编译器会自动使用它们。激活这个选项还可以count leading zeros指令,clz。clz指令能提高优先级编码的效率。

—使能保留的加载/保存和交换指令(Enable Reserved Load/Store and Swap Instructions):lbur,lhur,lwr,sbr,shr,swr,swapb,和swaph。这些指令能够以相对的字节序来读写数据,交换指令能交换字节或者半个字长。当用little-endian的MicroBlaze访问big-endian的网络时,可以提高效率。

—使能额外的流命令(Enable Additional Stream Instructions):当使用AXI4-Stream链接时,提供额外的功能。这包括动态访问指令GETD和PUTD,这两个指令用寄存器来选择接口。(重要:一定要激活流异常功能,才能使用这些指令,而且知道选择一个流链接)

2、优化

选择Implementation来优化面积(当指令吞吐量很低时):这个选项和欢迎页的选项功能相同。…

3、容错

—使能容错功能(Enable Fault Tolerance Support)

 

第三页(异常)

1、数学异常(Math Exceptions)

—使能浮点单元异常

—使能整形除法异常

2、总线异常(Bus Exceptions)

—使能指令端AXI异常

—使能数据段AXI异常

3、其他异常(Other Exceptions)

—使能非法指令异常

—使能Unaligned数据异常

—产生非法指令异常,除了NULL指令

—使能流异常

—使能堆栈保护

 

第四页(缓存)

第五页(MMU)

第六页(调试)

第七页(总线)

1、本地内存总线接口(LMB)

2、AXI和ACE接口

3、流接口

4、其他接口

 

四、MicroBlaze处理器的交叉触发特性

当使能basic debugging,交叉触发功能有两个信号提供:DBG_STOP和MB_Halted。

—当DBG_STOP输入为1,MicroBlaze会在几条指令后暂停。XMD检测到MicroBlaze暂停了,并记录暂停的位置。这个信号可以被任何外部的事件用来暂停软核,例如当一个集成逻辑分析器(ILA)被触发。

—MB_Halted输出信号为1,当MicroBlaze暂停的时候,例如碰到一个断点或者观察点,执行了一条XMD停止指令之后,或者当DBG_STOP被置1。当通过XMD命令重新启动软核时,输出清0。

这两个引脚是隐藏的,除非在欢迎页中使能显示独立端口(Show Discrete Ports)。

 

你也可以使用MB_Halted信号来触发一个集成逻辑分析器,或者在多核系统中,暂停其他MicroBlaze软核(连接到它们的DBG_STOP端)。

当启动扩展调试功能时,交叉触发功能可以和MDM一起使用。MDM在所有连接的处理器中,提供可编程的交叉触发功能,包括外部触发的输入端和输出端。可以查阅MicroBlaze Debug Module Product Guide手册查看细节。

MicroBlaze最多支持8个交叉触发动作。交叉触发动作由相对应的MDM交叉触发输出产生,两者通过调试总线连接。

可以有两个地方设置扩展调试功能:一个是前面提到的调试配置页,另一个是在运行MicroBlaze的Block Antomation时,选择该功能。

另外,还要在MDM模块的配置页中,使能交叉触发功能(Enable Cross Trigger)。MDM模块可以最多配置4组外部触发的输入和输出。

最后,运行Connection Automation,连接交叉触发信号到ILA(ILA教程)。

 

 

五、自定义逻辑

Vivado的IP管理器允许用户和第三方IP核开发者将自定义的IP核添加到Vivado的IP核目录中。这样用户就能在Vivado中实例化第三方IP核了。

当IP开发者使用Vivado的IP管理器打包IP核时,IP的使用者对xilinx提供的IP核,还是第三方IP,亦或用户定义的IP,都有一样的使用体验。

IP开发者可以使用IP管理器打包IP文件,并把数据放入ZIP文件。IP使用者接收这个ZIP文件,安装到Vivado的IP目录中,然后用户就可以使用这个IP核了。

推荐:为了保证IP核的质量,建议IP开发者在用用户的使用工作流中运行每一个IP核,确保每个IP核都是可用的。

 

 

六、完成连接(Completing Connections)

当你配置完了MicroBlaze处理器,就可以开始实例化其他IP核,继续你的设计。

在Canvas(放置Block的面板)上,右击,选择Add IP。

你可以使用两个内置的特性来完成子系统剩余部分的IP核设计:Block Automation和Conncetions Automation,帮助你放置一个基本的微处理器系统,并且/或者连接端口到外部I/O口。

Block Automation

当block design中实例化了一个ZYNQ7处理系统或者MicroBlaze处理器时,Block Automation功能就可以使用。

1、点击Run Block Automation,帮助你完成一个简单的MicroBlaze系统。

Run Block Automation对话框提供了一个微处理器系统必需的基本特性。

2、单击OK。

Using Connection Automation

当IP集成工具发现canvas上的IP实例化之间,存在可能的连接时,它会打开Connection Automation功能。

例如,我另外添加了两个IP核,GPIO和Uartlite。IP集成工具会决定一下连接:

—处理器的ext_reset_in引脚必须连接到一个复位源,复位源可以是内部的复位源,或者是外部输入引脚。

—时钟模块的CLK_IN_1_D引脚必须连接到一个内部时钟源,或者外部输入引脚。

—AXI GPIO的s_axi必须接到一个主机的AXI接口上。

—AXI GPIO的核心gpio必须接到外部的IO引脚。

—Uartlite的s_axi必须接到一个主机的AXI接口上。

—Uartlite的uart必须接到外部引脚上。

 

Using Board Automation

当使用像KC705这种刁刁的板子的时候,Vivado提供了Board Automation(像我这种撑死只有Nexys4的屌丝,只能……怒略一记)

 

 

Manual Connections in an IP Integrator Design

(译者注:一般连线方式,可以手动连接,类似于AD画板子软件里的那种)

Manual Creating and Connecting to I/O Ports

你可以在IP工具中创建外部IO端口。你可以选择信号或者接口到外部的IO端口,通过选择一个引脚,总线或者接口连接。

具体办法是,在模块的引脚接口处,右击。在弹出的菜单中,选择:

—Make External.可以用多选操作(Ctrl+Click)选择多个端口。这个命令的作用是连接模块上的引脚到外部引脚。

startgroup
create_bd_intf_port -mode Master -vlnv xilinx.com:interface:gpio_rtl:1.0 GPIO
connect_bd_intf_net [get_bd_intf_pins axi_gpio_0/GPIO] [get_bd_intf_ports GPIO]
endgroup

(这是该操作的tcl命令,第一句话是创建端口,第二句话是连接)

 

—Create Port.对非信号接口使用该命令,如clock,reset,或者uart_txd.创建的时候,可以设定很多参数,比如输出/输出,位宽,类型等等。如果是时钟,需要指定它的频率。

startgroup
create_bd_port -dir I -type clk aa
set_property CONFIG.FREQ_HZ 100000000 [get_bd_ports aa]
endgroup

(这是该操作的tcl命令,第一句话是创建端口,第二句话是设置参数)

 

—Create Interface Port。对同一个功能的一组信号接口创建此类端口。例如,S_AXI是一些Xilinx IP的接口端口。这个接口还可以指定接口的类型和模式(主机还是从机)。

 

Memory Mapping in Address Editor

产生地址映射的方法如下:

1、单击Address Editor。

2、单击左边的Auto Assign Address按钮。(按钮在左侧)

如果你从IP框图产生RTL代码时没有第一次生成地址,会弹出一个提示框,提供一个自动分配地址的工具。

你也可以在Offset Address和Range两类输入值,来设置地址。只有当IP框图中包含一个总线主机的IP核(例如ZYNQ7)时,Address Editor才会打开。

 

Running Design Rule Checks

Vivado实时进行设计规则检查。然而,错误总是会发生。例如,时钟引脚上的频率也许没有设置正确。

如果要运行一个全面的检查,可以单击Validate Design。

 

Integrating a Block Design in the Top-Level Design

完成了上面的步骤后,还有两个步骤需要做:

—产生输出文件

—创建HDL封装

在项目的源文件窗口创建文件。文件类型取决于项目新建时是verilog还是vhdl。具体方法如下:

1、在Block Design面板下,展开Design Source,选择Generate Output Products。

2、在左侧的工作流面板中的IP工具下,单击Generate Block Design.

你可以在一个高层次设计中集成一个IP block。这样做的方法是,在高层次的HDL文件中,实例化这个Block设计。

 

为了实例化一个更高的层次,在Block Design面板中的Design Sources中,右键design,选择创建HDL封装。

Vivado提供了两种创建HDL封装的方法:

—Vivado新建并自动更新封装,这是默认选项。

—创建一个用户可修改的脚本,这个脚本可以修改和保存。如果你选择了这个,那你每次如果修改了block design中的端口,都需要修改手动更新封装。

 

到这里,你已经为你的IP设计做好了HDL封装,可以进行后面的步骤了。

 

MicroBlaze处理器约束

IP工具已经在产生输出文件时,为IP核创建了约束文件;然而,你必须为自定义的IP或者更高层次的代码设置约束。

一组约束,是XDC文件中的包含了设计约束的集合。有两种约束:

—物理约束。定义了引脚放置,以及元胞(BRAM, LUT, Flip Flop)的绝对或者相对位置,还有器件的配置。

—时序约束。遵循SDC业界标准,定义了设计的频率要求。如果没有时序约束,Vivado仅仅会优化线宽和布线拥堵。(如果没有时序约束,Vivado的implementation就无法提高设计的性能。Vivado不支持UCF格式的约束)

 

关于时序约束,下面多说两句:

你有几种使用约束集合的方法:

—一个约束集合中有多个约束文件

—多个约束集合,然而在分开的文件夹中。

—一个主约束文件,设计中的改变存于一个新的约束文件夹中。

—…

按功能,分开约束文件,有利于你从宏观更清楚地把握约束策略,有利于应对时序和实现过程中的变化。

约束水太深,又太重要,详情查看官方文档。Vivado Design Suite User Guide: Using Constraints

 

当你完成了设计,也约束完了,现在可以进行合成、实现、生成bit流了。

然后,就可以导入硬件到SDK了。具体方法是:

File->Export->Export Hardware for SDK,弹出对话框,提供一些选择选项。你可以导出硬件定义和比特流,并打开SDK。然后,就可以开始编写软件了。

或者,你也可以从SDK把elf文件导入到Vivado。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15452.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信