HPS基本概念及其设计

HPS基本概念及其设计DE1 SOC 开发版上的 FPGA 在一个基于 ARM 的用户定制系统 SOC 中集成了分立处理器 HPS FPGA 和数字信号处理 DSP 功能 HPS 是基于 ARMcortex A9 双核处理器 具有丰富的外设和存储接口 DDR2 3 等 HPS 和 FPGA 不仅能够独立工作 也能通过高性能 AXI 总线桥接实现高速宽带行数据通信 这个总线是双向的 HPS 总线主机能够通过 HPS 至 FPG

  DE1-SOC开发版上的FPGA在一个基于ARM的用户定制系统(SOC)中集成了分立处理器(HPS)、FPGA和数字信号处理(DSP)功能。HPS是基于ARM cortex-A9双核处理器,具有丰富的外设和存储接口(DDR2/3)等。 HPS 和 FPGA 不仅能够独立工作,也能通过高性 能 AXI 总线桥接实现高速宽带行数据通信,这个总线是双向的,HPS 总线主机能够通过 HPS 至 FPGA 桥接访问 FPGA 架构中的总线及其外设。所有桥接兼容 AXI-3/4, 支持同时读写操作,同样的,FPGA 架构中的总线主机能够通过 FPGA 至 HPS 桥接访问 HPS 总线及其外设。基本架构如下:

HPS基本概念及其设计

 

 1、本文学习目的

  • 建立一个 SoC based FPGA hardware 系统 
  • HPS 组件在 Qsys 内的设定(based on DE1-SoC board) 
  • FPGA avmm 外设和 HPS 桥接 
  • 生成 Preloader 和 Device Tree(based on DE1-SoC board) 
  • 编译 linux 应用程序  Linux 下控制 HPS 的外设 
  • HPS 总线到 FPGA 总线的 Address Mapping 
  • HPS 控制 FPGA 端的 LED(based on DE1-SoC board) 

2、基本设计流程

SoC FPGA 设计流程 基于 SoC 的 FPGA 嵌入式系统硬件与软件的开发流程如图所示。

HPS基本概念及其设计

  首先要基于 Qsys 规划系统需要的外设,包括 HPS 与 FPGA 各自的接口。HPS 外设只需要根据 DE1-SoC 硬 件属性进行设定即可,FPGA 外设依旧是通过 IP 模块的方式添加。然后建立各个模块间 的连接(时钟,复位,总线),最后产生出硬件与软件开发各自所需的档案

  • 硬件开发和以往传统的基于 NiosII 的 FPGA 设计流程相同,使用 Quartus 加入 Qsys 以 及用户逻辑,然后设定 FPGA 管脚分配,最后综合编译产生 .sof 编程档案。
  • 软件的开发则通过 Altera 的 SoCEDS 开发工具将 Qsys 所做的 HPS 硬件设定转换成产生 Preloader、uboot 和 Device Tree 所需的输入文件。这些文件可以协助 HPS 在 DE1-SoC 上运行 embedded linux system,linux 内核解析需要挂载硬件外设并完成 boot。然后 开发基于 linux 操作系统的应用程序并在 DE1-SoC 上运行。应用程序可以实现 HPS 和 FPGA 协同工作完成定制化设计。

3、boot sd card制作流程

   一般从系统设计开始到生成boot linux操作系统SD Card,其所需要的软件工具与生成档案如下:

HPS基本概念及其设计

下图说明了GSRD的完整构建流程。

GSRD-flow.png

下表显示了构建流程中使用的工具:

工具 描述 部分
Quartus II 创建,编辑和编译FPGA硬件设计 ACDS
设备树生成器 生成设备树 SoC EDS
设备树编译器 在设备树文件格式之间转换
预加载器生成器 根据硬件切换信息生成Preloader源代码
ARM DS-5 AE 软件开发套件
BitBake的 Yocto建立实用程序 Yocto源包
SD卡脚本 创建SD卡图像的脚本

 

