首页 > 其他分享 >手把手教你蜂鸟e203移植(以Nexys4DDR为例)

手把手教你蜂鸟e203移植(以Nexys4DDR为例)

时间:2023-03-09 21:22:31浏览次数:28  
标签:e203 set get 为例 Nexys4DDR dict property ports PACKAGE

准备工作:(网盘链接:)
1.蜂鸟e203的RTL源码;
2.一段分频代码;
3.顶层设计文件(system.v)
4.开发板文件;
5.Nexys4DDR电路图;
6.Nexys4DDR管脚约束模板;
7.Nexys4DDR官方文档。

1.

在Vivado中创建工程,命名随意,路径随意;

2.

这里可以选择是否添加源文件等,我们先不添加;

3.选择我们目标要移植到的板子

这里我们选择的是Nexys4DDR,若Vivado库中没有此板载文件,可以添加对应板载文件到Vivado\2018.2\data\boards\board_files目录下,这里我们给出了Nexys4DDR的开发板文件;

  等待创建中~
4.添加源文件:

创建工程完成后,单击"+",添加源文件,这里我们选择添加的是文件夹e203(路径为e203_hbirdv2/rtl/e203),Finish完成添加,那两个勾建议可以勾选,会将添加的源文件拷贝到我们的工程目录下,防止对原始文件造成改动;

5.添加头文件:

同上操作,找到对应想要移植板子的system.v文件(路径为e203_hbirdv2-master\fpga\mcu200t\system.v),这里选择的是MCU;

6.设置头文件:

添加完成后,右键点击system.v将其设置为头文件;

7.调用IP核:

这时,我们会观察到有两个文件有问题,这是由于e203中调用了相应的IP核,我们也要在工程中对应添加;

8.添加reset_sys:

在IP目录中找到对应IP核Processor System Reset,双击将名字改为system.v中的对应名字reset_sys。注意!这里一定要保持名称一致!后修改其复位的优先级为最高,即可完成IP核的调用;

9.添加clk:

在IP目录中找到对应IP核Clocking Wizard,同上操作,将名改为mmcm,修改生成时钟频率为16M,改变复位方式为低电平复位,即可完成IP核的调用;同时应注意这里IP核调用的例化名称应与system.v中保持一致。

10.添加分频时钟模块:

添加源文件代码,若无可以在资料中找到对应的,调用该模块生成CLK32768KHZ的时钟

11.修改顶层定义文件:

