0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx Vivado创建MicroBlaze工程运行Hello World C语言程序

C29F_xilinx_inc 来源:赛灵思 作者:赛灵思 2022-02-16 16:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

阅读本文前,请先阅读:

(1)【教程】Xilinx Vivado/Vitis 2020.1创建最简单的MicroBlaze工程运行Hello World C语言程序(不使用外部DDR3内存),并固化到SPI Flash

https://blog.csdn.net/ZLK1214/article/details/111824576

(2)Xilinx 2020.1 MIG核读写DDR3内存,新建工程时配置MIG核的完整步骤

https://blog.csdn.net/ZLK1214/article/details/111349678

添加了DDR3内存以后,程序既可以运行在BRAM里面,也可以运行在DDR3内存里面。但如果运行在DDR3内存里面,固化起来会比较麻烦,需要借助SREC SPI Bootloader。

建立带DDR3内存的MicroBlaze工程的方法很简单:以不带DDR3的工程(1)为基础,只需要在Clocking Wizard和Processor System Reset之间插入一个MIG IP核就可以了。

poYBAGIMpkCARqygAAKR15cvwcw769.png

原本,Clocking Wizard输出的时钟是100MHz,是直接接到Processor System Reset上的。
修改后,两者中间插入了一个MIG。Clocking Wizard的时钟输出变成了200MHz,给MIG提供时钟。在MIG的内部由PLL倍频到400MHz驱动外部DDR3内存,然后再分频到100MHz从ui_clk引脚输出出来,给Processor System Reset提供时钟。
修改后,MicroBlaze的运行频率没有变,仍然是100MHz。

建立工程的时候一定要小心使用Vivado的自动连线的功能,操作不当的话很容易产生两个Processor System Reset。

下面详细说明一下工程的建立步骤。

首先在空白Block Design里面添加Clocking Wizard和MIG IP核:

poYBAGIMpkGAR328AABGZ1HHdO0264.png

修改Clocking Wizard的配置:

pYYBAGIMpkOAU62sAAEQHRPvHsY680.png

MIG的详细配置请参考上面的文章(2),关键配置单独挑出来说明一下:

poYBAGIMpkWACjr5AAIa-A20Ydk009.png

pYYBAGIMpkaAc_EBAACgta7GR24335.png

现在可以添加MicroBlaze核了,添加后点击Run Block Automation,请注意时钟的选择:

pYYBAGIMpkiAe9bNAAINzfM07EA633.png

poYBAGIMpkqAFY2JAAFqNTj8Z-Y373.png

点击Run Connection Automation,通过一个新建的AXI SmartConnect将MIG的S_AXI和MicroBlaze连接起来:

pYYBAGIMpk2AQK7LAAFIsfmJ1No020.png

自动连接剩余的接口

poYBAGIMplGAcAI9AAFbT5hAWDU717.png

pYYBAGIMplSAGFXkAAGkJ3l4nd4042.png

添加AXI Uartlite串口,用于printf打印:

pYYBAGIMplWAJaSOAAG6n8o5fIc509.png

Run Connection Automation,将Uartlite与MicroBlaze连在一起:

poYBAGIMpleAL18mAAD-3WnCWCA451.png

最终连线结果:

pYYBAGIMplqAAR57AAHvKU1DdII940.png

地址分配:

poYBAGIMplyAXOkKAAEWpxuS6kQ525.png

引脚配置:

pYYBAGIMpl2AYcRsAAEADikOE14680.png

综合时会提示BANKBONE错误:

poYBAGIMpl-AUdDVAAFdeUMQX44786.png

[Place 30-575] Sub-optimal placement for a clock-capable IO pin and MMCM pair. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.

design_1_i/clk_wiz_0/inst/clkin1_ibufg (IBUF.O) is locked to IOB_X1Y26
design_1_i/clk_wiz_0/inst/mmcm_adv_inst (MMCME2_ADV.CLKIN1) is provisionally placed by clockplacer on MMCME2_ADV_X1Y1

The above error could possibly be related to other connected instances. Following is a list of
all the related clock rules and their respective instances.

