【芯片设计- RTL 数字逻辑设计入门 1- Linux 环境下 VCS与 Verdi 联合仿真】

文章目录

    • 1.1 VCS 与 Verdi 简介
      • 1.1.1 VCS/Verdi 介绍
      • 1.1.2 VCS 编译介绍
    • 1.2 Perforce常用命令总结
      • 1.2.1 P4V 环境变量配置
      • 1.2.2 P4V 登陆
      • 1.2.3 P4基本操作(常用命令解释)
      • 1.2.4 p4 sync 常用命令
      • 1.2.4 p4 和 p4c 的区别

1.1 VCS 与 Verdi 简介

VCS,Verdi 是什么,为何要用 VCS 和 Verdi?

1.1.1 VCS/Verdi 介绍

相信大家都用过 VivadoQuartus 等,这里以 Vivado 为例,它集成了 RTL的编译,仿真,综合,看波形及烧录镜像等业务,相比之下,VCSVerdi 就很专业:

  • 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  

这条命名就代替了上面环境变量设置的方式。

1.2.2 P4V 登陆

p4 login
Enter password:

使用下面一条命令即可输入用户和密码:

p4 -u user -P password

1.2.3 P4基本操作(常用命令解释)

建立 depot 后,就可以正常的文件操作了,一些常用的命令如下所示,还是遇到不熟的建议查看手册:

  • 新建文件:p4 add
  • 查看本地 client 状态:p4 client
  • 更新文件到最新:p4 sync -f …(-f 代表强制刷新);
  • 编辑文件:p4 edit ...
  • 删除文件:p4 delete
  • 比较不同版本文件:p4 diff #<版本号> #<版本号>
  • 查看当前正在操作的所有文件:p4 opened 或当前目录下:p4 opened ...;
  • 查看文件 checkin 历史:p4 filelog
  • 查看文件当前版本:p4 have
  • 查看当前目录下所有 checkin 记录:p4 changes -m 10 ...(-m:显示多少记录) ;
  • 上传文件到服务器:p4 submit -d "" ...
  • 撤销文件操作:p4 revert
  • checkin 时解决是否有和别人修改的内容冲突:p4 resolve

1.2.4 p4 sync 常用命令

1) 更新单个文件

p4 sync //serverpath/filename.txt  

2)更新目录下某种后缀名的文件

p4 sync //serverpath/*.txt  

3)获取目录下版本号为 2 的某种后缀名的文件

p4 sync //serverpath/*.txt#2  

1.2.4 p4 和 p4c 的区别

P4 和 P4C都是与 Perforce有关的工具,但它们的作用不同。
P4是Perforce的命令行界面工具,它提供了一系列命令,可以用于管理Perforce服务器和客户端之间的交互。使用P4,您可以提交和检出文件,查看文件历史记录,创建和管理分支等。

P4C是Perforce的客户端工具,它可以与Perforce服务器进行交互,并提供了一个图形用户界面,使用户可以更方便地管理Perforce服务器上的文件和代码。P4C还提供了一些高级功能,如代码审查、版本控制、合并等。

总的来说,P4是Perforce的命令行工具,而P4C是Perforce的客户端工具,两者的作用不同。如果您需要管理Perforce服务器和客户端之间的交互,可以使用P4;如果您需要更方便地管理Perforce服务器上的文件和代码,可以使用P4C。

推荐阅读
https://blog.csdn.net/JasonFuyz/article/details/107508893
https://blog.csdn.net/e295166319/article/details/54017408

你可能感兴趣的:(芯片设计,RTL,数字逻辑设计扫盲,fpga开发)