RISC-V MCU中文社区

【分享】 Hbirdv2移植到Nexys4 DDR/Nexys Video

发表于 全国大学生集成电路创新创业大赛 2021-05-09 11:13:24
0
3672
8

本队伍编号CICC3042,本篇文章介绍Hbirdv2移植到Nexys4 DDR(现已改名为Nexys A7-100T)和Nexys Video开发板,开发板链接:

Nexys A7-100T

http://www.digilent.com.cn/products/product-nexys-4-ddr-artix-7-fpga-trainer-board.html

Nexys Video

http://www.digilent.com.cn/products/product-nexys-video-artix-7-fpga-trainer-board-for-multimedia-applications.html


Hbirdv2对于不同开发板的移植步骤基本相同,可以直接新建Vivado工程,也可以在官方提供的ddr200tmcu200t相应的脚本基础上修改,主要包括以下几步:


1. 添加源文件

2. 添加时钟

    3. 修改system.v,留下需要的顶层接口

    1. 4. 修改约束文件

    步骤1中,准备好Hbirdv2的源文件,可以在Vivado添加源文件时直接导入e203_hbirdv2项目中的rtl文件夹。


    步骤2中,我们需要生成两个时钟,16MHz时钟作为处理器时钟,32.768KHz时钟为常开域时钟。参考蜂鸟v1Hbirdv1Arty开发板上的移植,通过clocking wizard IP核生成两个时钟,clk_16M即为16MHz信号,clk_83888.388KHz信号,通过clkdivider模块256分频后得到近似的32.768KHz时钟。其他板子比如Genesys2的时钟源为差分输入,同样使用clocking wizard IP核来配置。

    步骤3中,我们需要修改顶层接口等内容,比如去掉不需要的接口,添加访问DDR接口等。在我们的项目中暂时只需要两个uart接口,即GPIO1617位,为了避免在约束文件中分配过多接口,将system.v中的顶层接口中的GPIO修改为以下内容:

    同样地,对后面的IOBUF模块进行修改:

    注意在Nexys4 DDRNexys Video开发板中需要通过STARTUPE2原语来驱动Quad SPI flash,而在Arty开发板中不需要。因此这里的qspi0_sck不需要接出,在顶层接口中注释掉,并例化STARTUPE2模块:

    STARTUPE2

      #(

      .PROG_USR("FALSE"),

      .SIM_CCLK_FREQ(0.0)

      )

      STARTUPE2_inst

      (

        .CFGCLK     (),

        .CFGMCLK    (),

        .EOS        (),

        .PREQ       (),

        .CLK        (1'b0),

        .GSR        (1'b0),

        .GTS        (1'b0),

        .KEYCLEARB  (1'b0),

        .PACK       (1'b0),

        .USRCCLKO   (qspi0_sck),      // First three cycles after config ignored, see AR# 52626

        .USRCCLKTS  (1'b0),     // 0 to enable CCLK output

        .USRDONEO   (1'b1),     // Shouldn't matter if tristate is high, but generates a warning if tied low.

        .USRDONETS  (1'b1)      // 1 to tristate DONE output

      );


    步骤4中修改约束文件,这里以Nexys Video为例,首先分配时钟引脚,将pmu_padenpmu_padrst连接到LED,将mcu_wakeup连接到button,将fpga_rst连接到板子上的reset按键,注意这里的普通按键按下是高电平,而reset按键按下是低电平。随后分配JTAG 接口和qspi接口。注意qspi0_sck连到了STARTUPE2模块上,不要写到约束文件中:

    set_property -dict { PACKAGE_PIN T19   IOSTANDARD LVCMOS33 } [get_ports { qspi0_cs }]; #IO_L6P_T0_FCS_B_14 Sch=qspi_cs

    set_property -dict { PACKAGE_PIN P22   IOSTANDARD LVCMOS33 } [get_ports { qspi0_dq[0] }]; #IO_L1P_T0_D00_MOSI_14 Sch=qspi_dq[0]

    set_property -dict { PACKAGE_PIN R22   IOSTANDARD LVCMOS33 } [get_ports { qspi0_dq[1] }]; #IO_L1N_T0_D01_DIN_14 Sch=qspi_dq[1]

    set_property -dict { PACKAGE_PIN P21   IOSTANDARD LVCMOS33 } [get_ports { qspi0_dq[2] }]; #IO_L2P_T0_D02_14 Sch=qspi_dq[2]

    set_property -dict { PACKAGE_PIN R21   IOSTANDARD LVCMOS33 } [get_ports { qspi0_dq[3] }]; #IO_L2N_T0_D03_14 Sch=qspi_dq[3]

     

    set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]

    set_property CONFIG_MODE SPIx4 [current_design]

    set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]


    使用STARTUPE2原语驱动qspi flash后,在实际下载程序到flash过程中发现Nexys4 DDR可以正常运行,而Nexys Video无法正常运行,调试发现flash地址空间中只有前几条指令正常,其他指令和反汇编文件对不上或者全是0,这里是不是板子的原因有待深入研究。下载到ilm中都可以正常运行。


    下一篇分享在windows/linux下使用Olimex和蜂鸟调试器下载程序。

    喜欢8
    用户评论
    王翔

    王翔 实名认证

    懒的都不写签名

    积分
    问答
    粉丝
    关注
    • RV-STAR 开发板
    • RISC-V处理器设计系列课程
    • 培养RISC-V大学土壤 共建RISC-V教育生态
    RV-STAR 开发板