Clock Rule: rule_mmcm_bufg
Status: PASS
Rule Description: An MMCM driving a BUFG must be placed on the same half side (top/bottom) of the device
design_1_i/clk_wiz_0/inst/mmcm_adv_inst (MMCME2_ADV.CLKFBOUT) is provisionally placed by clockplacer on MMCME2_ADV_X1Y1
and design_1_i/clk_wiz_0/inst/clkf_buf (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y31

将错误信息中提示的代码加入xdc文件就可以屏蔽掉此错误:

pYYBAGIMpmCAfqu5AAFFEFvOfBo501.png

poYBAGIMpmKAQiV3AAKlWVadyVw422.png

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DDR3
    +关注

    关注

    2

    文章

    290

    浏览量

    44323
  • MicroBlaze
    +关注

    关注

    3

    文章

    68

    浏览量

    22374
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何在 RAM 中使用 NXP Link2 在 NXP Zephyr V4.1 中运行hello_world”示例

    如何在 RAM 中使用 NXP Link2 在 NXP Zephyr V4.1 中运行hello_world”示例?
    发表于 05-25 07:28

    基于瑞萨FPB-RA0E2开发板实现UART串口打印HELLO WORLD

    本篇文章主要介绍如何使用e2 studio灵活软件包(FSP)对瑞萨FPB-RA0E2单片机开发板进行UART串口打印HELLO WORLD
    的头像 发表于 05-19 11:19 3496次阅读
    基于瑞萨FPB-RA0E2开发板实现UART串口打印<b class='flag-5'>HELLO</b> <b class='flag-5'>WORLD</b>

    【瑞萨RA2L1入门学习】串口打印 Hello World

    上一篇完成了开发板点灯,说明:✅ 工程创建正常 ✅ GPIO 配置正常 ✅ 程序下载正常接下来继续学习最常用的功能之一:串口打印 本文记录如何在 瑞萨 RA2L1 上实现:printf(\"
    发表于 04-28 17:23

    如何将evkbmimxrt1170_hello_world_cm7.bin下载到 QSPI Flash?

    我修改了 hello_world.c 如下 PRINTF(“测试你好世界。 那么,是否在调试 USB 端口上呈现“TEST hello world”? 1. 使用哪个 USB 端口下载.bin
    发表于 04-22 11:20

    在 MCUXpresso for VSCode for imx93EVK 中导入 Trustzone hello_world_ns 的示例应用失败,为什么?

    了 25.6.0 和最新的 25.9.0)、MCIMX93-EVK 板、trustzone_examples/hello_world_ns、独立应用程序、项目名称和位置以及工具链 Arm GNU 14.2.1
    发表于 04-20 06:31

    IMX93 测试hello_world应用报错,是什么原因导致的?

    我正在按照记录测试hello_world应用程序,但我收到错误。是什么原因?
    发表于 04-02 06:06

    VS Code运行 pytest_hello_world.py

    VS Code运行 pytest_hello_world.py
    的头像 发表于 11-24 00:33 860次阅读

    根据书上教程在eclipse环境下hello_world程序编译成功,但是烧写报错,是什么原因?

    根据书上教程在eclipse环境下hello_world程序编译成功,但是烧写报错,请有理解的大神指点一下。
    发表于 11-07 06:21

    蜂鸟E203能够仿真运行C语言程序吗?

    我看那两本书里面都是说怎么在FPGA上运行C语言程序和Benchmark程序,它提供仿真器下如何编译运行
    发表于 11-06 06:21

    在Windows10上运行vivado使用tcl文件创建E203项目路径错误的问题

    先按照官方给的开源项目,e203_hbirdv2-masterfpgamcu200t目录下的Makefile内容手动创建vivado工程。 在调用.tcl文件的过程中,每次进行到
    发表于 10-28 07:19

    ddr200t开发板运行hello world

    进入hello world目录进行交叉编译 下载驱动,板子和电脑连接后,驱动正常的时候,查看设备管理器发现增加了一个com4,数字可能不一样,说明驱动正常。 下载程序 该错误,是连接问题。在前面我们
    发表于 10-27 08:34

    飞凌嵌入式ElfBoard-Vim编辑器之GCC的基本使用

    我们现在以我们学习语言的经典的hello.c的编译为例,对gcc的基本用法做一个了解。已编译hello.c文件为例。创建测试例程路径/home/elf/work/example/
    发表于 10-16 09:05

    创建stm32f103c8工程后为什么终端没有打印Hello RT_Thread?

    创建stm32f103c8工程后为什么终端没有打印Hello RT_Thread!,程序好像也没有下载进去
    发表于 09-26 08:24

    【Milk-V Duo S 开发板免费体验】2 - 安装编译环境并测试Hello world!

    Hello, World! [root@milkv]~# ./helloworld Hello, World! 结论 至此已经配置应用程序
    发表于 07-07 21:18

    【润开鸿HH-SCDAYU800A开发板试用体验】Hello World

    \\\\\\\\toolchains Hello World 编写第一个应用程序 :最简单的Hello World 文件->新建项目,
    发表于 07-01 00:52