下表显示了构建过程中的输入文件:

文件 描述
Quartus项目 FPGA硬件项目源代码
Board XML文件 描述开发板的文件,用于创建设备树
Yocto食谱 用于构建Linux可交付成果的Yocto配方
Web服务器文件 在板上运行的Web服务器所需的其他文件

 

下表描述了构建流程图中的其余项目:

文件 描述
.sof SRAM目标文件 – FPGA编程文件,由编译FPGA硬件项目产生
.rbf 原始二进制文件 – 压缩FPGA编程文件
.dts 设备树源 – 用于描述Linux内核的硬件
.dtb 设备树二进制 – .dts的二进制表示
.sopcinfo SOPC信息文件 – 包含设备树生成器要使用的硬件的描述
.svd 系统视图描述文件 – 描述DS-5调试器的硬件
不可触摸 包含Preloader Generator要使用的硬件描述的文件夹

 

4、搭建Qsys系统

  下面开启Qsys工程,了解HPS的组件设定。

 1、创建Qsys工程

   Qsys工程的创建过程不是这里的重点,了解创建过程可以参考文章完整的SOPC开发流程体验,这里直接打开官方培训给的工程(提取码dhgv,不要放到中文路径下)

  进入de1_soc_training\de1_soc_training\lab\HW\DE1_SoC_GHRD,双击soc_system.qpf打开工程

HPS基本概念及其设计

  点击Qsys打开Qsys工具HPS基本概念及其设计,打开.qsys系统,可以看到里面已经包含了HPS等组件

HPS基本概念及其设计

2、配置HPS系统

  HPS内包含了双核的ARM Cortex A9处理器外,还由许多内建外设可以使用。

  下面对其进行配置,点击hpc_0打开HPS配置窗口HPS基本概念及其设计,可以看到如下配置界面,HPS属性有FPGA Interfaces、PeripheralPin Multiplexing、HPS Clock和SDRAM四个配置栏。

HPS基本概念及其设计

   在FPGA Interfaces选项栏下,在general下的选项是配置使能基本的接口和信号,配置AXI Bridges参数

HPS基本概念及其设计

  AXI Bridges可以配置3个AXI Bridges的数据宽度

HPS基本概念及其设计

   FPGA to HPS SDRAM Interface下可以增减FPGA to HPS SDRAM的接口数目HPS基本概念及其设计

   Resets可以配置系统的Reset信号

HPS基本概念及其设计

  DMA Peripheral Request使能以及中断使能HPS基本概念及其设计

  HPS-to-FPGA使能外围设备。

HPS基本概念及其设计

 在Peripheral Pin Multiplexing选项栏下,可以通过选项来启动HPS的外围设备。HPS基本概念及其设计

  可以看到每一个外设都有一个pin选项,这是因为HPS I/O如果对照DE1-SOC的原理图,可以发现HPS的管脚是复用的,这个就需要对照着原理图进行配置。可以参照友晶DE-SOC开发板的user manual

   在这个设定页最底下也提供了Peripherals Mux Table,可以帮助用户检验整个HPS外设I/O pin multiplexing设定的状态,看看是否有冲突。表内,若管脚名被标注为粗体,就代表此管脚一杯设定。

HPS基本概念及其设计

 在HPS Clocks选项卡,可以设置使能 HPS to FPGA和FPGA to HPS之间的时钟及其频率.17.0软件中Cyclone V 器件MPU 默认时钟为925Mhz,而13.1版为800M。这里编译不改变MPU的Clock,所以去掉use default MPU clock frequency选项!不用改其他的选项,Clock即为800MHz。重新generate 关闭就好了。使用Quarut编译编译完成后会有hps_isw_handoff中的文件会更新,这些文件时连接HPS硬件配置与preloaderr软 件接口文件。

