精华内容
下载资源
问答
  • FPGA SOC
    千次阅读
    2022-03-31 11:47:32

    学习主要参考https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide
    本次学习需要在Linux系统下进行,Windows下的Embedded_Command_Shell终端不支持。
    linux系统版本:unbuntu16.04 64位系统

    下载相关工具

    交叉编译工具

    在这里可以下载交叉编译工具
    https://rocketboards.org/foswiki/pub/Documentation/EmbeddedLinuxBeginnerSGuide/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz?t=1648696246
    然后在终端配置环境变量

    gedit ~/.bashrc 
    #在最后写入如下内容:
    export CROSS_COMPILE=/{your path}/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-
    #完成之后使配置有效
    source ~/.bashrc 
    

    u-boot

    使用git下载altera提供的u-boot。如果没有git,输入sudo apt-get install git进行安装,之后再执行以下命令。

    git clone https://github.com/altera-opensource/u-boot-socfpga.git
    cd u-boot-socfpga
    

    之后可以通过下面指令查看版本:

    git tag -l rel*
    git tag -l ACDS*
    

    这里使用官方提供的早期的版本,因为当前的最新版本不一定兼容前面下载的交叉编译工具。如果想尝试最新版本,最好去下载6.0以后的交叉编译工具。

    git checkout rel_socfpga_v2013.01.01_15.09.01_pr
    

    执行以下指令删除相关文件

    make mrproper
    

    设置cyclone V系列芯片,并编译:

    make socfpga_cyclone5_config
    make
    

    此时会提示错误

    /bin/bash: /home/dyq2/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc: No such file or directory
    /bin/bash: /home/dyq2/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc: No such file or directory
    dirname: missing operand
    Try 'dirname --help' for more information.
    /bin/bash: /home/dyq2/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc: No such file or directory
    /bin/bash: /home/dyq2/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-ld: No such file or directory
    /home/dyq2/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc -DDO_DEPS_ONLY \
    	-g  -Os   -fno-common -ffixed-r8 -msoft-float  -I/home/dyq2/u-boot-socfpga/board/altera/socfpga -I/home/dyq2/u-boot-socfpga/board/altera/socfpga/sdram -D__KERNEL__ -I/home/dyq2/u-boot-socfpga/include -fno-builtin -ffreestanding -nostdinc -isystem  -pipe  -DCONFIG_ARM -D__ARM__    -march=armv5 -Wall -Wstrict-prototypes       \
    	-o lib/asm-offsets.s lib/asm-offsets.c -c -S
    /bin/bash: /home/dyq2/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc: No such file or directory
    Makefile:701: recipe for target 'lib/asm-offsets.s' failed
    make: *** [lib/asm-offsets.s] Error 127
    

    参考:
    https://blog.csdn.net/x13163303344/article/details/109522684
    主要是因为当前系统为64位,没有32位的兼用包。
    安装:

    sudo apt-get install lib32ncurses5 lib32z1
    sudo apt-get install lib32stdc++6
    

    安装之后重启一下系统,重新设置cyclone V系列芯片再进行make即可完成u-boot编译。
    最后会生成一个u-boot.img文件。可以看出,这与前面生成predloader时勾选FAT_SUPPORT有关。

    然后把官方给的boot脚本复制过来进行编译:

    echo -- Programming FPGA --
    fatload mmc 0:1 $fpgadata soc_system.rbf;
    fpga load 0 $fpgadata $filesize;
    run bridge_enable_handoff;
    
    echo -- Setting Env Variables --
    setenv fdtimage soc_system.dtb;
    setenv mmcroot /dev/mmcblk0p2;
    setenv mmcload 'mmc rescan;${mmcloadcmd} mmc 0:${mmcloadpart} ${loadaddr} ${bootimage};${mmcloadcmd} mmc 0:${mmcloadpart} ${fdtaddr} ${fdtimage};';
    setenv mmcboot 'setenv bootargs console=ttyS0,115200 root=${mmcroot} rw rootwait; bootz ${loadaddr} - ${fdtaddr}';
    
    run mmcload;
    run mmcboot;
    

    需要先安装一些工具才能编译该脚本:

     sudo apt-get install uboot-mkimage
     sudo apt-get install u-boot-tools
    mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Boot Script Name" -d boot.script u-boot.scr
    

    最后生成u-boot.scr文件。

    更多相关内容
  • FPGA SoC通过融合FPGA和ASIC两者的元件,跨越了灵活性和性能之间的界限。但随着它们进入高安全性、任务关键型市场,它们也面临着与标准SoC相同的问题,包括在日益复杂的器件中快速传输越来越多的数据,以及在验证和...
  • soc.rar_FPGA soc_SOC

    2022-09-24 14:31:49
    SOC中的典型模块,是SOC必备的模块,可用于FPGA,嵌入式开发必备代码。
  • 本文介绍了在进行FPGA设计,特别是SOC设计时,为了保证顺利移植,重新利用原有程序,而应该注意的一些基本问题和方法,本文由xilinx提供,但对所有的FPGA的使用者都有非常好的借鉴意义。
  • 以前的高性能中央处理器(CPU)被认为是适合这些应用的组件,但车厂须要综合考虑运算性能和低功率消耗,这促使工程师转向采用现场可编程门阵列(FPGA)组件。 ADAS须要满足特殊的功能安全要求。在2011年,ISO发布针对...
  • MC1是一款基于软微处理器的紧凑型计算机,专用于FPGA :。 该架构是可移植的,并且可配置为适合各种FPGA器件和板卡。建筑学 该架构基于紧密集成且灵活的视频子系统,该子系统与CPU共享内存。 共享视频RAM(VRAM)...
  • SOC-GPS-数据解析器 解析GPS数据以获取FPGA SOC
  • 学习主要参考https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide 本学习以altera cyclone V系列FPGA为例。本例程设计一个自定义PIO接口,并将其添加到GHRD工程中。该工程可在上面的链接的...

    学习主要参考https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide
    本学习以altera cyclone V系列FPGA为例。本例程设计一个自定义PIO接口,并将其添加到GHRD工程中。该工程可在上面的链接的最底下下载到。

    1.在qsys工具上设计自定义IP(Avalon接口)

    1.1.设计操作

    1.在qsys系统中点击New Component…新建一个组件
    在这里插入图片描述
    2.如下图,可设置组件类型、rtl文件、参数、接口信号等。
    在这里插入图片描述
    注意:Group这一项需要另外设置,你可以选择quartus自带的IP组,也可以直接在窗口编写自己的,如下图编写成自己的:dyq_component
    在这里插入图片描述

    3.编写一个avalon接口的逻辑
    顶层:

    module dyq_pio_top
    #(parameter PIO_WIDTH = 7)
    (
    	input 	 		clk,
    	input	 		reset,
    	input 	[2:0] 	avs_s0_address,//Avalon读写地址
    	input	 		avs_s0_read,//Avalon读请求
    	input	 		avs_s0_write,//Avalon写请求
    	output	[31:0] 	avs_s0_readdata,//Avalon读数据总线
    	input 	[31:0]	avs_s0_writedata,//Avalon写数据总线
    	inout	[PIO_WIDTH-1:0]	pio //外部控制LED灯
    	);
    
    wire [PIO_WIDTH-1:0] o_pio,i_pio;
    
    
    assign pio = avs_s0_read ? 7'dz : o_pio; //hps读pio数据时,三态门高阻态
    assign i_pio = avs_s0_read ? pio : 7'dz; //hps写pio端口时,三态门做输出
    //内部例化
    dyq_pio #(.PIO_WIDTH(PIO_WIDTH) )
    	u_pio(
    	.clk(clk),
    	.reset(reset),
    	.avs_s0_address(avs_s0_address),
    	.avs_s0_read(avs_s0_read),
    	.avs_s0_write(avs_s0_write),
    	.avs_s0_readdata(avs_s0_readdata),
    	.avs_s0_writedata(avs_s0_writedata),
    	.o_pio(o_pio),
    	.i_pio(i_pio)
    	);
    endmodule
    
    

    内部模块:

    module dyq_pio
    #(parameter PIO_WIDTH = 7)
    (
    	input 	 		clk,
    	input	 		reset,
    	input 	[2:0] 	avs_s0_address,
    	input	 		avs_s0_read,
    	input	 		avs_s0_write,
    	output	reg [31:0] 	avs_s0_readdata,
    	input 	[31:0]	avs_s0_writedata,
    	input		[PIO_WIDTH-1:0] i_pio,//做输入
    	output	reg [PIO_WIDTH-1:0]	o_pio//做输出
    	);
    
    //Avalon读控制逻辑
    always@(*) begin
    	if (avs_s0_read) begin
    		case(avs_s0_address)
    			3'd1 : avs_s0_readdata = {24'b0,i_pio};//将LED地址设置为0x01
    			default: avs_s0_readdata = 32'dx;
    		endcase
    	end
    	else begin
    		avs_s0_readdata = 32'dx;
    	end
    end
    //Avalon写控制逻辑
    always @(posedge clk) begin
    	if (reset) begin
    		// reset
    		o_pio <= 7'd0;
    	end
    	else if (avs_s0_write) begin
    		case(avs_s0_address)
    			3'd2 : o_pio <= avs_s0_writedata;//将pio写入地址设置为0x02
    			default : o_pio <= o_pio;
    		endcase
    	end
    end
    endmodule
    

    这里的pio控制的写地址设置为2,不是0,后面软件测试时需要注意
    4.添加逻辑文件到组件。点击 Files >> Add File… 添加对应的文件模块,然后将dyq_pio_top.v设置为顶层文件。最后点击Analyze Synthesis Files对Verilog代码进行综合.
    在这里插入图片描述
    在这里插入图片描述
    5. 分析之后如下图,表示成功。如果有报错,往下看。
    在这里插入图片描述
    6.如下图在signals&interfaces里面,选中pio这一项,按图中所示进行设置。主要修改的有将端口类型设置为Conduit,也就是可被外部连接。Name随便改,也可以改成我的这样的。
    在这里插入图片描述
    7.选中avalone接口部分,将复位信号选择reset(就是上面的reset的名字)。基本就可以解决掉所有报错了。
    在这里插入图片描述

    8.点击Finish 保存,然后在工程里面就会生成一个_hw.tcl脚本文件该文件就是描述我们的自定义IP的。
    在这里插入图片描述

    1.2.设置自定义IP可被设备树生成器识别

    在该工程的工程目录下找到并打开生成的_hw.tcl文件(dyq_pio_hw.tcl),添加如下代码;

    # 
    # module assignments
    # 
    set_module_assignment embeddedsw.dts.compatible " dev,dyq-pio"
    #按照前面设置的自定义IP Group名称进行定义,这里定义成dyq_component
    set_module_assignment embeddedsw.dts.group dyq_component 
    set_module_assignment embeddedsw.dts.vendor dsa
    

    保存之后重新打开自定义的组件编辑,重新构建一次即可。
    详细了解学习可去官方参考:https://rocketboards.org/foswiki/Documentation/DeviceTreeGenerator140#Adding_Device_Tree_Generation_Support_to_an_IP_Block

    2.添加使用自定义IP到GHRD工程

    1.双击自定义IP,点击finish就成功加入qsys系统了。
    在这里插入图片描述
    2.对于连线,直接照抄该工程的其他PIO的连接方式就行。(对于avalon接口,需要通过桥接的方式接到HPS系统外设)

    3.将PIO端口引到外部
    在这里插入图片描述
    4.点击下图地方,最后点击generate生成qsys系统即可
    在这里插入图片描述

    3.修改顶层代码

    如下图把这个新生成的端口复制下来。
    在这里插入图片描述
    打开GHRD顶层v文件,把原先的led_pio端口的信号删掉,例化自己新增的端口,链接到这个位置。目的是可以在后续检设计软件检测自定义IP是否能够正常使用。在这里插入图片描述
    在这里插入图片描述

    4.硬件编译

    1.直接点击编译即可,然后进入output文件夹,双击sof_to_rbf.bat文件,将sof文件转换成rbf文件。
    2.在EDS终端的工程目录下执行generate_hps_qsys_header.sh以生成新的硬件头文件hps_0.h

    展开全文
  • 走进FPGA SoC设计—京微雅格FPGA芯片及开发板使用剖析
  • Altera FPGA SoC搭建步骤

    千次阅读 2018-09-19 15:17:37
    Altera SoC 官方搭建指南: https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide  官方文档中除了讲解搭建方法之外,还有很多原理性的介绍,感兴趣的朋友可以自己阅读。   准备工作...

    转至https://www.cnblogs.com/li--chao/p/7294306.html

    Altera SoC 官方搭建指南:

    https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide

     官方文档中除了讲解搭建方法之外,还有很多原理性的介绍,感兴趣的朋友可以自己阅读。

     

    准备工作:

    1. 安装Altera官方提供的IDE (Quartus 和 SoC EDS), 不需要安装DS-5. 文档中的工作是基于v15.0版本

    2. 一块FPGA SoC开发板。官方Guide中的硬件平台是友晶系列的DE0-Nano-SoC,但对大多Altera板子都适用

    3. 一台Linux主机

    4. 一张SD卡

    5. 网络可以访问github

     

    搭建步骤:

    1. 生成Preloader

    2.配置和编译Bootloader (U-Boot)

    3. 生成和编译Device Tree

    4. 测试系统(一)

    5. 配置和编译Linux Kernel

    6. 生成Root Filesystem

    7. 测试系统(二)

     

    搭建方法:

    1. 生成Preloader

    tar -xvzf atlas_linux_ghrd.tar.gz
    • 运行EDS配置环境变量的脚本
    <path-to-soceds-tools>/embedded/embedded_command_shell.sh
    • 运行BSP Editor工具:
    cd atlas_linux_ghrd
    bsp-editor &

    将弹出如下窗口:

     

    • 配置BSP Editor: 
      • File→New HPS BSP
      • 在弹出的窗口中,点击"Preloader settings directory"右侧的"..."按钮,选择“atlas_linux_ghrd/hps_isw_handoff/soc_system_hps_0”,然后点击Open。完成后的界面如下图,点击确定:

      • 在生成的窗口中,选中"FAT_SUPPORT",其他的使用默认,结果如下图:

      • 点击Generate,正常结束后点击Exit退出。

     

    • 编译Preloader.
    cd software/spl_bsp ; ls
    make

    编译结束后将生成如下文件:

      • 新目录 - “uboot-socfpga”
      • 新文件 - “preloader-mkpimage.bin”

     

    2.配置和编译Bootloader (U-Boot)

    • 获取U-Boot编译工具: Linaro GCC toolchain for the ARMv7 instruction set,并配置其相关的环境变量
    cd ..
    wget https://rocketboards.org/foswiki/pub/Documentation/EmbeddedLinuxBeginnerSGuide/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
    tar -xvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
    export CROSS_COMPILE=$PWD/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-
    •  获取U-Boot源代码,查看并切换至相应的tag:
    git clone https://github.com/altera-opensource/u-boot-socfpga.git
    cd u-boot-socfpga
    
    git tag -l rel*
    git tag -l ACDS*
    git checkout rel_socfpga_v2013.01.01_15.09.01_pr

     

    • Clean U-Boot目录
    make mrproper

     

    • 编译U-Boot
    make socfpga_cyclone5_config
    make

     

    • 创建boot脚本。在software目录下,新建boot.script文件,并写入如下内容:
    echo -- Programming FPGA --
    fatload mmc 0:1 $fpgadata soc_system.rbf;
    fpga load 0 $fpgadata $filesize;
    run bridge_enable_handoff;
    
    echo -- Setting Env Variables --
    setenv fdtimage soc_system.dtb;
    setenv mmcroot /dev/mmcblk0p2;
    setenv mmcload 'mmc rescan;${mmcloadcmd} mmc 0:${mmcloadpart} ${loadaddr} ${bootimage};${mmcloadcmd} mmc 0:${mmcloadpart} ${fdtaddr} ${fdtimage};';
    setenv mmcboot 'setenv bootargs console=ttyS0,115200 root=${mmcroot} rw rootwait; bootz ${loadaddr} - ${fdtaddr}';
    
    run mmcload;
    run mmcboot;

     

    • 编译boot脚本
    mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Boot Script Name" -d boot.script u-boot.scr

     编译结束后,将生成"u-boot.scr"文件

     

    3. 生成和编译Device Tree

    • 生成Device Tree所需的board xml文件已经存在了。在"atlas_linux_ghrd"目录下,运行如下命令:
    sopc2dts --input soc_system.sopcinfo\ 
      --output soc_system.dts\ 
      --type dts\ 
      --board soc_system_board_info.xml\ 
      --board hps_common_board_info.xml\ 
      --bridge-removal all\ 
      --clocks

     

     

    • 编译Device Tree源代码;
    dtc -I dts -O dtb -o soc_system.dtb soc_system.dts

    编译结束后,将生成二进制文件:"soc_system.dtb"。

     

    4. 测试系统(一)

    Preloader和U-Boot已经生成。我们首先,以测试preloader和bootloader编译和烧写成功。

    • 制作SD Card image, 生成空值组成的sdcard.img
    sudo dd if=/dev/zero of=sdcard.img bs=512M count=1

     

    • 虚拟回环设备(loop device),并获取回环设备名。红色的X表示不同的环境下可能会有不同,在我的环境下,X=0,即我得到的结果是"/dev/loop0"。
    sudo losetup –-show –f sdcard.img
    /dev/loopX

     

    • 使用fdisk命令对该回环设备关联的sdcard.img进行分区
    sudo fdisk /dev/loopX
    -- fdisk welcome message –
    
    Command (m for help):

     

    首先确认,当前sd卡上没有分区:

     

    创建分区3,用来存储preloader image,相应的配置信息如下:

    转换分区类型为'a2'

     

    创建分区2,用来存放Linux root文件系统,相应的配置信息如下,且不需要进行分区类型转换:

    创建分区1,用来存放启动文件:相应的配置信息如下:

    转换分区类型为FAT:

    最终的分区信息如下图:

    确认无误后,使用"w"命令退出,忽略下图中的错误信息。

     

    •  Kernel对上述改动尚未生效,正如上图中最后一样的提示。Reboot,或者使用"partprobe"命令,使上述改动生效。
    sudo partprobe /dev/loopX
    • 生成文件系统:

    preloader写入分区3:

    sudo dd if=software/spl_bsp/preloader-mkpimage.bin of=/dev/loopXp3 bs=64k seek=0

     

     格式化分区1,成为FAT文件系统:

    sudo mkfs –t vfat /dev/loopXp1

     

    格式化分区2,成为ext4文件系统: 

    sudo mkfs.ext4 /dev/loopXp2

     

     挂载分区1(FAT文件系统),并将拷入之前生成的"u-boot.img", "u-boot.scr"和FPGA的烧写文件"soc_system.rbf".

    mkdir temp_mount
    sudo mount /dev/loopXp1 ./temp_mount
    sudo cp software/u-boot-socfpga/u-boot.img software/u-boot.scr soc_system.dtb soc_system.rbf temp_mount
    sync
    sudo umount temp_mount

     

    •  烧写SD卡
    sudo dd if=sdcard.img of=/dev/XXX bs=2048
    sync

     

    •  将SD卡插入FPGA,开机,通过串口调试工具如minicom进行调试,结果是SoC的preloader和bootloader正常启动,但因为我们还没有制作linux kernel和root filesystem, 系统提示如下错误:

     

    5. 配置和编译Linux Kernel

    • 获取Linux Kernel源代码,并切换到相应的release:
    cd software
    git clone https://github.com/altera-opensource/linux-socfpga.git
    cd linux-socfpga
    git tag –l rel*
    git checkout rel_socfpga-4.1_15.09.01_pr

     

    • 配置Linux Kernel,运行环境变量配置脚本,确保新打开的shell的环境变量配置正确:
    export CROSS_COMPILE=$PWD/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-
    <path-to-soceds-tools>/embedded/embedded_command_shell.sh
    make ARCH=arm socfpga_defconfig

     

    •  安装图形化的kernel配置工具:
    sudo apt-get install libncurses5-dev
    make ARCH=arm menuconfig
    •  在打开的图形界面里,需要改动2个地方。1. 主菜单进入“General Setup”,取消 “Automatically append version information to the version string”  2. 主菜单进入“Enable the block layer”,选中 “Support for large (2TB+) block devices and files”。然后save到默认的.config文件。
    • 编译Linux Kernel (zImage): 
    make ARCH=arm LOCALVERSION= zImage

     注意,"LOCALVERSION=" 后面是空格

     

    6. 生成Root Filesystem

    • 运行环境变量配置脚本,确保新打开的shell的环境变量配置正确:
    export CROSS_COMPILE=$PWD/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-
    
    <path-to-soceds-tools>/embedded/embedded_command_shell.sh

     

    • 获取buildroot代码 (Guide中给的地址已经打不开了,自己搜索了buildroot在github上的代码)
    cd software
    git clone https://github.com/buildroot/buildroot

     

    • 切换到兼容Linaro 2014.09 toolchain的版本:
    cd buildroot
    git checkout 2015.08.x
    cd ..

     

    • 打开配置窗口:
    make -C buildroot ARCH=ARM BR2_TOOLCHAIN_EXTERNAL_PATH=$(pwd)/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux nconfig
    • 配置Target Options:
      • 在"Target Architecture"选项中,选择"ARM (little endian)"
      • 在"Target Architecture variant"选项中,选中 "cortex-A9"
      • 在"Target ABI"选项中, 选中"EABIhf"
      • Enable “NEON SIMD extension support” 
      • 在“Floating point strategy”选项中, 选中"NEON"
      •  “Target Binary Format” and “ARM Instruction set” 选项保持默认。
    • 配置Toolchain:
      • 在“Toolchain type”选项中, 选中 “External toolchain”
      • 确保  “Toolchain” 选项中,选中 “Linaro ARM 2014.09”. 
      • 在“Toolchain origin”选项中, 选中 “Pre-installed toolchain”
      • 忽略"toolchain path"
      • Enable “copy gdb server to the Target”
      • 其他选项保持默认
    • 配置System configuration:
      • 配置hostname
      • 配置root password
    • 配置Kernel:
      • 去掉“Linux Kernel” 选项的选中状态
    • 配置Target packages 
      • 在 “Debugging, profiling and benchmark”选项中, 拖动滚动条到底部并选中 “valgrind”
    • 配置结束,F6保存并退出。
    • 配置Busy Box
    make –C buildroot busybox-menuconfig

    在打开的配置窗口中,不做改变保存即可。

    • 编译Root Filesystem:
    make -C buildroot BR2_TOOLCHAIN_EXTERNAL_PATH=$(pwd)/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux all

     

    7. 测试系统2

    将编译好的Linux Kernel 拷入SD,并解压Root Filesystem。之后开机登陆root。

    sudo cp linux-socfpga/arch/arm/boot/zImage <mount point that lsblk tells you, remember the FAT partition is the 256M one>
    sudo tar –xvf buildroot/output/images/rootfs.tar –C <mount point of your ext4 partition, it’s the 254M one>
    sync

     

     

    备份:

    1. 一切工作开始前,调整SoC的MSEL开关,至Fast Passive Parallel x16模式,

    2. GHRD代表 Golden Hardware Reference Design,它是包含了很多基本功能模块的硬件设计,我们可以用它作为设计参考。

    3. 在生成preloader时,我碰到一个找不到二进制文件的错误,但实际上需要的二进制文件已经存在了。问题的原因是编译出的二进制文件是32位的文件,而我的主机用的是64位的Linux。安装32位兼容库即可解决:

    sudo apt-get install lib32ncurses5

    4. 在生成bootloader时,缺少库文件libz.so.1和工具包,安装之:

    sudo apt-get install lib32z1
    sudo apt-get install u-boot-tools
    展开全文
  • 在GHRD工程的基础上,简单的修改PIO配置,将SOC的开发过程学习一遍。 学习主要参考的是小梅哥的SOC开发文档。

    1.GHRD工程简介

    GHRD的全称为Golden Hardware Reference Design,翻译过来就是黄金硬件参考设计。

    1.1.工程所包含组件

    • ARM Cortex™-A9 MPCore HPS
      在这里插入图片描述
      其中f2h_axi代表FPGA端到HPS端的通信总线,h2f_axi代表HPS到FPGA端的通信总线,h2f_lw_axi表示低速的通信。

    • Four user push-button inputs
      在这里插入图片描述

    • Ten user DIP switch inputs
      在这里插入图片描述

    • Ten user I/O for LED outputs
      在这里插入图片描述

    • 64KB of on-chip memory
      在这里插入图片描述

    • JTAG to Avalon master bridges
      在这里插入图片描述

    • Interrupt capturer for use with System Console
      在这里插入图片描述

    • System ID
      在这里插入图片描述
      此外还有3个组件,暂时还不知道其作用是什么。在这里插入图片描述
      在这里插入图片描述
      mm_bridge_0应该是内存映射控制。

    2.简单开发

    开发主要分为硬件开发、系统更新和软件开发。通过硬件开发生成sof文件,最后转换成rbf文件用于SD卡配置HPS系统。系统更新主要有u-boot和preloader以及设备树的更新。软件开发则是C语音开发控制PIO驱动LED灯流水。

    2.1.硬件编译

    2.1.1.工程准备

    首先拷贝一份该工程,放到自己做实验的文件夹中。
    双击打开qpf文件。
    在这里插入图片描述
    然后在tool中打开qsys,选择本工程的qsys文件。

    2.1.2.修改led_pio配置

    双击选中系统设置好的led_pio这个IP核,在右侧会出现这个IP的属性面板。本次实验将位宽由10位修改为5位。
    在这里插入图片描述
    然后点击Assign Base Addresses重新分配一下外设地址。
    在这里插入图片描述
    在这里插入图片描述
    最后直接点击Generate -> Generate…生成新的qsys文件(也就是硬件配置文件)。
    然后关闭qsys。

    2.1.3.修改顶层文件

    因为只修改了PIO的位宽,所以HPS的接口并没有变,只是LED_PIO接口位宽变为了5。因此只需要修改顶层的这个接口,从10位改为5位。
    在这里插入图片描述
    找到这个信号的定义,改成5位位宽即可
    在这里插入图片描述
    再找到与这个信号有关的信号,也进行一定修改,这里看个人想法改就行。
    由28位改为24位
    在这里插入图片描述
    将LED灯的接口由[9:1]改为[9:5]
    在这里插入图片描述
    将剩下的led进行心跳闪烁(原本只有一个LED心跳闪烁)
    在这里插入图片描述
    之后点击编译即可生成sof文件。

    2.1.4.将sof文件转换为压缩后的rbf文件

    进入工程中的output文件夹,双击sof_to_rbf.bat文件就能够自动生成该文件。
    在这里插入图片描述
    其实到这里生成完rbf文件之后,就可以直接进入2.3.软件开发部分了。2.2只是为了学习一下系统更新是怎样的过程。

    2.2.系统更新

    2.2.1.制作Preloader Image和u-boot

    首先双击该bat文件,打开DES控制台
    首先打开DES

    2.2.1.1使用BSP-editor生成preloader

    1.输入:

    bsp-editor
    

    在这里插入图片描述
    2.左上角点击 File ->New HPS BSP…
    在这里插入图片描述
    3.打开之后是这样的界面
    在这里插入图片描述
    4.设置路径选择该工程下面的hps_isw_handoff\soc_system_hps_0,点击ok
    在这里插入图片描述
    5.之后点击generate生成即可,完成之后点击exit。
    在这里插入图片描述
    6.然后工程文件夹下面会有一个 software 的文件夹,里面有一个 spl_bsp 文件夹。
    在这里插入图片描述

    2.2.1.2.编译 preloader 和 uboot

    回到之前的控制台如下命令,进入生成的这个文件夹。

    cd E:/SOC_study/altera_soc/DE10_Standard_GHRD/software/spl_bsp
    

    然后输入

    make uboot
    

    整个过程很慢,我大概20多分钟,中间要记得按几次回车,不然会不动了。
    在这里插入图片描述
    编译完成后在 software\preloader\uboot-socfpga 目录下会找到 u-boot.img 文
    件,在 software\preloader\uboot-socfpga\spl 下会找到 u-boot- spi.bin

    2.2.1.3.生成Preloader Image

    将上面说的 u-boot- spi.bin 和u-boot.img(这个文件下一步才需要)文件复制,粘贴到向上两层的 preloader 目录中
    然后将控制台工作目录转到preloader中,输入:

    mkpimage –hv 0 -o preloader.img u-boot-spl.bin
    

    在这里插入图片描述
    然后会产生一个 preloader.img 文件
    在这里插入图片描述

    2.2.2.更新uboot和preloader

    在此之前需要将做好的SD卡插到读卡器,然后再插到电脑上,这里我的U盘是F盘
    在这里插入图片描述

    输入:

    alt-boot-disk-util -p preloader.img -b u-boot.img -a write -d F
    

    提示失败
    在这里插入图片描述
    换成在Linux上更新
    参考: 在SoCEDS环境下编译和更新preloader和uboot程序的方法.
    最终完成uboot更新,在终端上可见最新时间为(Mar 212021 - 00:13:51)
    在这里插入图片描述

    2.2.3.设备树更新

    首先确认工程文件当中是否有soc_system.sopcinfohps_common_board_info.xml以及soc_system_board_info.xml文件。
    根据后两个文件可以生成dts文件。
    1.打开控制台
    将当前目录调整到工程目录下。
    输入

    sopc2dts --input soc_system.sopcinfo --output soc_system.dts --board soc_system_board_info.xml --board hps_clock_info .xml --bridge-removal all
    

    生成dts文件。
    再输入

    dtc -I dts -O dtb -o soc_system.dtb soc_system.dts
    

    生成dtb文件。
    在这里插入图片描述
    dtb文件就是设备树文件,为一个二进制文件。
    实际上工程目录文件夹下面还有一个Makefile文件,可以直接输入

    make dts
    make dtb
    

    生成设备树文件。
    生成之后要把设备树文件复制到SD卡中,替换掉原来的设备树文件。

    2.3.软件C开发

    2.3.1.生成HPS硬件外设的头文件

    找到我们安装的EDS路径,双击打开下图标记的bat文件,启动控制台。
    在这里插入图片描述
    输入控制台命令:
    1.首先将工作路径调整到GHRD工程路径下。

    cd E:/SOC_study/altera_soc/DE10_Standard_GHRD
    

    2.我们需要生成一个HPS头文件,该头文件是定义FPGA端IP对应到HPS上的物理地址等信息的。在工程下面有个generate_hps_qsys_header.sh文件。
    在这里插入图片描述
    打开是这样的内容,功能是根据qsys生成的sopcinfo硬件数据文件(该硬件信息文件放在工程目录下,如果不是,需要修改路径),生成头文件,该头文件命名为hps_o.h

    #!/bin/sh
    sopc-create-header-files \
    "./soc_system.sopcinfo" \
    --single hps_0.h \
    --module hps_0
    

    操作过程:

    ./generate_hps_qsys_header.sh
    

    在这里插入图片描述
    生成之后打开该头文件,可以看到其硬件信息,如图,为led在hps中的相关信息,主要关注其物理地址映射LED_PIO_BASE 为0x100,LED_PIO_DATA_WIDTH 为数据位宽5,也就是该工程定义的LED为5位pio接口。
    在这里插入图片描述

    2.3.2.编译c文件

    首先从例程文件夹拿过来一个叫HPS_FPGA_LED的工程放到我们的实验工程下面,这是是控制LED实现流水灯的代码,内部有3个文件,其中hps_0.h我们需要用刚才生成的硬件的头文件替换掉。
    在这里插入图片描述
    这里先进入HPS_FPGA_LED文件夹中,EDS控制台输入:

    cd HPS_FPGA_LED
    

    直接make即可生成可执行文件
    在这里插入图片描述
    操作过程:
    在这里插入图片描述
    最后将HPS_FPGA_LED可执行文件直接复制到sd卡中。
    在这里插入图片描述

    2.4.跑程序测试系统

    将开发板上电,插上串口调试。
    终端输入操作:

    fdisk -l     #查看分区
    mount -t vfat /dev/mmcblk0p1 /mnt  #把mmcblk0p1分区挂载到mnt。
    cd /mnt       #进入mnt
    ls          #查看该目录下文件
    

    之后就可以执行刚才复制的可执行文件了。
    在这里插入图片描述

    展开全文
  • FPGA SOC 代码

    2015-01-21 17:14:38
    FPGA SOC 代码
  • 编者按:近年来,在终端应用转变,...但传统单纯的FPGA似乎不能满足多样化的需求,从而延伸出eFPGA和FPGA SoC这两个方向。新的嵌入式FPGA和业界一直在努力整合的FPGA SoC,谁会是未来的选择? eFPGA:冉冉升起...
  • 四月份标签的某些预处理要求生成非常耗费计算量的图像大小和... 通过将这些操作转移到FPGA架构,可以大大加快整个April tag 3D定位例程的速度。 可以在此处实时观看mag和theta处理的视频。 https://vimeo.com/518406224
  • 本文通过对基于ARM7的SOC系统的设计,介绍了一种Flash结构的FPGA器件及其片上系统的设计方法,进而给出了两种验证该片上系统准确性的方法,通过实际验证,该系统不仅能准确进行片外存储器的擦写,而且可以准确进行...
  • 然后save到默认的.config文件。在linux下使用git无法成功获取linux源码(因为资源太大了),在windows下访问此路径,在Tags下找到一个合适的历史版本,例如linux-socfpga-4.5.zip,复制到linux下解压。...
  • soc FPGA(一)

    2021-12-10 15:56:29
    基于小梅哥Altera SOC FPGA视频课程,基于Cyclone V SOC FPGA:https://www.bilibili.com/video/BV1dE411i7gN?from=search&seid=14910702332090064010&spm_id_from=333.337.0.0 背景知识扫盲 soc和sopc ...
  • 在上一次学习的基础上,添加uart 模块IP,,同时测试上次的自定义IP的读数据功能 1.硬件设计 1.1.添加uart 在IP Catalog中搜索uart选择下图的IP。 配置如下图:偶校验、8bit...soc_system例化部分 编译生sof文件再转
  • sopc2dts --input soc_system.sopcinfo --output soc_system.dts --type dts --board soc_system_board_info.xml --board hps_common_board_info.xml --bridge-removal all --clocks 打开该文件可以看到自定义的IP...
  • FPGA相关概念 FPGA与CPLD的区别: 正点原子开拓者 P32 FPGA 基于SRAM编程(任意次数),CPLD基于EEPROM或FLASH存储器编程 CPLD主体结构是与或阵列,FPGA是查找表+寄存器。查找表完成纯组合逻辑功能。 CPLD组合...
  • 浅谈FPGASoC,ASIC

    千次阅读 多人点赞 2020-12-24 21:22:38
    主要介绍FPGASoC,ASIC的一些基本概念 读完这篇文章,你将会学到FPGASoC,ASIC的含义,它们之间的异同点,以及它们分别都是做什么的,加深对它们的理解 声明: 文章主要参考知乎上两篇文章(小声逼逼,这才...
  • 搭建FPGA SOC系统(4)制作SDcard映像

    千次阅读 2022-03-31 12:03:21
    sudo cp /home/dyq/software/u-boot-socfpga/u-boot.img /home/dyq/software/u-boot-socfpga/u-boot.scr /home/dyq/software/soc_system.dtb /home/dyq/software/soc_system.rbf temp_mount 复制文件后,同步(确保...
  • SoC到SOPC、SoC FPGA ,异同优缺点的介绍及常见应用场景 目录由SoC到SOPC、SoC FPGA ,异同优缺点的介绍及常见应用场景说一说一、关于SoC二、关于SOPC1.概念2.优缺点三、关于SoC FPGA(Intel Cyclone V SoC FPGA)...
  • FPGA创建SoC如此容易

    千次阅读 2022-02-08 01:12:34
    FPGA创建SoC如此容易项目地址❝https://github.com/enjoy-digital/litex/wikiLiteX 框架为创建 FPGA 内核/SoC、探索各种数字设计...
  • 导读:Altera公司日前宣布,Stratix 10 FPGASoC试用设计软件即将供货。  与前一代高性能可编程器件相比,Stratix 10 FPGASoC客户设计的内核性能成功提高了两倍。Altera与几家早期试用客户在多个市场领域密切...
  • 搭建FPGA SOC系统(5)编译Linux内核

    千次阅读 2022-03-31 13:28:17
    需要注意几个选项(因为我们使用的是AlteraSOC是从Linux配置FPGA并与之交互所必需的。该菜单中还启用了MMC/SD/SDIO卡支持。如果没有这个功能,Linux将无法访问SD卡。 按两次退出键返回主菜单。在“File systems”下,...
  • SoC FPGA 的基本概念

    万次阅读 2019-01-07 19:37:05
    下面介绍一下关于SoC FPGA的基本概念和学习方法: SoC的定义多种多样,由于其内涵丰富、应用范围广,很难给出准确定义。一般说来, SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成...
  • 笔记:FPGA上实现最小soc系统 软件:quartus2+keil,硬件:JTAG/SW,usb转ttl,fpga下载线,10M50DAF484C7G — fpga max10系列 1.fpga硬件设计 1.1 debug可能出现的问题 1.2 pin脚连接 1.3 tcl文件 1.4 soc电路设计...
  • 本页介绍Golden System Reference Design(GSRD)用户手册使用的SD卡映像的布局,以及如何重新创建SD卡映像以及如何更新SD卡上的... soc_system.rbf FPGA configuration file FPGA配置文件 分区1

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,023
精华内容 3,609
关键字:

FPGA SOC