精华内容
下载资源
问答
  • 非常详细地介绍基于ViVado搭建硬件平台来讲解EDK的使用,让你快速的掌握ViVado下的硬核搭建和EDK开发环境。
  • 原文Xilinx官方文档《ug898-vivado-embedded-design》第三章 一、MicroBlaze处理器设计介绍(略) 二、创建带有MicroBlaze处理器的IP...使用Vivado进行MicroBlaze设计和使用ISE有很大的不同。(译者加:所以你要...

    转自 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。

    展开全文
  • microblaze XPS spi学习microblaze的对spi不明白的可以看看
  • 目录 一、创建带有MicroBlaze处理器的IP设计 二、开始IP综合设计(步骤) 三、MicroBlaze配置窗口(配置窗口说明) 第一页(Welcome Page) 第二页(General) ...四、MicroBlaze处理器的交叉...使用Vivado进行Micr

    目录

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

    二、开始IP综合设计(步骤)

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

    第一页(Welcome Page)

    第二页(General)

    第三页(异常)

    第四页(缓存)

    第五页(MMU)

    第六页(调试)

    第七页(总线)

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

    五、自定义逻辑

    六、完成连接(Completing Connections)


    一、创建带有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之外的程序的时候,可以使用指令缓存来改善性能。指令缓存有如下特点:....当使用外部存储时,激活这个选项可以明显地改善性能,即使这个缓存很小。

    一般这两个缓存cache在MicroBlaze内部集成了,通过AXI_DC和AXI_IC管理DDR内存里面的指令和数据代码。如下图:


    ---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)

    数据和指令也可存储在本地小的内存里面,通过LMB接口访问,在生成IP的时候需要选择DLMB和ILMB存储器的大小,越大可能性能越高。


    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。


    1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除。

    2.未经原作者允许不得转载本文内容,否则将视为侵权;

    3.转载或者引用本文内容请注明来源及原作者;

    4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

    下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

    展开全文
  • MicroBlaze嵌入式软核是一个被Xilinx公司优化过的可以嵌入在FPGA中的RISC处理器软核,具有运行速度快、占用资源少、可配置性强等优点,广泛应用于通信、军事、高端消费市场等领域。本指导手册旨在指导在FPGA工程中...
  • vivadomicroblaze程序固化下载

    千次阅读 2019-05-17 14:16:05
    vivado版本:2016.4 FPGA:XC7A100T-fgg484 FLASH:N25Q128-3.3V-SPI-X1_X2_X4 FPGA程序固化下载流程: 1、vivado中生成XXX.bit文件,program Device. 2、Export Hardware platform,打开SDK\Tools\program FPGA,在...

    vivado版本:2016.4

    FPGA:XC7A100T-fgg484

    FLASH:N25Q128-3.3V-SPI-X1_X2_X4

    FPGA程序固化下载流程:
    1、vivado中生成XXX.bit文件,program Device.
    2、Export Hardware platform,打开SDK\Tools\program FPGA,在software configuration项目下microblaze_0加载....\debug\XXX.elf。
    3、vivado下,打开tools/associate ELF files,在design sources/microbaze_0下加载...\debug\xxx.elf文件,生成新的XXX.bit文件。
    4、vivado中,打开tools/generate memory configuration files,选择memory part型号,输入filename,load bitstream files,
         勾选write checksum,disable bit swapping,overwrite,生成XXX.mcs文件。
    5、下载XXX.mcs文件到flash中,从新加电,OK!!!
     

     

    展开全文
  • FPGA硬件逻辑独有的并行性使其在... 下面描述怎么搭建一个最小的microblaze软核,以及各个模块的意义。 create block design,添加microblaze软核。 配置添加microblaze之后,点击 run block automation 这里...

     

    1, 添加microblaze

    2, 添加MDM ,并选择enable JTAG UART (不使用外部uart看打印,使用JTAG 传输数据到SDK 界面上)。如果不选择enable JTAG UART 就没有外部中断

    3, 添加interrupt  (因为MDM使用JTAG 模式需要中断)

     

    4, 自动添加模块,自动连线,连完如下图所示。个别地方和自己的设计不符,再修改 

    5, 连接中断自动连线的时候,中断没有连,自己手动添加。

     

    这里只有一个中断,如果有多个中断,需要拼接,使用concat 模块 

    6, 模块间连线学习

    1. , microblaze 

          DEBUG 连MDM的debug 输出

          Reset 连 processor system reset 的mb_reset

    1. , processor system reset 

     A) Ext_reset_in 

    前面小圆圈,代表低复位。

    Ext_reset_in 可以是外部输入低复位,也可以外部输入高复位。默认是低复位。

     

    在设置里,更改为高复位,然后点valid design 以后,ext_reset_in 端口没有那个圈,代表高复位。 

    工程中有不同时钟的时候,复位信号也要进行跨时钟操作。方法就是把ext_reset_in用不同的时钟触发,产生不同时钟域下的复位输出。

     

    B) aux_reset 

       辅助复位,见过的连接方法有

          不连

          和ext_reset_in 一样

          设置常量,constant 为1

    C)mb_debug_sys_rst ,MDM 的复位输出,没有MDM 模块的时候,设置为常量0

    D) dcm_lockde , 前级没有锁相环的时候可以不连 ,或者用constant 设置为1 。

    E) mb_reset ,microblaze 复位输入

    F) interconnect_aresetn ,互联矩阵ARESETN 输入

    G)peripheral_aresetn/peripheral_reset 外设复位输入。

    ///  下面是最开始学习microblaze的是时候记录的,和现在出发点不一样,懒得汇总了,一起看吧/

    FPGA硬件逻辑独有的并行性使其在实时处理和并行算法中占尽优势,但当执行串行操作时却需要使用笨重的状态机来完成。因此,要实现对实时性要求不高的串行操作,对各类IP核的总体控制调度,亦或是快速移植软件协议栈时,利用fpga内部CPU 是个比较好的选择。

       下面描述怎么搭建一个最小的microblaze软核,以及各个模块的意义。

    create block design,添加microblaze软核。

    配置添加microblaze之后,点击 run block automation 

    这里暂时不使用DDR之类的缓存设备,利用片内memory存储代码,因此将local memory 容量增大。

    点击OK后,工具自动生成CPU 系统所需要的所有必要硬件模块,包括:时钟管理单元(clk_wiz_1),复位逻辑(rst_clk_wiz),调试模块(MDM),microblaze CPU ,以及local memory 。

    MDM模块 选择 enable jtag uart.可以连接jtag,在SDK 界面打印调试信息。  

    按照硬件需求,配置时钟复位,添加输入输出端口,进行电气检查。

    右键,source窗口中 block design 名称,依次选中generate output products 和generate HDL wrapper 。前者生成可综合,布局布线的.V文件,后者产生工程顶层封装。

    按照正常流程,添加XDC 文件,生成bit文件。file ---- export  ------ export hardware,导出硬件平台。这里要选择include bitstream,否则SDK 中无法识别硬件系统。最后点击file --- launch SDK 启动软件开发工具,开始软件设计流程。

    C 代码添加,在test 的src目录下添加,这里只是描述一下调试怎么配置jtag模式。在对应的 _bsp 上,右键,选择board support package setting  。

    配置为mdm即可在测试的时候直接在SDK 打印结果。如果外挂有uart,也可以用外部的串口,同时board support package setting 全部设置为外部串口

    展开全文
  • Vivado软核microblaze用gpio控制led 软件版本:vivado2017.2 芯片型号:xc7a35tcsg325-2 AXI通用输入/输出(GPIO)核心提供了一般性AXI的目的输入/输出接口。 优点:操作简便 缺点:速度慢 然后介绍下AXI GPIO...
  • ALINX基于VivadoMicroBlaze基础教程
  • 点击vivado界面上侧主选项栏File->Export->Export Hardware。这里要选中Include bitstream,否则SDK中无法识别硬件系统。最后点击File->Lanch SDK启动软件开发工具,开始软件设计流程。建立第一个软件工程时会自动...
  • 阅读本文前,请先阅读: (1)【教程】Xilinx Vivado/Vitis 2020.1创建最简单的MicroBlaze工程运行Hello World C语言程序(不使用外部DDR3内存),并固化到SPI Flash ... (2)Xilinx 2020.1 MIG核读写DDR3内存,新建...
  • 本教程以米联客XC7A35T FGG484-2开发板为例,详细讲解一下用Xilinx Vivado 2020.1创建MicroBlaze软核工程,然后再用Xilinx Vitis 2020.1建立Hello World C程序工程的完整操作步骤。最后程序运行起来后,还要在Vitis...
  • Xilinx Zynq和带MicroBlaze的FPGA都存在处理器端和FPGA端的概念,如果处理器的C代码要和FPGA通讯,则有以下几种方式,我们今天来讲怎么让ZYNQ PS及MicroBlaze对FPGA端BRAM进行访问: (1)GPIO (2)AXI (3)DDR...
  • Vivado2018.2开发的FPGA例程,XC7K325T-2FFG676I,使用Microblaze软核,SDK Standalone C程序,V22 为 LED 管脚,AB11 AC11 为差分200Mhz 晶振输入,复位键为AF25.
  • Vivado/SDK实现microblaze的一些总结

    千次阅读 2013-11-22 11:11:26
    1. 可以在vivado中通过block diagram生成microblaze的硬件,注意Xilinx提供了一个microblaze的例子,如果有问题可以参考这个例子来实现; 2. 画好bd以后,先保存,然后verify,然后保存,然后点“生成bitstram”...
  • https://blog.csdn.net/HHL334417/article/details/90292177
  • MicroBlaze上跑FreeRTOS V8

    千次阅读 2014-06-23 11:22:49
    本来之前的XOS要移植到MicroBlaze上应该不难,可是毕竟自己搞的小玩意,用在公司产品上可不行。第一功能上不够全,没有这么多事件机制,第二不通用,市面上这些开源的都搞得非常全,都直接支持几十种处理器。而且...
  • Microblaze添加自定义IP核,挂AXI总线 前言 最近公司要将主控程序从Cortex M系列的ARM上移植到Xilinx MPSoC内部R5核上,不使用操作系统,直接裸跑,实现原有功能的基础上增加其他实时性要求更高的功能,在具体功能...
  • Vivado下使用Microblaze控制LED

    千次阅读 2017-03-30 22:10:59
    Vivado 版本 2016.3 之前觉得控制个LED很简单,但实现起来不是很顺利,简单Mark一记。 例化microblaze,led IP 核,自动连接,自动生成的时钟是差分对,可以直接双击clock IP把差分改为单端,之前碰到这个问题然后...
  • Vivado/SDK 2018.3版本中,Vivado 2018.3生成的bit文件,加载到FPGA芯片上,SDK debug后,Microblaze可以正常工作,但是当通过SDK生成download.bit文件后,将download.bit加载到FPGA芯片上,Microblaze不能正常...
  • arty a7是基于Artix-7 FPGA设计的开发平台,具有丰富的Pmod接口,扩展性较强,搭建...基于microblazevivado开发流程 以下是在vivado2017.4_MicroBlaze_ArtyA735t上的开发流程 新建工程 注:路径不要有中文名,电
  • Vivado_MicroBlaze_问题及解决方法_汇总(不定时更新) 标签: Vivado 2015-07-03 14:35 4453人阅读 评论(0) 收藏 举报  分类: 硬件(14)  版权声明:本文为博主原创文章,未经博主允许不得转载。 ...
  • xapp1218,在BD中构建MB系统,由几个主要模块构成, ++++++++++++++++++++++++ MB核, 生成的MB核,需要引出如下接口, clk, 这是MB核的工作时钟,一般连接到一个100MHZ的时钟, reset, 这是MB核的复位控制信号,...
  • 选择的板子是ZYBO,如果没有找到板子的话,则需要到vivado的安装mulxia替换下面的文件,使之包括该型号的板子 下面开始正式工程的配置。 点击Create Block Design创建一个IP,然后出现下面的界面 点击图中的加号,...
  • 一、RTL代码有改动或者添加了ila,vivado综合完成后,导出bitstream 1、在vivado中 2、下一步选择including bitstream; 3、导出.xsa文件 4、在vitis中,update hardware specification,选择相应的xsa文件 二、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 569
精华内容 227
关键字:

microblazevivado