文章目录
上篇文章:芯片设计 - 常用工具 bsub 命令介绍
下篇文章:芯片设计- RTL 数字逻辑设计入门 2 - vcs 及 verdi 使用介绍
1.1 VCS 与 Verdi 简介
VCS,Verdi 是什么,为何要用 VCS 和 Verdi?
1.1.1 VCS/Verdi 介绍
相信大家都用过 Vivado
,Quartus
等,这里以 Vivado 为例,它集成了 RTL的编译,仿真,综合,看波形及烧录镜像等业务,相比之下,VCS
和 Verdi
就很专业:
- VCS 专注于编译及仿真;
- Verdi 专注于看波形。
如上问所述 既然 Vivado 功能如此之全,为何要大费周折用 VCS 和 Verdi 呢?
Vivado
其实只能算个写 Verilog
的(而且还很慢),只不过集成了综合,仿真,看波形等功能,如果要真正做ASIC
设计,还是得在各个步骤用上用更加专业的EDA
软件。首先VCS编译仿真速度极快,效率极高,节约时间,Verdi 看波形也十分方便 debug,它支持信号追溯,无缝增加信号波形等功能。
注意:仿真包含前仿和后仿,如果单纯的前仿,VCS就绰绰有余了,然后想后仿,那就得需要再用DC (Design Complier)来“综合”
1.1.2 VCS 编译介绍
使用 VCS 等工具进行仿真最少要准备 3 个文件
- 所写的 RTL文件(.v) ;
- 用于仿真的测试激励文件(.sv) ;
- 统筹前2个文件的 Makefile 文件。
full_adder_tb.sv full_adder.v Makefile
full_adder.v 内容如下:
module full_addr(
input wire a_in,
input wire b_in,
input wire c_in,
output wire sum_out,
output wire c_out
);
assign sum_out = a_in ^ b_in ^ c_in;
assign c_out = (a_in & b_in) | (b_in & c_in) | (a_in & c_in);
endmoudle
full_adder_tb.sv 内容如下:
`timescale 1ns/1ns
module full_adder_tb;
reg ain, bin, cin;
wire sumout, cout;
full_adder u_full_adder(
.a_in (ain),
.b_in (bin),
.c_in (cin),
.sumout (sumout),
.c_out (cout)
);
parameter CLK_PERIOD = 20;
reg clk, reset_n;
initial begin
clk = 0;
forever begin
#(CLK_PERIOD/2) clk =~ clk;
end
end
initial begin
reset_n = 0;
#100
reset_n = 1
end
initial begin
#110 ain = 0; bin = 0; cin = 0;
#20 ain = 0; bin = 1; cin = 0;
#20 ain = 1; bin = 0; cin = 0;
#20 ain = 1; bin = 1; cin = 0;
#20 ain = 0; bin = 0; cin = 1;
#20 ain = 1; bin = 0; cin = 1;
#20 ain = 1; bin = 1; cin = 0;
#50 $finish;
end
initial begin
$vcdplusson;
end
endmodule
Makefile 文件内容类似如下:
RTL :=./full_adder.v
RB :=./full_addr_tb.sv
SEED ?=$(shell data+%s)
# Target: Dependency
all: compile simulate
compile:
vcs -sverilog -debug_acc+all+dmptf -debug_region+cell+encrypt $(RTL) $(TB) -l com.log
simulate:
./simv +ntb_random_seed$(SEED) -l sim.log
run_dev:
dev -vpd vcdplus.vpd # check waveform
clean:
rm -rf *.log csrc simv* *.key *.vpd DEVfiles coverage *.vdb
timescale 也可以在 makefile 里加上
-timescale=1ns/1ps
即可
1.2 Perforce常用命令总结
Perforce SCM System是一款构建于可伸缩客户/服务器结构之上的软件配置管理工具。仅仅应用TCP/IP,开发人员就能够通过多种Perforce客户端(几种平台的GUI、WEB、或命令行)访问Perforce服务器。Perforce能够被快速和容易地部署,即使对大型或分布式的站点,也只要求最小限度的管理。Perforce可以使用在50多个操作系统中,它包括版本控制、工作空间管理、变更处理和一个强大的分支模型。
P4V 主要有可视化操作和 Linux操作,linux 环境下的 RTL code 管理, 很多公司会使用 perforce 来管理,所以下文主要介绍linux环境下常用的一些命令。
1.2.1 P4V 环境变量配置
环境变量的配置一般都是在 .tcshrc
文件中添加:
P4USER = <username>
P4PORT = <ip>
P4CLIENT = <workspace_name>
P4EDITOR "gvim -f"
export P4PASSWD=abcdefg
如果嫌使用环境变量的方式有一点麻烦,比如如果是代码方式,在不同的机器上运行需要在不同机器去设置环境变量;
workspace 如果发生更改的话; 修改也不方便,是否可以直接在命令中指定这些需要的信息呢? 答案当然是可以的:
p4 -C utf8 -p IP:port -u user -p password -c workspace_name
这条命名就代替了上面环境变量设置的方式。
P4V 登陆:
p4 login
Enter password:
使用下面一条命令即可输入用户和密码:
p4 -u user -P password
1.2.2 P4基本操作(常用命令解释)
建立 depot 后,就可以正常的文件操作了,一些常用的命令如下所示,还是遇到不熟的建议查看手册:
- 新建文件:
p4 add <file_name>
; - 查看本地 client 状态:
p4 client
; - 更新文件到最新:
p4 sync -f
…(-f
代表强制刷新); - 编辑文件:
p4 edit ...
; - 删除文件:
p4 delete <file_name>
; - 比较不同版本文件:
p4 diff <file_name>#<版本号> <file_name>#<版本号>
; - 查看当前正在操作的所有文件:
p4 opened
或当前目录下:p4 opened ..
.; - 查看文件 checkin 历史:
p4 filelog <file_name>
; - 查看文件当前版本:
p4 have <file_name>
; - 查看当前目录下所有 checkin 记录:
p4 changes -m 10 ..
.(-m:显示多少记录) ; - 上传文件到服务器:
p4 submit -d "<note>" ...
; - 撤销文件操作:
p4 revert <file_name>
; - checkin 时解决是否有和别人修改的内容冲突:
p4 resolve <file_name>
。
1.2.3 p4 sync 常用命令
1) 更新单个文件
p4 sync //serverpath/filename.txt
2)更新目录下某种后缀名的文件
p4 sync //serverpath/*.txt
3)获取目录下版本号为 2 的某种后缀名的文件
p4 sync //serverpath/*.txt#2
推荐阅读:
https://blog.youkuaiyun.com/JasonFuyz/article/details/107508893
https://blog.youkuaiyun.com/e295166319/article/details/54017408
上篇文章:芯片设计 - 常用工具 bsub 命令介绍
下篇文章:芯片设计- RTL 数字逻辑设计入门 2 - vcs 及 verdi 使用介绍