参考博客:搭建属于自己的数字IC EDA环境(五):搭建FPGA自动化环境(Linux下vivado Tcl脚本自动化开发),业余IC设计流程与通路

今天记录一下自己搭建fpga自动化的过程。同时说一下自己之后的打算:在研究蜂鸟e203之前,打算先研究下tinyriscv处理器(源代码与设计原理),最后手敲code并实现fpga验证。

1、搭建项目模板

首先新建一个文件夹(例如这里叫led_twinkle),用来存放项目。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_ubuntu 搭建gitlab16

在这个文件夹中新建几个文件夹。
fpga中存放的是与fpga原型机有关的文件。
module中存放的是项目源码。
script中存放的是脚本文件。
tb中存放的是testbench文件。
verification中存放的是验证文件。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_ubuntu 搭建gitlab16_02

这时候点开fpga文件夹,继续新建几个文件夹。
constraint存放的是fpga的约束文件。
libs存放的是fpga的IP核。
script存放的是脚本文件。
work存放的是makefile文件与主要的工作地方。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_学习_03

2、添加所需文件。

在module文件夹下新建一个led_twinkle.v的文件。

module led_twinkle(
    input          sys_clk  ,  //系统时钟
    input          sys_rst_n,  //系统复位,低电平有效

    output  [1:0]  led         //LED灯
);

//reg define
reg  [25:0]  cnt ;

//*****************************************************
//**                    main code
//*****************************************************

//对计数器的值进行判断,以输出LED的状态
assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;
//assign led = (cnt < 26'd5)         ? 2'b01 : 2'b10 ;  //仅用于仿真

//计数器在0~5000_000之间进行计数
always @ (posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        cnt <= 26'd0;
    else if(cnt < 26'd5000_0000)
//    else if(cnt < 26'd10)  //仅用于仿真
        cnt <= cnt + 1'b1;
    else
        cnt <= 26'd0;
end

endmodule

在fpga的constraint的文件夹下新建约束文件pin.xdc。

create_clock -period 20.000 -name clk [get_ports sys_clk]

set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS15} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN U7 IOSTANDARD LVCMOS15} [get_ports sys_rst_n]
set_property -dict {PACKAGE_PIN V9 IOSTANDARD LVCMOS15} [get_ports {led[0]}]
set_property -dict {PACKAGE_PIN Y8 IOSTANDARD LVCMOS15} [get_ports {led[1]}]

set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.COMPRESS true [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE Yes [current_design]

在fpga的script文件夹中新建TCL脚本create_prj.tcl。
大家可以先熟悉一下,不必全部理解。
注:最后一个比特流文件生成mcs固化文件的代码来源于正点原子官方文档。

#################################################
# vivado FPGA environment configuration
#################################################

set PRJ_NAME        led_twinkle
set SCRIPT_DIR      ../script
set CONST_DIR       ../constraint
set DEVICE_NAME     xc7a100tfgg484-2
set XDC_FILE        $CONST_DIR/pin.xdc
set CODE_FILE       ../../module/led_twinkle.v
################################################
#Step1: Create project and overwrite old files
################################################
create_project -force $PRJ_NAME ./ -part $DEVICE_NAME
read_xdc $XDC_FILE
add_file $CODE_FILE
#add_files ../libs/sysclk_wiz/sysclk_wiz.xci
#set_property ip_repo_paths ../libs/sysclk_wiz [current_project]
set_property verilog_define {FPGA_SYN=1} [get_filesets sources_1]
#set max threads
set_param general.maxThreads 8

# Launch Synthesis
launch_runs synth_1
wait_on_run synth_1
# Launch Implementation
launch_runs impl_1 -to_step write_bitstream
wait_on_run impl_1
#write_cfgmem -format mcs -size 128 -interface BPIx16 -loadbit {up 0x0 "Breath_led.runs/impl_1/breath_led.bit" } -checksum -force -disablebitswap -file Breath_led.runs/impl_1/Breath_led.mcs

write_cfgmem -format mcs -interface SPIx4 -size 128 -loadbit {up 0x0 "led_twinkle.runs/impl_1/led_twinkle.bit"} -file led_twinkle.runs/impl_1/led_twinkle.mcs

最后在fpga的work文件夹中新建Makefile文件。

clean:
	rm -rf *.cache *.hw *.sim *.ip_user_files *.runs
	rm -f *.jou *.log *.txt *.xpr 
	rm -rf .Xil
build:
	vivado -mode batch -source ../script/create_prj.tcl & 

open:
	vivado -source open_project ./*.xpr &

3、分析与综合

首先需要在.bashrc文件中,添加下面的代码。保存完文件后记得source一下。

source /home/xiaoxing/Xilinx/Vivado/2019.2/settings64.sh

这里在命名中输入vivado即可以打开vivado软件。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_ubuntu_04

使用make build进行分析与综合并生成比特流文件与固化mcs文件。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_ubuntu_05


从下图可以看出没有警告也没有错误,说明分析与综合均通过。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_ubuntu 搭建gitlab16_06


最后使用make open来打开vivado项目工程。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_学习_07

4、安装驱动

因为目前使用的接口usb3.0的接口,所以需要进行下面的修改。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_ubuntu_08


接着需要安装驱动。进入下图的文件文件夹中,然后使用sudo ./install_drivers来安装驱动。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_sed_09


出现箭头所示的打印结果,即为安装成功。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_ubuntu 搭建gitlab16_10


这里选择连接到虚拟机。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_sed_11


点击open hardware manager。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_sed_12


点击auto connect。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_学习_13


点击program device。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_学习_14


点击program即可。下载完成后即可以看出小灯交替闪烁的效果咯。

ubuntu 搭建gitlab16 ubuntu 搭建fpga开发环境_fpga开发_15