阅读本文前,请先阅读:
(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核就可以了。
原本,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核:
修改clocking wizard的配置:
mig的详细配置请参考上面的文章(2),关键配置单独挑出来说明一下:
现在可以添加microblaze核了,添加后点击run block automation,请注意时钟的选择:
点击run connection automation,通过一个新建的axi smartconnect将mig的s_axi和microblaze连接起来:
自动连接剩余的接口:
添加axi uartlite串口,用于printf打印:
run connection automation,将uartlite与microblaze连在一起:
最终连线结果:
地址分配:
引脚配置:
综合时会提示bankbone错误:
[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文件就可以屏蔽掉此错误:
为什么会有工频干扰_工频干扰产生原因及解决方案
智慧景区已成为了物联网产业的发展新商机
人工智能推动其数字化转型,软件开发将发生巨大变化
不同操作系统下的编译器安装方式
恩智浦与峰力联合研发出新型超低功耗无线通讯技术
Xilinx Vivado创建MicroBlaze工程运行Hello World C语言程序
linux内核无法启动
达成和解,苹果和Corellium法律纠纷宣告落幕
三星健康监测应用程序通过韩国医疗器械认证
索尼大法好 《水果忍者VR》即将登陆PSVR
互联网中最基础的漏斗分析具体逻辑
西班牙5G频谱拍卖,是5G 2018-2020国家计划
GSM占用频段
苏宁牵手海外大牌打造全球优质供应链携手共建架设全球化贸易桥梁
基于RFID技术的游乐场馆室内人员定位系统
屏幕指纹触控技术将成为智能手机发展的大趋势
笔记本噪音烦躁 看我如何收拾它!
人机协同战略深度诠释,4大业务领域全新亮相
中兴手机演示第二代量产屏下相机技术
爱立信、英特尔和AT&T合作 将进行5G技术的首次测试