HPS基本概念及其设计

 

 在SDRAM选项卡里,你可以配置HPS的外部存储器接口参数。

HPS基本概念及其设计

 

   这里只做简单介绍采用默认配置,实际工程中根据需求进行配置。

3、添加并配置组件

  接下来,就是根据需求在Qsys里加入组件并与HPS连接。这里用LED进行举例。

1、组件添加与配置

   首先添加LED PIO component,在IP catalog中搜索PIO,选中PIO,双击添加组件

HPS基本概念及其设计

  添加过程需要对组件进行配置,因为是10个LED,所以配置如下:

HPS基本概念及其设计

  点击finish后,在Qsys里就可以看到添加的组件。此时还有报错,这是应为没进行连接。

HPS基本概念及其设计

2、组件重命名

   为了便于区分不同IO的作用,此处需要对组件重命名,选中PIO->右键->选择rename(或者选中CTRL+R)

HPS基本概念及其设计

  然后,双击extern_connection的Export栏,引出LED的外部线,将其重命名为led_pio_external_connection

HPS基本概念及其设计

同理添加四个input按键

HPS基本概念及其设计

HPS基本概念及其设计

3、组件连线

将组件按如下方式连线

HPS基本概念及其设计

可以通过如下方法连接,,右键led_pio组件下的clk信号,选择要来连接的信号,依次相连即可。

HPS基本概念及其设计

 其中需要注意的是在button_pio中,因为是输入,会有中断优先极设置,其连线如下

HPS基本概念及其设计

设置优先等级,选择IRQ列,分配IRQ优先级,这里设为1

HPS基本概念及其设计

4、基地址设置

  将led_pio的基地址修改为0x01_0040,将button_pio 的基地址基地址修改为0x01_00C0地址分配参照下图。

HPS基本概念及其设计

关于地址还有一个需要理解的(来自WS_2_Linux_Kernel_Introduction_Workshop):

HPS基本概念及其设计

 

并点击锁定图标锁定基地址,如图所示

HPS基本概念及其设计

至此,整个组件已经添加完毕,完整系统连接如图所示。

HPS基本概念及其设计

点击generate hdl进行编译保存即可。

4、搭建Qsys系统

HPS基本概念及其设计

HPS基本概念及其设计

  然后在(
<你的路径>
\de1_soc_training\de1_soc_training\lab\HW\DE1_SoC_GHRD\soc_system\synthesis)添加.qip文件

 HPS基本概念及其设计

使用同样的方法,将文件夹(
<你的路径>
\de1_soc_training\de1_soc_training\lab\HW\DE1_SoC_GHRD)下的时序约束文件soc_system_timing.sdc加入到项目中

 HPS基本概念及其设计

 

 点击apply后,回到quartus ii界面,在project Navigator中,双击ghrd_top

HPS基本概念及其设计

可以开ghrd_top.v文件,找到soc_system u0,在期内加入led_pio和button_pio对应的instance输入LED以及Button的外部接口声明信号。

.led_pio_external_connection_export (LEDR), .button_pio_external_connection_export (KEY), 

 加入后的程序如下:

