Menu Close

学生的若干问题解答——程序烧录,编译及断电启动

1. 烧录断电重启后仍然能运行的RISCV程序

*.coe文件,全称为coefficient(系数)文件,这里用于Xilinx Vivado配置初始化内存IP核的文件。*.bin文件全称为binary(二进制)文件,用于串口(UART,Universal Asynchronous Receiver/Transmitter)初始内存IP核配置。在此之前,通过JTAG对内存IP核进行编程是通过Freedom Studio生成*.elf文件完成。

通过JTAG使用*.elf文件,或是用*.bin文件通过UART都可以对CPU进行编程,但是两者都是挥发性的,在断电之后会丢失程序。然而使用*.coe文件直接对RAM进行内存初始化在断电重启后仍然能运行。用*.coe文件初始化RAM步骤如下:

  • 打开RISCV CPU代码,如图一所示,双击RAM IP核。点击 Other Options,勾选Memory Initialization下的Load Init File,然后在COE File一栏选择相应的*.coe文件,如图二所示。

初始化RAM

图一  RAM IP核位置

 

初始化RAM

图二 设置初始化RAM的*.coe文件

 

  • 进行工程的synthesisimplementation和对FLASH器件的配置等,生成*.mcs文件。将*.mcs文件成功编程到FPGA上的FLASH,在断电重启后,RISCV程序仍能运行。

 

 

2. 生成*.coe文件步骤

智芯融公司现有提供一个run.bat文件,进行对汇编语言源文件,C语言源文件,对象文件和库文件的编译,进而生成*.coe(Quartus 对应内存初始化文件为*.mif文件),*.bin,以及包含反汇编信息的fii.txt文件等。具体使用方式如下:

  • 打开Terminal,通过windows+R,如图三所示,再输入“cmd”,回车,打开窗口。

打开terminal

图三 打开Terminal

 

terminal

图四 Terminal

 

  • 找到asm_compile文件下的目录,如若不是Terminal显示的初始路径,在Terminal上换用当前的目录所在磁盘(“文件所在盘:”, 例如“E:”,大小写都可),如图五所示。
  • 复制asm_compile文件的路径,例如C:\Users\HW_PC\Desktop\asm_compile(注意尽量不要有中文路径),在Terminal上输入“cd 文件路径”,例如“cd C:\Users\HW_PC\Desktop\asm_compile”,如图六所示。

更换磁盘路径

图五 更换磁盘路径

 

更换路径

图六 更换路径

 

  • 选择目标工程,例如run_but(按键工程), 在terminal上输入“run run_but”, 即可生成相应的*.coe文件,如图七所示。如果Terminal出现“OK”,说明编译成功,如图八所示。如果出现错误,在编译自己的C源语言文件时,则可能需要进行调试代码。生成的文件可以在asm_compile目录下找到,如图九所示。

run_but

图七 run_but

 

run_but成功编译

图八 run_but成功编译

 

生成的文件

图九 生成的文件

 

除了用run.bat文件进行编译,还可以使用Freedom Studio图形用户界面进行编译工程(提供给已经知道怎样使用Freedom Studio的同学,不熟悉Freedom Studio的同学可以用run.bat的方法)。Freedom Studio由SiFive公司研发,基于行业标准Eclipse IDE,并且RISCV硬件板兼容。 此外,它还预先构建了RISCV GCC工具链(toolchain)和仿真器(emulator)。

要在Freedom Studio的平台上也编译生成*.coe(Quartus 对应内存初始化文件为*.mif文件),*.bin,以及包含反汇编信息的fii.txt文件等,操作步骤如下:

  • 找到Freedom Studio bin文件夹(如图十所示)的路径,例如,E:\FreedomStudio\SiFive\riscv64-unknown-elf-gcc-20171231-x86_64-w64-mingw32\bin

bin文件夹

图十 bin文件夹

 

  • 将asm_compile里面的exe复制到Freedom Studio bin文件夹下。如图十一所示。

添加fii_asm.exe到Freedom Studio bin

图十一 添加fii_asm.exe到Freedom Studio bin

 

  • 右键点击工程,Properties > C/C++ Build > Settings > Build Steps.Post-Build steps里填入exe -x -f -i ${ProjName}.elf -o fii.bin,完成后点击Apply and Close,如图十二和图十三所示。

Properties

图十二 Properties

 

Build Steps

图十三 Build Steps

 

  • 完成以上步骤后,正常Build工程,即可在Project Explorer > 当前工程 > Debug文件夹下找到生成了相应的*.coe文件和*.bin文件等,如图十四所示。

生成*.coe和*.bin文件

图十四 生成*.coe和*.bin文件

 

 

 

3. 配置ITCM/DTCM大小

在进行编译的过程中,sys.lds作为链接器分配给代码和数据内存区域,其中ITCM/DTCM(Instruction Tightly Coupled Memory/Data Tightly Coupled Memory)的内存分配大小可以根据需求修改,注意也需要修改相应的RISCV CPU代码,例如当软件代码量增加后,ITCM可能也需要相应增加,当堆(heap)需要的分配量很大时,DTCM则需要扩大。注意如果软件代码中sys.lds的内存分配大小只能小于或是等于RISCV CPU分配的内存大小。图十五所示sys.lds上相应的代码位置。可以看到内存被分为ROM和RAM。ROM是指ITCM只可读,并不代表在FPGA实现中用的是ROM,实际上,ITCM是用RAM IP核构建的。同理,RAM是指DTCM可读可写,实际FPGA实现使用的是SRAM。图十六所示的为FPGA代码中RAM的位置,图十七所示为具体配置RAM大小的位置。

sys.lds中ITCM/DTCM配置

图十五 sys.lds中ITCM/DTCM配置

 

初始化RAM

图十六 RAM地址

 

RAM大小配置

图十七 RAM大小配置

 

图十八所示的是FPGA代码中SRAM的位置,图十九是代码中配置SRAM大小的位置。

SRAM位置

图十八 SRAM位置

 

SRAM大小配置

图十九 SRAM大小配置

 

 

4. *.exe文件选项

在run.bat文件中,有关于fii_asm.exe文件的配置如图二十所示。如果在run相应工程时,有加”abi/ABI”则是上面两行配置输出,否则为最后一行配置输出。有关编译选项例如-f,-i等表示含义可以通过查阅帮助文档得知。具体步骤为在Terminal下进入文件asm_compile里,输入fii_asm.exe -h,如图二十一所示。注意-n(numeric)选项表示将32个寄存器由数字表示(x0-x31),abi选项为ABI(application binary interface,应用二进制接口)输出格式(zero,ra-t6)。以run_but工程说明,图二十二是ABI格式下生成的反汇编(fii.txt),图二十三是默认格式(numeric,-n)下生成的反汇编(fii.txt)。

fii_asm.exe文件配置

图二十 fii_asm.exe文件配置

 

编译选项

图二十一 编译选项

 

ABI输出反汇编

图二十二 ABI输出反汇编

 

numeric输出反汇编

图二十三 numeric输出反汇编

 

Posted in RISC-V 教案, 教材与教案

1 Comment

发表评论

相关链接