vcs+Makefile实现简单的testbench
网络上找的文章,实现了一遍。
步骤如下:
1. 创建verilog代码, 包括8位加法器代码和testbench代码。
adder8.v
module adder8 (
input clk,
input [7:0] a_i,
input [7:0] b_i,
output reg [8:0] c_o
);
always @ (posedge clk) begin
c_o <= a_i + b_i;
end
endmodule
adder8_tb.v
// TB_SEED is random seed
`ifndef TB_SEED
`define TB_SEED 0
`endif
module adder8_tb();
wire [8:0] result;
reg [7:0] input_0;
reg [7:0] input_1;
reg clk;
// clk2 is delay of clk, is used to verify result
wire #5 clk2;
assign clk2 = clk;
initial begin
$fsdbDumpfile("adder8.fsdb");
$fsdbDumpvars();
$display("TB_SEED is %d", `TB_SEED);
clk = 0;
input_0 = 8'd0;
input_1 = 8'd0;
#10000
$display("All test PASS!");
$finish;
end
// system clk is 50MHz
always begin
#10 clk = ~clk;
end
//generate random input
always @ (negedge clk) begin
input_0 = $random() % 256;
input_1 = $random() % 256;
end
//get verified output
always @ (posedge clk2) begin
if ((input_0 + input_1) != result) begin
$display("Test failed for %x + %x = %x", input_0, input_1, result);
$finish;
end else begin
$display("%x + %x = %x", input_0, input_1, result);end
end
//instantiate adder8
adder8 dut(
.clk(clk),
.a_i(input_0),
.b_i(input_1),
.c_o(result)
);
endmodule
2.编写Makefile文件,
VCS= vcs -sverilog -timescale=1ns/1ns +vpi -l build.log -debug_access+all
SIMV = ./simv -l simv.log
ifndef TB_SEED
TB_SEED = 1024
endif
all: comp run
comp:
$(VCS) +define+TB_SEED=$(TB_SEED) +incdir+. \
adder8.v \
adder8_tb.v
run:
$(SIMV) +fsdbfile+top.fsdb
dbg:
verdi -f file.f -ssf top.fsdb &
clean:
rm -rf core csrc simv* vc_hdrs.h ucli.key urg* *.log *.fsdb novas.* verdiLog
注意:Makefile里面的空格排版位tab键。
file.f里面内容为:
adder8_tb.v
adder8.v
3.
编译项目: Make
清除项目: Make clean
查看波形:Make dbg
编译日志文件为:build .log
仿真日志文件为:simv.log
仿真结果为:

vcs+Makefile实现简单的testbench的更多相关文章
- 转:SYNOPSYS VCS Makefile文件编写与研究
SYNOPSYS VCS Makefile文件编写与研究 这个Makefile是synopsys提供的模板,看上去非常好用,你只要按部就班提供实际项目的参数就可以了.我们来看这个文件的头部说明:mak ...
- Makefile的简单使用
led.bin: led.o arm-linux-ld -Ttext 0x0 -o led.elf $^ arm-linux-objcopy -O binary led.elf led.bin arm ...
- Makefile的简单编写【学习笔记】
首先我们先创建两个简单的文件: main.c #include <stdio.h> extern void hi_fun(); int main() { printf("hell ...
- Ubuntu下makefile的简单使用
在Windows下,只需要简单的点击以下make,rebuild即可.而在Linux下,这样的IDE环境并没有提供,难道必须每一步都执行一遍吗?比较ok的做法自然是能够利用批处理脚本来进行操作了,这样 ...
- Linux系列之makefile的简单入门
什么是makefile呢? 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...
- Makefile文件简单整理
.PHONY:clean main:hello.o gcc -o main hello.c hello.o:hello.c gcc -c hello.c clean: rm -f hello.o ma ...
- makefile的简单写法
makefile 使用方法: vi 一个Makefile文件 CC = g++ // 指的是用什么编译器RM = rm -rf // 定义一个删除的指令(变量)CFLAGS = -c -Wal ...
- Makefile的简单例子
1.生成test可执行文件,源文件有prog.c prog.h cord.h test:prog.o code.o gcc -o test prog.o code.o prog.o:prog.c pr ...
- 一步一步写一个简单通用的makefile(三)
上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...
随机推荐
- Dubbo入门---搭建一个最简单的Demo框架
参考文档: https://blog.csdn.net/noaman_wgs/article/details/70214612/
- OCM_第四天课程:Section2 —》GC 的安装和配置
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- java多线程快速入门(八)
设置线程优先级:join() package com.cppdy; class MyThreadA extends Thread{ MyThreadB b; public MyThreadA(MyTh ...
- CentOS7图形界面与命令行界面切换
1.如果在命令行模式,按Ctrl+Alt+F1,可以进入图形界面: 2.如果在图形界面下,按:Ctrl+Alt+F2,可以进入命令行模式:
- myBatis各种依赖包
下载地址:myBatis各种依赖包
- ElasticSearch - query vs filter
query vs filter 来自stackoverflow Stackoverflow - queries-vs-filters Question 题主希望知道Query和Filter的区别 An ...
- ELK - MAC环境搭建
ELK - MAC环境搭建 本文旨在记录elasticsearch.logstash.kibana在mac下的安装与启动. 写在前面 ELK的官方文档对与它们的使用方法已经讲的非常清楚了,这里只对相关 ...
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...
- [转]svn检出的时候报 Unable to connect to a repository at URL错误
昨天晚上遇到的问题: 在同一个SVN地址下,很多子目录,各种目录各种权限,现在因为业务,需要下载各种目录下的文件. 第一次遇到这个问题..现象是: 1)在web浏览器下可用: 2)在本地创建的目录下c ...
- python全栈开发day21面向对象初识总结