// Copyright (c) 2013 by Terasic Technologies Inc. // ============================================================================ // // Permission: // // Terasic grants permission to use and modify this code for use // in synthesis for all Terasic Development Boards and Altera Development // Kits made by Terasic. Other use of this code, including the selling // ,duplication, or modification of any portion is strictly prohibited. // // Disclaimer: // // This VHDL/Verilog or C/C++ source code is intended as a design reference // which illustrates how these types of functions can be implemented. // It is the user's responsibility to verify their design for // consistency and functionality through the use of formal // verification methods. Terasic provides no warranty regarding the use // or functionality of this code. // // ============================================================================ // // Terasic Technologies Inc // 9F., No.176, Sec.2, Gongdao 5th Rd, East Dist, Hsinchu City, 30070. Taiwan // // // web: http://www.terasic.com/ // email:  // // ============================================================================ //Date: Mon Jun 17 20:35:29 2013 // ============================================================================ `define ENABLE_HPS //`define ENABLE_USB module ghrd_top( / ADC / output ADC_CS_n, output ADC_DIN, input ADC_DOUT, output ADC_SCLK, / AUD / input AUD_ADCDAT, inout AUD_ADCLRCK, inout AUD_BCLK, output AUD_DACDAT, inout AUD_DACLRCK, output AUD_XCK, / CLOCK2 / input CLOCK2_50, / CLOCK3 / input CLOCK3_50, / CLOCK4 / input CLOCK4_50, / CLOCK / input CLOCK_50, / DRAM / output [12:0] DRAM_ADDR, output [1:0] DRAM_BA, output DRAM_CAS_n, output DRAM_CKE, output DRAM_CLK, output DRAM_CS_N, inout [15:0] DRAM_DQ, output DRAM_LDQM, output DRAM_RAS_N, output DRAM_UDQM, output DRAM_WE_N, / FAN / output FAN_CTRL, / FPGA / output FPGA_I2C_SCLK, inout FPGA_I2C_SDAT, / GPIO / inout [35:0] GPIO_A, inout [35:0] GPIO_B, / HEX0 / output [6:0] HEX0, / HEX1 / output [6:0] HEX1, / HEX2 / output [6:0] HEX2, / HEX3 / output [6:0] HEX3, / HEX4 / output [6:0] HEX4, / HEX5 / output [6:0] HEX5, `ifdef ENABLE_HPS / HPS / // input HPS_CLOCK1_25, // input HPS_CLOCK2_25, inout HPS_CONV_USB_N, output [14:0] HPS_DDR3_ADDR, output [2:0] HPS_DDR3_BA, output HPS_DDR3_CAS_N, output HPS_DDR3_CKE, output HPS_DDR3_CK_N, output HPS_DDR3_CK_P, output HPS_DDR3_CS_N, output [3:0] HPS_DDR3_DM, inout [31:0] HPS_DDR3_DQ, inout [3:0] HPS_DDR3_DQS_N, inout [3:0] HPS_DDR3_DQS_P, output HPS_DDR3_ODT, output HPS_DDR3_RAS_N, output HPS_DDR3_RESET_N, input HPS_DDR3_RZQ, output HPS_DDR3_WE_N, output HPS_ENET_GTX_CLK, inout HPS_ENET_INT_N, output HPS_ENET_MDC, inout HPS_ENET_MDIO, input HPS_ENET_RX_CLK, input [3:0] HPS_ENET_RX_DATA, input HPS_ENET_RX_DV, output [3:0] HPS_ENET_TX_DATA, output HPS_ENET_TX_EN, inout [3:0] HPS_FLASH_DATA, output HPS_FLASH_DCLK, output HPS_FLASH_NCSO, inout [1:0] HPS_GPIO, inout HPS_GSENSOR_INT, inout HPS_I2C1_SCLK, inout HPS_I2C1_SDAT, inout HPS_I2C2_SCLK, inout HPS_I2C2_SDAT, inout HPS_I2C_CONTROL, inout HPS_KEY, inout HPS_LED, // input HPS_RESET_N, output HPS_SD_CLK, inout HPS_SD_CMD, inout [3:0] HPS_SD_DATA, output HPS_SPIM_CLK, input HPS_SPIM_MISO, output HPS_SPIM_MOSI, inout HPS_SPIM_SS, input HPS_UART_RX, output HPS_UART_TX, input HPS_USB_CLKOUT, inout [7:0] HPS_USB_DATA, input HPS_USB_DIR, input HPS_USB_NXT, output HPS_USB_STP, // output HPS_WARM_RST_N, `endif /*ENABLE_HPS*/ / IRDA / input IRDA_RXD, output IRDA_TXD, / KEY / input [3:0] KEY, / LEDR / output [9:0] LEDR, / PS2 / inout PS2_CLK, inout PS2_CLK2, inout PS2_DAT, inout PS2_DAT2, / SW / input [9:0] SW, / TD / inout TD_CLK27, output [7:0] TD_DATA, output TD_HS, output TD_RESET_N, output TD_VS, `ifdef ENABLE_USB / USB / input USB_B2_CLK, inout [7:0] USB_B2_DATA, output USB_EMPTY, output USB_FULL, input USB_OE_N, input USB_RD_N, input USB_RESET_N, inout USB_SCL, inout USB_SDA, input USB_WR_N, `endif /*ENABLE_USB*/ / VGA / output VGA_BLANK_N, output [7:0] VGA_B, output VGA_CLK, output [7:0] VGA_G, output VGA_HS, output [7:0] VGA_R, output VGA_SYNC_N, output VGA_VS ); //======================================================= // REG/WIRE declarations //======================================================= wire hps_fpga_reset_n; //======================================================= // Structural coding //======================================================= soc_system u0 ( .clk_clk (CLOCK_50), // clk.clk .reset_reset_n (1'b1), // reset.reset_n .led_pio_external_connection_export (LEDR), .button_pio_external_connection_export (KEY), //HPS ddr3 .memory_mem_a ( HPS_DDR3_ADDR), // memory.mem_a .memory_mem_ba ( HPS_DDR3_BA), // .mem_ba .memory_mem_ck ( HPS_DDR3_CK_P), // .mem_ck .memory_mem_ck_n ( HPS_DDR3_CK_N), // .mem_ck_n .memory_mem_cke ( HPS_DDR3_CKE), // .mem_cke .memory_mem_cs_n ( HPS_DDR3_CS_N), // .mem_cs_n .memory_mem_ras_n ( HPS_DDR3_RAS_N), // .mem_ras_n .memory_mem_cas_n ( HPS_DDR3_CAS_N), // .mem_cas_n .memory_mem_we_n ( HPS_DDR3_WE_N), // .mem_we_n .memory_mem_reset_n ( HPS_DDR3_RESET_N), // .mem_reset_n .memory_mem_dq ( HPS_DDR3_DQ), // .mem_dq .memory_mem_dqs ( HPS_DDR3_DQS_P), // .mem_dqs .memory_mem_dqs_n ( HPS_DDR3_DQS_N), // .mem_dqs_n .memory_mem_odt ( HPS_DDR3_ODT), // .mem_odt .memory_mem_dm ( HPS_DDR3_DM), // .mem_dm .memory_oct_rzqin ( HPS_DDR3_RZQ), // .oct_rzqin //HPS ethernet .hps_0_hps_io_hps_io_emac1_inst_TX_CLK ( HPS_ENET_GTX_CLK), // hps_0_hps_io.hps_io_emac1_inst_TX_CLK .hps_0_hps_io_hps_io_emac1_inst_TXD0 ( HPS_ENET_TX_DATA[0] ), // .hps_io_emac1_inst_TXD0 .hps_0_hps_io_hps_io_emac1_inst_TXD1 ( HPS_ENET_TX_DATA[1] ), // .hps_io_emac1_inst_TXD1 .hps_0_hps_io_hps_io_emac1_inst_TXD2 ( HPS_ENET_TX_DATA[2] ), // .hps_io_emac1_inst_TXD2 .hps_0_hps_io_hps_io_emac1_inst_TXD3 ( HPS_ENET_TX_DATA[3] ), // .hps_io_emac1_inst_TXD3 .hps_0_hps_io_hps_io_emac1_inst_RXD0 ( HPS_ENET_RX_DATA[0] ), // .hps_io_emac1_inst_RXD0 .hps_0_hps_io_hps_io_emac1_inst_MDIO ( HPS_ENET_MDIO ), // .hps_io_emac1_inst_MDIO .hps_0_hps_io_hps_io_emac1_inst_MDC ( HPS_ENET_MDC ), // .hps_io_emac1_inst_MDC .hps_0_hps_io_hps_io_emac1_inst_RX_CTL ( HPS_ENET_RX_DV), // .hps_io_emac1_inst_RX_CTL .hps_0_hps_io_hps_io_emac1_inst_TX_CTL ( HPS_ENET_TX_EN), // .hps_io_emac1_inst_TX_CTL .hps_0_hps_io_hps_io_emac1_inst_RX_CLK ( HPS_ENET_RX_CLK), // .hps_io_emac1_inst_RX_CLK .hps_0_hps_io_hps_io_emac1_inst_RXD1 ( HPS_ENET_RX_DATA[1] ), // .hps_io_emac1_inst_RXD1 .hps_0_hps_io_hps_io_emac1_inst_RXD2 ( HPS_ENET_RX_DATA[2] ), // .hps_io_emac1_inst_RXD2 .hps_0_hps_io_hps_io_emac1_inst_RXD3 ( HPS_ENET_RX_DATA[3] ), // .hps_io_emac1_inst_RXD3 //HPS QSPI .hps_0_hps_io_hps_io_qspi_inst_IO0 ( HPS_FLASH_DATA[0] ), // .hps_io_qspi_inst_IO0 .hps_0_hps_io_hps_io_qspi_inst_IO1 ( HPS_FLASH_DATA[1] ), // .hps_io_qspi_inst_IO1 .hps_0_hps_io_hps_io_qspi_inst_IO2 ( HPS_FLASH_DATA[2] ), // .hps_io_qspi_inst_IO2 .hps_0_hps_io_hps_io_qspi_inst_IO3 ( HPS_FLASH_DATA[3] ), // .hps_io_qspi_inst_IO3 .hps_0_hps_io_hps_io_qspi_inst_SS0 ( HPS_FLASH_NCSO ), // .hps_io_qspi_inst_SS0 .hps_0_hps_io_hps_io_qspi_inst_CLK ( HPS_FLASH_DCLK ), // .hps_io_qspi_inst_CLK //HPS SD card .hps_0_hps_io_hps_io_sdio_inst_CMD ( HPS_SD_CMD ), // .hps_io_sdio_inst_CMD .hps_0_hps_io_hps_io_sdio_inst_D0 ( HPS_SD_DATA[0] ), // .hps_io_sdio_inst_D0 .hps_0_hps_io_hps_io_sdio_inst_D1 ( HPS_SD_DATA[1] ), // .hps_io_sdio_inst_D1 .hps_0_hps_io_hps_io_sdio_inst_CLK ( HPS_SD_CLK ), // .hps_io_sdio_inst_CLK .hps_0_hps_io_hps_io_sdio_inst_D2 ( HPS_SD_DATA[2] ), // .hps_io_sdio_inst_D2 .hps_0_hps_io_hps_io_sdio_inst_D3 ( HPS_SD_DATA[3] ), // .hps_io_sdio_inst_D3 //HPS USB .hps_0_hps_io_hps_io_usb1_inst_D0 ( HPS_USB_DATA[0] ), // .hps_io_usb1_inst_D0 .hps_0_hps_io_hps_io_usb1_inst_D1 ( HPS_USB_DATA[1] ), // .hps_io_usb1_inst_D1 .hps_0_hps_io_hps_io_usb1_inst_D2 ( HPS_USB_DATA[2] ), // .hps_io_usb1_inst_D2 .hps_0_hps_io_hps_io_usb1_inst_D3 ( HPS_USB_DATA[3] ), // .hps_io_usb1_inst_D3 .hps_0_hps_io_hps_io_usb1_inst_D4 ( HPS_USB_DATA[4] ), // .hps_io_usb1_inst_D4 .hps_0_hps_io_hps_io_usb1_inst_D5 ( HPS_USB_DATA[5] ), // .hps_io_usb1_inst_D5 .hps_0_hps_io_hps_io_usb1_inst_D6 ( HPS_USB_DATA[6] ), // .hps_io_usb1_inst_D6 .hps_0_hps_io_hps_io_usb1_inst_D7 ( HPS_USB_DATA[7] ), // .hps_io_usb1_inst_D7 .hps_0_hps_io_hps_io_usb1_inst_CLK ( HPS_USB_CLKOUT ), // .hps_io_usb1_inst_CLK .hps_0_hps_io_hps_io_usb1_inst_STP ( HPS_USB_STP ), // .hps_io_usb1_inst_STP .hps_0_hps_io_hps_io_usb1_inst_DIR ( HPS_USB_DIR ), // .hps_io_usb1_inst_DIR .hps_0_hps_io_hps_io_usb1_inst_NXT ( HPS_USB_NXT ), // .hps_io_usb1_inst_NXT //HPS SPI .hps_0_hps_io_hps_io_spim1_inst_CLK ( HPS_SPIM_CLK ), // .hps_io_spim1_inst_CLK .hps_0_hps_io_hps_io_spim1_inst_MOSI ( HPS_SPIM_MOSI ), // .hps_io_spim1_inst_MOSI .hps_0_hps_io_hps_io_spim1_inst_MISO ( HPS_SPIM_MISO ), // .hps_io_spim1_inst_MISO .hps_0_hps_io_hps_io_spim1_inst_SS0 ( HPS_SPIM_SS ), // .hps_io_spim1_inst_SS0 //HPS UART .hps_0_hps_io_hps_io_uart0_inst_RX ( HPS_UART_RX ), // .hps_io_uart0_inst_RX .hps_0_hps_io_hps_io_uart0_inst_TX ( HPS_UART_TX ), // .hps_io_uart0_inst_TX //HPS I2C1 .hps_0_hps_io_hps_io_i2c0_inst_SDA ( HPS_I2C1_SDAT ), // .hps_io_i2c0_inst_SDA .hps_0_hps_io_hps_io_i2c0_inst_SCL ( HPS_I2C1_SCLK ), // .hps_io_i2c0_inst_SCL //HPS I2C2 .hps_0_hps_io_hps_io_i2c1_inst_SDA ( HPS_I2C2_SDAT ), // .hps_io_i2c1_inst_SDA .hps_0_hps_io_hps_io_i2c1_inst_SCL ( HPS_I2C2_SCLK ), // .hps_io_i2c1_inst_SCL //HPS GPIO .hps_0_hps_io_hps_io_gpio_inst_GPIO09 ( HPS_CONV_USB_N), // .hps_io_gpio_inst_GPIO09 .hps_0_hps_io_hps_io_gpio_inst_GPIO35 ( HPS_ENET_INT_N), // .hps_io_gpio_inst_GPIO35 .hps_0_hps_io_hps_io_gpio_inst_GPIO40 ( HPS_GPIO[0]), // .hps_io_gpio_inst_GPIO40 .hps_0_hps_io_hps_io_gpio_inst_GPIO41 ( HPS_GPIO[1]), // .hps_io_gpio_inst_GPIO41 .hps_0_hps_io_hps_io_gpio_inst_GPIO48 ( HPS_I2C_CONTROL), // .hps_io_gpio_inst_GPIO48 .hps_0_hps_io_hps_io_gpio_inst_GPIO53 ( HPS_LED), // .hps_io_gpio_inst_GPIO53 .hps_0_hps_io_hps_io_gpio_inst_GPIO54 ( HPS_KEY), // .hps_io_gpio_inst_GPIO54 .hps_0_hps_io_hps_io_gpio_inst_GPIO61 ( HPS_GSENSOR_INT), // .hps_io_gpio_inst_GPIO61 //FPGA soft GPIO .dipsw_pio_external_connection_export ( SW ), // dipsw_pio_external_connection.export //HPS reset output .hps_0_h2f_reset_reset_n (hps_fpga_reset_n), // hps_0_h2f_reset.reset_n ); endmodule 

  打开tools->tcl script,选择hps_sdram_p0_assignments.tcl进行引脚分配

