当前位置:网站首页>EDA开源仿真工具verilator入门6:调试实例
EDA开源仿真工具verilator入门6:调试实例
2022-07-01 07:55:00 【I_belong_to_jesus】
verilog代码:
module multi_logic (a,b,c,d,e,f,g,h,clk,ou1,ou2,ou3,ou4);
input a,b,c,d,e,f,g,h,clk;
output ou1,ou2,ou3,ou4;
reg a,b,c,d,e,f,g,h,clk,ou1,ou2,ou3,ou4;
always @(posedge clk) begin
ou1 <= a ^ b;
ou2 <= c & d;
ou3 <= e | f;
ou4 <= (~g) | h;
end
endmodule
cpp代码:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "Vmulti_logic.h" // create `multi_logic.v`,so use `Vmulti_logic.h`
#include "verilated.h"
#include "verilated_vcd_c.h" //可选,如果要导出vcd则需要加上
int main(int argc, char** argv, char** env) {
VerilatedContext* contextp = new VerilatedContext;
contextp->commandArgs(argc, argv);
Vmulti_logic* multiLogic = new Vmulti_logic{contextp};
VerilatedVcdC* tfp = new VerilatedVcdC; //初始化VCD对象指针
contextp->traceEverOn(true); //打开追踪功能
multiLogic->trace(tfp, 0); //
tfp->open("wave.vcd"); //设置输出的文件wave.vcd
int clk = 1;
int count = 0;
while (!contextp->gotFinish()) {
count++;
int a = rand() & 1;
int b = rand() & 1;
int c = rand() & 1;
int d = rand() & 1;
int e = rand() & 1;
int f = rand() & 1;
int g = rand() & 1;
int h = rand() & 1;
clk = (clk + 1) % 2;
multiLogic->a = a;
multiLogic->b = b;
multiLogic->c = c;
multiLogic->d = d;
multiLogic->e = e;
multiLogic->f = f;
multiLogic->g = g;
multiLogic->h = h;
multiLogic->clk = clk;
multiLogic->eval();
printf("a = %d, b = %d, c = %d, d = %d, e = %d, f = %d, g = %d, h = %d, clk = %d, ou1 = %d, ou2 = %d, ou3 = %d\n",
a, b, c, d, e, f, g, h, clk, multiLogic->ou1, multiLogic->ou2, multiLogic->ou3);
tfp->dump(contextp->time()); //dump wave
contextp->timeInc(1); //推动仿真时间
if (count > 25)
break;
//assert(top->f == ~((a&b) | (~(c&d))));
}
delete multiLogic;
tfp->close();
delete contextp;
return 0;
}单线程输入指令:
verilator -Wall --cc --trace --exe --build multi_logic.v test_main.cpp多线程输入指令:
verilator -Wall --cc --trace --exe --build --threads {2} multi_logic.v test_main.cpp单线程debug输入指令:
verilator --cc --trace -exe --debug --gdbbt multi_logic.v test_main.cpp进行debug,输出结果如下:
No stack.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Starting Verilator 4.210 2021-07-07 rev v4.210
- Verilator.cpp:550: Option --verilate: Start Verilation
- V3File.cpp:234: --check-times failed: different command line
- V3ParseImp.cpp:271: parseFile: multi_logic
Preprocessing multi_logic.v
- V3PreShell.cpp:147: Reading multi_logic.v
- V3ParseImp.cpp:320: Lexing multi_logic.v
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_001_linkcells.dot
- V3LinkLevel.cpp:45: modSortByLevel()
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_002_cells.tree
- V3LinkDot.h:37: linkDotPrimary:
- V3LinkJump.cpp:289: linkJump:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_007_link.tree
- V3LinkInc.cpp:248: linkIncrements:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_008_linkInc.tree
- V3Param.cpp:1225: param:
- V3LinkDot.h:42: linkDotParamed:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_010_paramlink.tree
- V3Dead.cpp:465: deadifyModules:
- V3Width.cpp:6158: width:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_012_width.tree
- V3Width.cpp:6201: widthCommit:
- V3Const.cpp:3309: constifyAllLive:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_014_const.tree
- V3Undriven.cpp:463: undrivenAll:
- V3AssertPre.cpp:207:assertPreAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_015_assertpre.tree
- V3Assert.cpp:476: assertAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_016_assert.tree
- V3LinkLevel.cpp:135:wrapTop:
- V3Const.cpp:3282: constifyAllLint:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_018_const.tree
- V3SplitVar.cpp:1250:splitVariable:
- V3Inst.cpp:618: dearrayAll:
- V3LinkDot.h:47: linkDotArrayed:
- V3Begin.cpp:293: debeginAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_023_begin.tree
- V3Tristate.cpp:1426:tristateAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_024_tristate.tree
- V3Unknown.cpp:489: unknownAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_025_unknown.tree
- V3Inline.cpp:712: inlineAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_026_inline.tree
- V3LinkDot.h:47: linkDotArrayed:
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_028_const.tree
- V3Dead.cpp:471: deadifyDTypes:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_029_deadDtypes.tree
- V3Inst.cpp:612: instAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_030_inst.tree
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_031_const.tree
- V3Scope.cpp:403: scopeAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_032_scope.tree
- V3LinkDot.h:52: linkDotScope:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_033_linkdot.tree
- V3Class.cpp:155: classAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_034_class.tree
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_035_const.tree
- V3Dead.cpp:477: deadifyDTypesScoped:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_036_deadDtypesScoped.tree
- V3Case.cpp:532: caseAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_037_case.tree
- V3Task.cpp:1729: taskAll:
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_038_task_call.dot
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_039_task.tree
- V3Name.cpp:144: nameAll:
- V3Unroll.cpp:511: unrollAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_041_unroll.tree
- V3Slice.cpp:238: sliceAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_042_slice.tree
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_043_const.tree
- V3Life.cpp:489: lifeAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_044_life.tree
- V3Table.cpp:427: tableAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_045_table.tree
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_046_const.tree
- V3Dead.cpp:477: deadifyDTypesScoped:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_047_deadDtypesScoped.tree
- V3Active.cpp:622: activeAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_048_active.tree
- V3Split.cpp:971: splitAlwaysAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_049_split.tree
- V3SplitAs.cpp:196: splitAsAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_050_splitas.tree
- V3TraceDecl.cpp:360:traceDeclAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_051_tracedecl.tree
- V3Gate.cpp:1602: gateAll:
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_052_gate_simp.dot
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_053_gate_opt.dot
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_054_gate.tree
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_055_const.tree
- V3Dead.cpp:490: deadifyAllScoped:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_056_deadAllScoped.tree
- V3Split.cpp:966: splitReorderAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_057_reorder.tree
- V3Delayed.cpp:512: delayedAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_058_delayed.tree
- V3ActiveTop.cpp:138:activeTopAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_059_activetop.tree
- V3Order.cpp:2018: orderAll:
- V3Order.cpp:949: Loading tree...
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_060_orderg_pre.dot
- V3Order.cpp:1957: Acyclic & Order...
- V3GraphAcyc.cpp:572:Acyclic
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_061_acyc_simp.dot
- V3GraphAcyc.cpp:553: Cutting trivial loops
- V3GraphAcyc.cpp:557: Ranking
- V3GraphAcyc.cpp:561: Placement
- V3GraphAcyc.cpp:455: Cutable edges = 0
- V3GraphAcyc.cpp:565: Final Ranking
- V3GraphAcyc.cpp:575:Acyclic done
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_062_orderg_acyc.dot
- V3GraphAlg.cpp:471: Order:
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_063_orderg_order.dot
- V3Order.cpp:1969: Process Clocks...
- V3Order.cpp:1972: Process Circulars...
- V3Order.cpp:1976: Domains...
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_064_orderg_domain.dot
- V3Order.cpp:1983: Construct Move Graph...
- V3Order.cpp:1992: Move...
- V3Order.cpp:2000: Sensitive...
dot -Tpdf -o ~/a.pdf obj_dir/Vmulti_logic_066_orderg_done.dot
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_067_order.tree
- V3GenClk.cpp:224: genClkAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_068_genclk.tree
- V3Clock.cpp:437: clockAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_069_clock.tree
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_070_const.tree
- V3Life.cpp:489: lifeAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_071_life.tree
- V3LifePost.cpp:349: lifepostAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_072_life_post.tree
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_073_const.tree
- V3Dead.cpp:490: deadifyAllScoped:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_074_deadAllScoped.tree
- V3Changed.cpp:288: changedAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_075_changed.tree
- V3Trace.cpp:905: traceAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_076_trace.tree
- V3Localize.cpp:203: localizeAll:
- V3Descope.cpp:268: descopeAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_078_descope.tree
- V3Combine.cpp:225: combineAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_079_combine.tree
- V3Const.cpp:3319: constifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_080_const.tree
- V3Dead.cpp:484: deadifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_081_deadAll.tree
- V3Clean.cpp:316: cleanAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_082_clean.tree
- V3Premit.cpp:429: premitAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_083_premit.tree
- V3Expand.cpp:947: expandAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_084_expand.tree
- V3Const.cpp:3291: constifyCpp:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_085_const_cpp.tree
- V3Subst.cpp:382: substituteAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_086_subst.tree
- V3Const.cpp:3291: constifyCpp:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_087_const_cpp.tree
- V3Dead.cpp:484: deadifyAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_088_deadAll.tree
- V3MergeCond.cpp:339:mergeAll:
- V3Reloop.cpp:269: reloopAll:
- V3Depth.cpp:160: depthAll:
- V3Branch.cpp:125: branchAll:
- V3Cast.cpp:203: castAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_092_cast.tree
- V3CCtors.cpp:174: cctorsAll:
- V3CUse.cpp:230: cUseAll:
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_093_cuse.tree
- V3EmitCInlines.cpp:56:emitcInlines:
- V3EmitCSyms.cpp:1038:emitcSyms:
- V3EmitCConstPool.cpp:190:emitcConstPool:
- V3EmitCModel.cpp:627:emitcModel:
- V3EmitC.cpp:1105: emitcTrace:
- V3EmitC.cpp:1084: emitc:
- V3EmitXml.cpp:378: emitxml:
- V3StatsReport.cpp:220:statsReport:
- V3EmitMk.cpp:410: emitmk:
- V3Os.cpp:95: export VERILATOR_ROOT=/usr/local/share/verilator # Hardcoded at build time
- V3Os.cpp:95: export SYSTEMC_ARCH=linux # From sysname 'linux'
- V3Ast.cpp:1125: Dumping obj_dir/Vmulti_logic_990_final.tree
- Verilator.cpp:732: Done, Exiting...
[Inferior 1 (process 28702) exited normally]
No stack.
如果输入:
verilator --cc --trace -exe --debug --debugi 9 --gdbbt multi_logic.v test_main.cpp 可以看到更详细的日志。
多线程的指令:
verilator --cc --trace --exe --build --debug --threads 2 --gdbbt multi_logic.v test_main.cppend
边栏推荐
- php laravel微信支付
- Array: question brushing record
- Android screen adaptation (using constraintlayout), kotlin array sorting
- Huawei modelarts training alexnet model
- Introduction to kubernetes resource objects and common commands (II)
- 奥迪AUDI EDI 项目中供应商需要了解哪些信息?
- 组件的自定义事件②
- Vhost kick & call principle
- How do the top ten securities firms open accounts? In addition, is it safe to open a mobile account?
- Download xshell and xftp
猜你喜欢

