你也可以使用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。
评论
查看更多