Linux中使用Makefile来运行QuestaSim
环境:Win7x64,VMware15.0,centOS7.0,QuestaSim10.7c
假设已经编辑好了一个全加器还有运行这个DUT的testbech,代码如下:
点击查看代码
// filename: full_adder.v
module full_adder(
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);
endmodule
和
点击查看代码
// filename: full_adder_tb.v
module full_adder_tb;
reg ain, bin, cin;
wire sumout, cout;
//task 1: createan instance
full_adder u_full_adder(
.a_in (ain),
.b_in (bin),
.c_in (cin),
.sum_out (sumout),
.c_out (cout)
);
//task 2: clock and reset generator
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
//task 3: drive the stimulus and capture the response
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; //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;
end
//task 4: check the result
always @ (posedge clk) begin
if(!reset_n)begin
$display("%t:%m:resetting...",$time);
end
else begin
$display("%t:%m:resetting finish!",$time);
end
end
initial begin
#115 if({cout,sumout}!=2'b00)
$display("%t, Error: {cout,sumout} = %b, ain = %b, bin = %b, cin = %b", $time, {cout,sumout}, ain, bin, cin);
#20 if({cout,sumout} != 2'b01)
$display("Error: {cout,sumout} = %b, ain = %b, bin = %b, cin = %b", {cout,sumout}, ain, bin, cin);
#20 if({cout,sumout} != 2'b01)
$display("Error: {cout,sumout} = %b, ain = %b, bin = %b, cin = %b", {cout,sumout}, ain, bin, cin);
#20 if({cout,sumout} != 2'b10)
$display("Error: {cout,sumout} = %b, ain = %b, bin = %b, cin = %b", {cout,sumout}, ain, bin, cin);
#20 if({cout,sumout} != 2'b01)
$display("Error: {cout,sumout} = %b, ain = %b, bin = %b, cin = %b", {cout,sumout}, ain, bin, cin);
#20 if({cout,sumout} != 2'b10)
$display("Error: {cout,sumout} = %b, ain = %b, bin = %b, cin = %b", {cout,sumout}, ain, bin, cin);
#20 if({cout,sumout} != 2'b10)
$display("Error: {cout,sumout} = %b, ain = %b, bin = %b, cin = %b", {cout,sumout}, ain, bin, cin);
#20 if({cout,sumout} != 2'b11)
$display("Error: {cout,sumout} = %b, ain = %b, bin = %b, cin = %b", {cout,sumout}, ain, bin, cin);
end
//task 5: dump wave form with the compile option -debug_all
initial begin
$vcdpluson;
end
endmodule
方法一、运行QuestaSim界面来进行仿真
打开终端
输入:which vsim //查找QuestaSim位置并确认其可用性
输入:vsim 打开软件
balabala:
New Project: Name: full_adder, Default Library Name: work
-> Add existing file: full_adder.v, full_adder_tb.v
-> Compile All
-> Start simulation: work.full_adder_tb.v
-> Object: Add Wave -> Run or Run all
方法二:新建makefile,代码如下,终端输入make即可:
all: create_lib compile simulate
create_lib:
vlib work
compile:
vlog -l comp.log -sv full_adder.v full_adder_tb.v
simulate:
vsim -l sim.log -voptargs=+acc work.full_adder_tb -do "log -r *; run -all"
clean:
rm -rf *work mti_lib transcript modelsim.ini *wlf seq.cr.mti seq.mpf *.log
就可以啦。
两个小问题:
2、novopt: Optimizations are Disabled的问题
3、$vcdpluson is not defined的问题
4、makefile的代替版本【For VCS】:
点击查看代码
run: compile simulate
compile
vcs -debug_all timescale.v full_adder.v full_adder_tb.v -l com.log
simulate:
./simv -l sim.log
run_cov: compile_coverage simulate_coverage
compile_coverage:
vcs -debug_all -cm line+cond+fsm+tgl+branch -lca timescale.v full_adder.v full_adder_tb.v -l com.log
simulate_coverage:
./simv -cm line+cond+fsm+tgl+branch -lca -cm_log cm.log -l sim.log
clean:
rm -rf *.log
Good Luck !
Linux中使用Makefile来运行QuestaSim的更多相关文章
- 如何在Linux中查看所有正在运行的进程
如何在Linux中查看所有正在运行的进程 FROM:http://os.51cto.com/art/201101/244090.htm 进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系 ...
- [转]Linux中configure/makefile
本文教你如何使用autoconf.automake等来制作一个以源代码形式(.tar.gz)发布的软件.并可在执行configure时使用自定义参数. 一.概述和基础知识 在Linux下得到一个以源代 ...
- 在linux中使用cmake编译运行cocos2d-x 3.4 projects
原因: 由于不想在真机环境和 ide中调试环境, 只想在linux端进行 调试和运行, 需要使用cmake对现有的游戏进行编译(cocos2dx-lua 3.4) 修改步骤: 1.修改framewor ...
- [转载] 在Linux中,开机自动运行普通用户的脚本程序
FROM:http://blog.csdn.net/sinboy/article/details/2466225 FROM:http://www.2cto.com/os/201006/50680.ht ...
- Linux中的Makefile
在Linux中Makefile扮演一个非常重要的角色,我们可以以Linux为平台在上面编写我们需要的C程序代码, 对于C语言来说,Linux是一个非常好的平台来学习.使用.调试.验证C代码的平台,其强 ...
- 在Linux中查看所有正在运行的进程
可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息. ps命令能提供一份当前进程的快照.如果想状态可以自动刷新,可以 ...
- Linux中怎么终止正在运行的后台程序
linux 任务管理-后台运行与终止fg.bg.jobs.&.ctrl + z命令一. &加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &,二.ctrl + z ...
- linux中启动 java -jar 运行程序
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉.以 ...
- linux中C语言的运行(gcc)
执行sudo apt-get install build-essential 出现
- python 安装成linux中的systemd守护运行
参考文档1:https://blog.csdn.net/luckytanggu/article/details/53467687 参考文档2:https://www.jianshu.com/p/e14 ...
随机推荐
- 常用 Git 命令行操作
本文记录了一些常用 Git 命令行操作的具体使用方式 git clone git clone REPOSITORY_URL 拉取仓库,并使用仓库名作为本地文件名 git clone REPOSITOR ...
- 基于Java的高并发多线程分片断点下载
基于Java的高并发多线程分片断点下载 首先直接看测试情况: 单线程下载72MB文件 7线程并发分片下载72MB文件: 下载效率提高2-3倍,当然以上测试结果还和设备CPU核心数.网络带宽息息相关. ...
- GC耗时高,原因竟是服务流量小?
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 最近,我们系统配置了GC耗时的监控,但配置上之后,系统会偶尔出现GC耗时大于1s的报警,排查花了一些力气,故在这里 ...
- ArcGIS工具 - 统计工具数量
ESRI作为GIS行业中的龙头,代表产品ArcGIS也在不断地优化和升级,从10.0开始已发布了8个版本,其工具箱(ToolBox)是它一个特色,每个版本的工具箱数量是不相同的,为源地理来教您如何统计 ...
- JavaFx 页面和控件设置快捷键
原文:JavaFx 页面和控件设置快捷键 - Stars-One的杂货小窝 之前说过一篇window系统全局快捷键的设置,本期主要是讲解JavaFx应用程序的快捷键设置,还是有所区别的 这里主要是To ...
- 学习记录C
学了这么久,终于开始实训项目了....... 奥里给 !!! 压力好大,好喜欢什么也不想的时候 记录学习的代码 分享一下 /* system函数:( #include<stdlib.h> ...
- SOFAJRaft依赖框架Disruptor浅析
Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题.与Kafka.RabbitMQ用于服务间的消息队列不同,disruptor一般用于线程间消息的传递 ...
- 图文并茂记录下重新配置Win10系统Flutter环境--内含Android Studio 下载安装教程
Flutter 是什么 Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.Flutter 开源.免费,拥 ...
- vue+div.canvas图像标注功能实现
main.js import Vue from 'vue' import 'vueui-widgets/dist/index.css' import VueUI from 'vueui-widgets ...
- BUG日记之——MP使用EeasyExcel技术,读取Excel并保存到数据库中出错
com.alibaba.excel.exception.ExcelAnalysisException: nested exception is org.apache.ibatis.reflection ...