HPS基本概念及其设计

 

可以看到引脚已经分配成功

HPS基本概念及其设计

 点击编译生成.sof文件,接着连接FPGA上电点击HPS基本概念及其设计将生成的文件烧写进去即可。

 HPS基本概念及其设计

 

5、验证FPGA部分组件

因为此系统是Qsys生成的,含有jtag to avammbridge,所以可以用Qsys的System Console完成初步的验证工作。System Console通过jtag和qsys avmm及连接的components进行数据通信,这一般通过使用tcl脚本命令完成。

打开Qsys并打开之前生成的.qsys文件,选择Tools->System Console,打开系统控制台,如下图所示

HPS基本概念及其设计

选择File-> Execute Script,弹出如下窗口,这里选择不创建

HPS基本概念及其设计

定位到
<你的路径>
/DE1_SOC/GHRD,选择test_led.tcl打开

HPS基本概念及其设计

可以看到脚本文件已经成功执行。

HPS基本概念及其设计

开发板上,可以看到LEDR0~9依次循环点亮。

HPS基本概念及其设计

HPS基本概念及其设计

HPS基本概念及其设计

同样的方法执行test_key&led.tcl脚本

HPS基本概念及其设计

HPS基本概念及其设计

实验现象如下:

HPS基本概念及其设计

 HPS基本概念及其设计

 