SharePoint - how to quickly check whether SharePoint is standard or enterprise edition?

web254

如何使用layui将数据库中的数据以表格的形式展现出来

Basic knowledge of MATLAB

源代码加密的意义和措施

Inftnews | from "avalanche" to Baidu "xirang", 16 major events of the meta universe in 30 years

2022年茶艺师(中级)复训题库及答案

SQL number injection and character injection

Download xshell and xftp

How relational databases work
随机推荐
Long way to go with technology
base64
Array: question brushing record
Software testing methods and techniques - overview of basic knowledge
STM32 uses esp01s to go to the cloud, mqtt FX debugging
Gru of RNN
How to use layui to display the data in the database in the form of tables
Lm08 mesh series mesh inversion (fine)
AArdio - 【问题】bass库回调时内存增长的问题
Saving db4i depth camera pictures with MATLAB
如何使用layui将数据库中的数据以表格的形式展现出来
Missing API interface actual development series (14): ID card real name authentication verification
Conscience Amway universal wheel SolidWorks model material website
【R语言】年龄性别频数匹配 挑选样本 病例对照研究,对年龄性别进行频数匹配
【R语言】两个/N个数据合并merge函数
PostgreSQL source code learning (26) -- windows vscode remote debugging PostgreSQL on Linux
[untitled]
2022危险化学品经营单位主要负责人试题及模拟考试
【网站架构】一招搞定90%的分布式事务,实打实介绍数据库事务、分布式事务的工作原理应用场景
kubernetes资源对象介绍及常用命令(二)