02-逻辑仿真工具VCS使用
逻辑仿真工具VCS使用
1 Makefile执行VCS仿真
# Makefile for simulating the full_adder.v with the simulator VCS
# ----------------------------------------------------------------------------------
# Macro variable
RTL := ./full_adder.v
TB += ./full_adder_tb.v
SEED ?= $(shell date +%s)
# Target : Dependency
all : compile simulate
compile:
vcs -sverilog -debug_all -timescale=1ns/1ps -l com.log
simulate:
./simv -l sim.log
run_dve:
dve -vpd vcdplus.vpd &
clean :
rm -rf *.log csrc simv* *.key *.vpd DVEfiles coverage *.vdb
# ------------------------------------------------------------------------------------
# This all_cov target is used to collect the code coverage
all_cov: compile_coverage simulate_coverage
compile_coverage:
vcs -sverilog -debug_all -cm line+cond+fsm+tgl+branch \
-lca timescale.v full_adder.v full_adder_tb.v -l com.log
simulate_coverage:
./simv +ntb_random_seed=$(SEED) -cm line+cond+fsm+tgl+branch \
-lca -cm.log cm.log -l sim.log
report_cov:
urg -dir simv.vdb -format both -report coverage
dve_cov:
dve -cov -covdir simv.vdb -lca
2 full_adder RTL
module fulladder (
// module head : verilog-2001 format
input wire a_in,
input wire b_in,
input wire c_in,
output wire sum_out,
output wire c_out
);
// method 1 Gate Level Describe
assign sum_out = a_in ^ b_in ^ c_in;
assign c_out = (a_in & b_in) | (b_in & c_in) | (c_in & a_in);
// method 2 RTL design for Adder with the keyword "assign"
// behavior of adder can be systhesizable
// "assign" means connectivity ,which is used to describe a combinational circuit
// assign {c_out,sum_out} = a_in + b_in + c_in;
// method 3 RTL design for Adder with the keyword "always"
//reg c_out,sum_out
//always @ (a_in,b_in,c_in) begin
endmodule
3 Testbench
module full_adder_tb;
reg ain,bin,cin; //drive the input port with the reg type
wire sumout,cout;//sample the output port with the wire type
full_adder u_full_adder(
//task 1. how to create an instance
// module head: verilog-2001 format
/*input wire*/ .a_in (ain),
/*input wire*/ .b_in (bin),
/*input wire*/ .c_in (cin), //carry in
/*output reg*/ .sum_out (sumout);
/*output reg*/ .c_out (cout) //carry out
);
// behavior of the adder can be systhesizable
// "assign" means connectivity
// assign {c_out,sum_out} = a_in + b_in + c_in;
// task 2. clock and rest generator
parameter CLK_PERIOD = 20
reg clk,rest_n; // rest_n :active low
initial begin
clk = 0
forever begin
#(CLK_PERIOD/2) clk = ~clk
end
end
initial begin
reset_n = 0;
#100
reset_n = 1;
end
//taske 3. drive the stimulus and capture the response
//Here is a testcase
initial begin
#110 ain=0;
bin=0;
cin=0; //00
#20 ain=0;
bin=1;
cin=0; //01
#20 ain=1;
bin=0;
cin=0; //01
#20 ain=1;
bin=1;
cin=0; //01
#20 ain=0;
bin=1;
cin=0; //01
#20 ain=1;
bin=0;
cin=0; //01
#20 ain=1;
bin=1;
cin=0; //10
#20 ain=0;
bin=0;
cin=1; //01
#20 ain=0;
bin=1;
cin=1; //10
#20 ain=0;
bin=0;
cin=1; //01
#20 ain=0;
bin=1;
cin=1; //10
#20 ain=1;
bin=0;
cin=1; //10
#20 ain=1;
bin=1;
cin=1; //11
#50 finish; // Here is a system task which can stop the simulation
end
//task 4. check the result
always @ (posedge clk) begin
if (!reset_n) begin
$dispaly("%t:%m:restting...",$time) // counter 5 clock
end
else begin
$dispaly("%t:%m:restting finish!",$time) // the 6th clock
end
end
initial begin
#115 if ({cout,simout} != 2'b00) $display("Error:{cout,sumout}=%b,ain=%b,bin=%b,cin=%b",{cout,sumout},ain,bin,cin);
#20 if ({cout,simout} != 2'b01) $display("Error:{cout,sumout}=%b,ain=%b,bin=%b,cin=%b",{cout,sumout},ain,bin,cin);
#20 if ({cout,simout} != 2'b01) $display("Error:{cout,sumout}=%b,ain=%b,bin=%b,cin=%b",{cout,sumout},ain,bin,cin);
#20 if ({cout,simout} != 2'b10) $display("Error:{cout,sumout}=%b,ain=%b,bin=%b,cin=%b",{cout,sumout},ain,bin,cin);
#20 if ({cout,simout} != 2'b01) $display("Error:{cout,sumout}=%b,ain=%b,bin=%b,cin=%b",{cout,sumout},ain,bin,cin);
#20 if ({cout,simout} != 2'b10) $display("Error:{cout,sumout}=%b,ain=%b,bin=%b,cin=%b",{cout,sumout},ain,bin,cin);
#20 if ({cout,simout} != 2'b10) $display("Error:{cout,sumout}=%b,ain=%b,bin=%b,cin=%b",{cout,sumout},ain,bin,cin);
#20 if ({cout,simout} != 2'b11) $display("Error:{cout,sumout}=%b,ain=%b,bin=%b,cin=%b",{cout,sumout},ain,bin,cin);
end
//task 5. dump waveform with the comiple option -debug_all
initial begin
$vcdpluson
end
endmodule
02-逻辑仿真工具VCS使用的更多相关文章
- [笔记]机器学习(Machine Learning) - 02.逻辑回归(Logistic Regression)
逻辑回归算法是分类算法,虽然这个算法的名字中出现了"回归",但逻辑回归算法实际上是一种分类算法,我们将它作为分类算法使用.. 分类问题:对于每个样本,判断它属于N个类中的那个类或哪 ...
- VCS 常用命令速查
VCS是编译型Verilog模拟器,它完全支持OVI标准的Verilog HDL语言.PLI和SDF.VCS具有目前行业中最高的模拟性能,其出色的内存管理能力足以支持千万门级的ASIC设计,而其模 ...
- DDR3 IP和CIC IP仿真问题解决记录
1.更新vivado的仿真库(data/secureip和verilog和vhdl文件夹)至最新的vivado库和生成IP的版本匹配: 2.vcs编译脚本里面把仿真库地址指向匹配的仿真库版本: 3.v ...
- oracle12C--DG 状态集
一,物理备库 01,状态查询与状态详解 select switchover_status from v$database 02,状态转换到备用数据库 alter database commit to ...
- 数字IC设计工程师成长之路
学习的课程 仿真工具VCS实践学习 2019年12月9日-2019年12月23日
- 我叫Mongo,干了「查询终结篇」,值得您拥有
这是mongo第三篇"查终结篇",后续会连续更新5篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通 ...
- VCS使用学习笔记(1)——Verilog相关的仿真知识
本文主要学习Verilog的仿真特性,以及仿真器对Verilog的处理,算是对Verilog知识的增量学习.本文内容与我的另一篇博文(http://www.cnblogs.com/IClearner/ ...
- VCS使用学习笔记(0)——写在前面的话
由于毕业设计做的是数字IC相关,虽然不是纯设计,但是也有设计相关.有设计就要有仿真验证,我就趁此机会来学习一下VCS的使用吧.当然,这里只是学习其简单的逻辑仿真功能,从波形仿真到覆盖率等,基本上不涉其 ...
- ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑
上次搭建好了项目框架,但还是觉得不太对劲,后来才想起来没有对开发目标进行定位,这个小demo虽然不用做需求分析,但是要实现什么效果还得明确.后来想了一下就做个最简单的网站,目标定为小公司进行展示用的网 ...
- TCP/IP详解系列 --- 概念总结02
TCP复位报文段(RST)的用途: 1.当客户端程序访问不存在的端口时,目标主机将给它发送一个复位报文段:收到复位报文段的一端应该关闭连接或者重新连接,而不能回应这个复位报文段. 2.当客户端程序向服 ...
随机推荐
- springboot+bootstrap实现图书商城管理(大三下学期课程设计)
在csdn上记一次自己的课程设计过程(已经实习两个月了.感觉这个很容易做.支付可能需要多花点时间.): 在此框架基础之上权限认证管理设置成功:https://blog.csdn.net/weixin_ ...
- Java I/O(4):AIO和NIO中的Selector
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 在Java NIO的三大核心中,除了Channel和Buffer,剩下的就是Selector了.有的地方叫它选择器,也有叫多路复用器的(比如Ne ...
- 第二阶段:高级核心基础知识·第1章Linux三剑客·1
1.用vmware添加一块10G的硬盘,且永久挂载到/data01中,写出详细的步骤 2.用自己语言描述raid0和raid1的区别 RAID 0: 将两个或以上相同信号,容量的硬盘组合,磁盘阵列的总 ...
- C# Static关键词的使用
一.C#中类的方法分为静态方法和非静态方法 静态方法有Static关键词修饰 静态方法归类所有,而非静态方法归类的实例所有:静态方法无需类去实例化可直接调用 静态成员属于类所有,为各个类的实例所公用, ...
- debian如何删除无效的应用图标
1.看/usr/share/applications下是否有xxx.desktop 2.可以到-/.local/share/applications下看是否有xxx.desktop 来源:https: ...
- Golang Gorm time 时间字段格式化模型类 重写
问题: 在使用GORM中 如果我们使用到了CreateAt 和UpdateAt 就会发现 这个时间的类型是time.Time 而其数据是 "2022-10-13T10:14:02.97352 ...
- 谷歌浏览器xpath获取网页按钮路径
谷歌浏览器打开要获取的页面按下F12打开开发者工具 点击最左边的元素选择器,高亮后光标移动到对应元素框(这里只选择里层的元素,如这里要选到input级别) 点击后下方HTML会高亮显示,鼠标移动上去右 ...
- Conda 环境移植 (两种方式)
------------------------方法一------------------------ 优点: 在原机器上需要进行的操作较少,且除了conda不需要其余的库来支撑:需要传输的文件小,操 ...
- npm安装hexo报错
报错提示 npm WARN saveError ENOENT: no such file or directory, open '/home/linux1/package.json' npm noti ...
- win7使用onedrive右键托盘图标中文不显示问题
前言 win7 用的 onedrive不能在微软官网下载,用不了,所以需要下载 win7可以使用的版本. onedrive_for_win7.exe 解决问题 重启电脑解决 其他 我看贴吧说是文本放大 ...