参考博客:搭建属于自己的数字IC EDA环境(五):搭建FPGA自动化环境(Linux下vivado Tcl脚本自动化开发),业余IC设计流程与通路
今天记录一下自己搭建fpga自动化的过程。同时说一下自己之后的打算:在研究蜂鸟e203之前,打算先研究下tinyriscv处理器(源代码与设计原理),最后手敲code并实现fpga验证。
1、搭建项目模板
首先新建一个文件夹(例如这里叫led_twinkle),用来存放项目。
在这个文件夹中新建几个文件夹。
fpga中存放的是与fpga原型机有关的文件。
module中存放的是项目源码。
script中存放的是脚本文件。
tb中存放的是testbench文件。
verification中存放的是验证文件。
这时候点开fpga文件夹,继续新建几个文件夹。
constraint存放的是fpga的约束文件。
libs存放的是fpga的IP核。
script存放的是脚本文件。
work存放的是makefile文件与主要的工作地方。
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软件。
使用make build进行分析与综合并生成比特流文件与固化mcs文件。
从下图可以看出没有警告也没有错误,说明分析与综合均通过。
最后使用make open来打开vivado项目工程。
4、安装驱动
因为目前使用的接口usb3.0的接口,所以需要进行下面的修改。
接着需要安装驱动。进入下图的文件文件夹中,然后使用sudo ./install_drivers
来安装驱动。
出现箭头所示的打印结果,即为安装成功。
这里选择连接到虚拟机。
点击open hardware manager。
点击auto connect。
点击program device。
点击program即可。下载完成后即可以看出小灯交替闪烁的效果咯。