右键单击e203_defines.v,将其设为global define,并在其文件头添加语句:`define FPGA_SOURCE。完成后查看Elaborated Design,若此时报错无法打开e203_defines.v文件,可以在SourceFileProperties中将其对应文件类型改为Verilog Header

12.完成管脚约束:

这里提供资料有Nexys4DDR的电路原理图及其约束文件模板,可据此对时钟管脚,SPI引脚,PMU引脚等必要的引脚进行一定约束来简单验证我们能否移植成功。对于管脚约束的完成,我们可以划分成两个模块:xdc约束文件的编写system.v顶层文件的对应修改

  • xdc约束文件的修改: 主要模块包括:时钟生成及引脚绑定、电源PMU、SPI、JTAG调试,也就是说只要保证了这四个基本模块的引脚约束,就能够实现最基础核心的移植,后续外设的添加可以再自行修改,这里给出约束代码示例如下:
# Clock signal
set_property -dict {PACKAGE_PIN E3 IOSTANDARD LVCMOS33} [get_ports CLK100MHZ]
# set_property -dict { PACKAGE_PIN F15    IOSTANDARD LVCMOS33 } [get_ports { CLK32768KHZ }];
create_clock -period 10.000 -name sys_clk_pin -waveform {0.000 5.000} -add [get_ports CLK100MHZ]
# set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets dut_io_pads_jtag_TCK_i_ival]
# set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets IOBUF_jtag_TCK/O]

# Reset
set_property -dict {PACKAGE_PIN C12 IOSTANDARD LVCMOS33} [get_ports fpga_rst]
set_property -dict {PACKAGE_PIN M18 IOSTANDARD LVCMOS33} [get_ports mcu_rst]

# QSPI interface
set_property -dict {PACKAGE_PIN K17 IOSTANDARD LVCMOS33} [get_ports {qspi0_dq[0]}]
set_property -dict {PACKAGE_PIN K18 IOSTANDARD LVCMOS33} [get_ports {qspi0_dq[1]}]
set_property -dict {PACKAGE_PIN L14 IOSTANDARD LVCMOS33} [get_ports {qspi0_dq[2]}]
set_property -dict {PACKAGE_PIN M14 IOSTANDARD LVCMOS33} [get_ports {qspi0_dq[3]}]
set_property -dict {PACKAGE_PIN L13 IOSTANDARD LVCMOS33} [get_ports qspi0_cs]

# JTAG connection
# set_property -dict { PACKAGE_PIN E13   IOSTANDARD LVCMOS33 } [get_ports { mcu_TDO }];
# set_property -dict { PACKAGE_PIN E10   IOSTANDARD LVCMOS33 } [get_ports { mcu_TCK }];
# set_property -dict { PACKAGE_PIN E11   IOSTANDARD LVCMOS33 } [get_ports { mcu_TDI }];
# set_property -dict { PACKAGE_PIN E12   IOSTANDARD LVCMOS33 } [get_ports { mcu_TMS }];

# pmu_wakeup
set_property -dict {PACKAGE_PIN H17 IOSTANDARD LVCMOS33} [get_ports pmu_paden]
set_property -dict {PACKAGE_PIN K15 IOSTANDARD LVCMOS33} [get_ports pmu_padrst]
set_property -dict {PACKAGE_PIN N17 IOSTANDARD LVCMOS33} [get_ports mcu_wakeup]

set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES [current_design]
  • system.v中对应文件的修改:顶层模块中代码功能划分十分规整,对于不需要的模块如GPIO等直接注释掉即可。

  • 如恰好我们移植的是同一块板子,那么恭喜你,我已经在资料包里准备好了两份文件,直接导入工程即可

    标签:e203,set,get,为例,Nexys4DDR,dict,property,ports,PACKAGE
    From: https://www.cnblogs.com/Qzzz/p/17201475.html

相关文章

  • leetcode203. 移除链表元素
    题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。示例1:输入:head=[1,2,6,3,4,5,6],......
  • 服务器产生大量的close_wait状态为例
    1.close_wait状态介绍:客户端主动关闭连接,服务器接收到客户端的FIN,但是还没有发送自己的FIN,此时的状态为close_wait状态,大量的close_wait状态拖累服务器性能2.close_wait......
  • Android&gradle配置(以小米便签为例)
    写在最前以下所涉及到的某些部分需要翻越中国长城防火墙,请确保你有此能力,本文作者不提供相关技术支持。且本文所有涉及境外网站的图片均来自网络,本人只负责讲解。Android......
  • jmeter跨线程组调用变量-以token为例
    跨线程组调用变量的解决方法:在beanshell取样器中使用setProperty函数设置全局变量,其他线程组用P函数调用全局变量 跨线程组调用变量的步骤:以token为例跨线程组调用有两......
  • 第二节:代码片段的制作(以VSCode、HbuilderX为例)
    一. VSCode片段       二.HbuilderX片段       三.其它        !作       者:Yaopengfei(姚鹏飞)博......
  • scrapy框架图片爬取案例——以堆糖网为例
    本节主要分享的是scrapy框架中关于图片类的简单爬取方法,在这里只需要用到三个文件:1.setting.py进行scrapy抓取图片所用到的基础。2.duitang_spider.py实现获取多出url进......
  • JVM系统优化实践(4):以支付系统为例
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~   前面说过,JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面,......
  • JVM系统优化实践(4):以支付系统为例
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~前面说过,JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面,而老年代则......
  • 一道题为例深入理解二分
    深刻理解二分最佳牛围栏农夫约翰的农场由$N$块田地组成,每块地里都有一定数量的牛,其数量不会少于$1$头,也不会超过$2000$头。约翰希望用围栏将一部分连续的田......
  • Knife4J-Swagger的加强版接口文档-以springboot2.6版本为例
    导入依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.4</version><rel......