vcs makefile脚本学习
前言
2023.3.16 🌸都开了
2023.3.29 月末
1、各种波形文件
vpd
:Value Plus Dump,vcs自带的DVE的波形
fsdb
:Fast Signal Database,Verdi波形
shm
:Cadence NC verilog支持
VCD
:Value Change Dump,通用波形格式
WLF
:Wave Log File,Modelsim支持波形
2、makefile赋值
?=
:条件赋值,缺省
=
:递归赋值,影响多个变量
:=
:简单赋值,只对当前语句的变量有效
+=
:追加赋值
3、vcs+dve:最简单查看波形
dve是vcs自带的查看波形的软件,波形格式为.vpd(Value Plus Dump)
,生成的波形文件可以单独发给其他用户查阅。
vcdplus.vpd
:默认波形文件的名称,可以通过函数vcdplusfile("xxx.vpd")
或者编译选项+vpdfile+filename
进行修改
&
:后台打开 dve 并加载 vpd 文件,以免终端被占用
all: com sim run_dvecom:vcs -full64 -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed -sverilog -debug_all -timescale=1ns/1ns -f file.list -l com.logsim:./simv -l sim.logrun_dve:dve -vpd vcdplus.vpd &clean:rm -rf *.vpd csrc *.log *.key *.vdb simv* DVE*
相应的在testbench里面要加上vcd dump波形的相关函数
$vcdpluson()
:自动dump dve的波形,使能波形
$vcdplusfile()
:设置波形文件名称
$dumpvar(level, module_name)
:表示要dump的信号,level是层次, module_name就是模块名。默认是(0,top),top层及下面所有层的信号,(1,top):只有top的信号,(2,top):top层及下一层的信号
initial begin$vcdplusfile("fifo.vpd");$vcdpluson();
end
RTL file 全加器
module add(input a,b,c_in,output sum,c_out); assign sum = a ^ b ^ c_in; assign c_out = (c_in & b)|(a & b)|(a & c_in);endmodule
testbench
`timescale 1 ns/1 ns module add_tb();//输入用regreg a;reg b;reg c_in;reg clk;//输出用wirewire sum;wire c_out; //时钟周期,单位为nsparameter CYCLE = 20;//生成本地时钟initial beginclk = 0;forever#(CYCLE/2)clk=~clk;end//信号初始化initial begin#1a = 0;b = 0;c_in = 0;end//待测试的模块例化add u1(.a (a),.b (b),.c_in (c_in),.c_out (c_out),.sum (sum));//其他输入信号赋值always @(posedge clk)begina = {$random}%2;b = {$random}%2;c_in = {$random}%2;endinitial begin$vcdpluson;endinitial begin# 200 $finish;endendmodule
4、vcs+verdi:把编译选项设置为变量
下面代码中的${VCS}
是设置的变量,再直接引用
.PHONY
:防止在Makefile中定义的执行命令的目标和工作目录下的实际文件出现名字冲突,假如有个run的文件,设置了之后,就会去执行makefile里面的run指令,也就是说执行命令make run会自动忽略名为"run"文件的存在,使make命令会自动绕过隐含规则搜索过程
,改善性能
.PHONY : clean sim com OUTPUT = adder_top
VCS = vcs -sverilog +v2k -timescale=1ns/1ns \\-debug_all \\ //换行标志\\-o ${OUTPUT} \\ //默认是simv文件-l compile.log \\
SIM = ./${OUTPUT} -l run.log //定义了一些变量,然后下面就使用这些变量com:${VCS} -f verilog_file.f
sim:${SIM}
clean:rm -rf ./csrc *.daidir *.log simv* *.key