VCS基本仿真

这里记录三种仿真方式:

第一种是将verilog文件一个一个敲在终端上进行仿真;

第二种是将多个verilog文件的文件路径整理在一个文件中,然后进行仿真;

第三种是利用makefile文件进行仿真;

以8位加法器为例:

一位加法器:

复制代码
module fa(a, b, cin, sum, cout);
input a, b, cin;
output sum, cout;
assign {cout, sum} = a + b + cin;
endmodule

以一位加法器组成的4位加法器:

复制代码
module add4(a, b, cin, sum, cout);
input [3:0] a, b;
input cin;
output cout;
output [3:0] sum;
wire [3:1] c;

fa u1(a[0], b[0], cin, sum[0], c[1]);
fa u2(a[1], b[1], c[1], sum[1], c[2]);
fa u3(a[2], b[2], c[2], sum[2], c[3]);
fa u4(a[3], b[3], c[3], sum[3], cout);

endmodule

以4位加法器组成的8位加法器

复制代码
module add8(a, b, cin, sum, cout);
input [7:0] a, b;
input cin;
output cout;
output [7:0] sum;
wire c4, c8_0, c8_1;
wire [7:4] sum_0, sum_1;

add4 u1(a[3:0], b[3:0], cin, sum[3:0], c4);
add4 low_add(a[7:4], b[7:4], 1'b0, sum_0, c8_0);
add4 high_add(a[7:4], b[7:4], 1'b1, sum_1, c8_1);

assign sum[7:4] = c4?sum_1:sum_0;
assign cout = c4?c8_1:c8_0;

endmodule

testbench

复制代码
module addertb;
reg [7:0] a_test, b_test;
wire [7:0] sum_test;
reg cin_test;
wire cout_test;
reg [17:0] test;

add8 u1(a_test, b_test, cin_test, sum_test, cout_test);

initial
begin
  for (test = 0; test <= 18'h1ffff; test = test +1) begin
    cin_test = test[16];
    a_test = test[15:8];
    b_test = test[7:0];
    #50;
    if ({cout_test, sum_test} !== (a_test + b_test + cin_test)) begin
      $display("***ERROR at time = %0d ***", $time);
      $display("a = %h, b = %h, sum = %h;  cin = %h, cout = %h",
               a_test, b_test, sum_test, cin_test, cout_test);
      $finish;
    end
    #50;
  end
  $display("*** Testbench Successfully completed! ***");
  $finish;
end
endmodule

1.第一种:将verilog文件一个一个敲在终端上进行仿真:

在存在verilog文件的文件夹内,打开终端,输入以下命令

1.1 先进行编译:

复制代码
vcs fa.v addertb.v add8.b add4.v -l readme.log +v2k -debug_all

1.2 再进行仿真:

复制代码
./simv -l run.log

1.3 打开图形化界面DVE

复制代码
./simv -gui

1.4 在选中所有信号,再右键add to wave,再new wave view

1.5 最后输出波形

点击1处的小箭头,便有波形出现。使用2处的三个按钮(预览全局、放大和缩小)调整波形。在3处鼠标左键按住不动,左右拖动即可选取一个观察的时间范围。

  1. 第二种将多个verilog文件的文件路径整理在一个文件中,然后进行仿真

2.1 将verilog文件路径放在一个文件中,文件命名为file.f

复制代码
find -name '*v' > file.f
gvim file.f

2.2 再进行编译

复制代码
vcs -f file.f -l readme.log +v2k -debug_all

2.3 编译后,再进行仿真,图形化界面和输出波形与第一种方法类似

  1. 第三种是利用makefile文件进行仿真

3.1先编写makefile文件,文件名为simv

复制代码
.PHONY:com sim clean

OUTPUT = simv  

VCS = vcs -sverilog +v2k -timescale=1ns/1ns                             \
	  -debug_all							\
	  -o ${OUTPUT}							\
	  -l compile.log						\

SIM = ./${OUTPUT} -l run.log

com:
	${VCS} -f file.f

sim:
	${SIM}

clean:
	rm -rf ./csrc *.daidir *.log simv* *.key

3.2 再进行编译,打开终端,输入

复制代码
make com

3.3 再进行仿真,输入

复制代码
make sim

3.4 再打开图形化界面

复制代码
./simv -gui

参考资料:

新手教程01:逻辑仿真工具VCS的基础使用_vcs使用教程-CSDN博客

https://www.cnblogs.com/amxiang/p/16688581.html

相关推荐
浩浩的科研笔记40 分钟前
投论文常用技术笔记-使用visio导出贴合图像尺寸大小的PDF(无白边、无黑框)
笔记·pdf·论文笔记
SJLoveIT1 小时前
神经网络反向传播推导笔记 (整理版)
人工智能·笔记·神经网络
love530love1 小时前
【笔记】华硕 ROG MAXIMUS Z890 HERO 主板 BIOS 更新完整操作实录
运维·人工智能·windows·笔记·单片机·嵌入式硬件·bios
碎碎思1 小时前
FINN:FPGA AI 推理新范式 —— 定制化、高性能、量化神经网络编译器框架
人工智能·深度学习·神经网络·机器学习·fpga开发
tgethe1 小时前
Nginx笔记
运维·笔记·nginx
三品吉他手会点灯1 小时前
STM32F103 学习笔记-20-通信的基本概念
笔记·stm32·单片机·嵌入式硬件·学习
悠哉悠哉愿意1 小时前
【嵌入式学习笔记】GPIO与LED
笔记·单片机·嵌入式硬件·学习
QT 小鲜肉1 小时前
【Linux命令大全】001.文件管理之locate命令(实操篇)
linux·运维·服务器·chrome·笔记
ShiMetaPi2 小时前
GM-3568JHF丨ARM+FPGA异构开发板系列教程:外设教程 05 蓝牙
arm开发·fpga开发·fpga·rk3568
Vic101012 小时前
Redis防重复点击与分布式锁实现方案对比笔记
java·redis·笔记·分布式