参考资料

altera官方培训文档及资料

转载于:https://www.cnblogs.com/noticeable/p/9378394.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204571.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:01
下一篇 2026年3月19日 下午8:02


相关推荐

  • 嵌入式学习视频「建议收藏」

    嵌入式学习视频「建议收藏」 http://www.verycd.com/topics/250252/

    2022年5月27日
    40
  • c++中this指针的用法详解

    c++中this指针的用法详解为什么引入this指针?   最简单的应用场景就是:当我们在类中定义了一个变量,同时在类成员函数中定义了同一变量时,也就是说变量名重复时,但是我们想使用类中定义的变量,这个时候我们该怎么办呢?这个时候就是this指针大显身手的时候了。为此我们引入this指针的概念。1.this指针的用处:  一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this…

    2022年5月13日
    53
  • arrays.sort排序_js数组排序方法sort

    arrays.sort排序_js数组排序方法sortArrays.sort默认是升序,如果我们需要降序排列数组?Arrays.sort(distances);——升序Arrays.sort(distances,Collections.reverseOrder());——降序再说说Collections集合类,用来排序集合的Collections.sort(list)——升序Collections.reverse(list…

    2022年8月12日
    11
  • Div+CSS – 简单布局

    Div+CSS – 简单布局Div+CSS – 简单布局

    2022年4月22日
    48
  • 短视频创作的技巧是什么_短图文创作特点

    短视频创作的技巧是什么_短图文创作特点现在短视频越来越受到大众的喜爱,大概现在每个人坐车休假吃饭都在拿着手机刷着短视频,可见现在短视频对于现在的人来说还是挺普遍的,那么很多人都想从事短视频行业应该如何去进行创作呢,下面就和大家分享平时我会用到的一些小技巧。构思框架在做短视频的时候一定不要想着能够一夜爆火,当然如果你的作品足够优质,那也不排除这样的可能,首先需要你先考虑的是各种因素,主题、定位和内容连贯性,还有视觉效果。在确定主题后,要做好计划,如拍摄方向、表达形式。时间一定要把握住短视频的时长,因为现在短视频推送都是讲究一个完播

    2022年10月5日
    5
  • EOS是什么_电脑EOS是什么

    EOS是什么_电脑EOS是什么EOS是什么

    2022年4月21日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号