当前位置:网站首页>EDA open source simulation tool verilator beginner 6: debugging examples
EDA open source simulation tool verilator beginner 6: debugging examples
2022-07-01 07:59:00 【I_ belong_ to_ jesus】
verilog Code :
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 Code :
#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" // Optional , If you want to export vcd You need to add
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; // initialization VCD Object pointer
contextp->traceEverOn(true); // Turn on the tracking function
multiLogic->trace(tfp, 0); //
tfp->open("wave.vcd"); // Set the output file 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); // Drive simulation time
if (count > 25)
break;
//assert(top->f == ~((a&b) | (~(c&d))));
}
delete multiLogic;
tfp->close();
delete contextp;
return 0;
}Single threaded input instructions :
verilator -Wall --cc --trace --exe --build multi_logic.v test_main.cppMultithreaded input instructions :
verilator -Wall --cc --trace --exe --build --threads {2} multi_logic.v test_main.cppSingle thread debug Input instruction :
verilator --cc --trace -exe --debug --gdbbt multi_logic.v test_main.cppConduct debug, The output is as follows :
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.
If input :
verilator --cc --trace -exe --debug --debugi 9 --gdbbt multi_logic.v test_main.cpp You can see more detailed logs .
Multithreaded instructions :
verilator --cc --trace --exe --build --debug --threads 2 --gdbbt multi_logic.v test_main.cppend
边栏推荐
- Discussion on several research hotspots of cvpr2022
- 【R语言】两个/N个数据合并merge函数
- The database is locked. Is there a solution
- MATLAB之基础知识
- Basic knowledge of MATLAB
- Scala语言学习-07-构造器
- Aardio - Shadow Gradient Text
- PHP laravel wechat payment
- Rk3399 platform development series explanation (network debugging) 7.30. What will affect the sending process of TCP packets?
- Software testing methods and techniques - overview of basic knowledge
猜你喜欢
随机推荐
web254
Software testing methods and techniques - overview of basic knowledge
Implementation and encapsulation of go universal dynamic retry mechanism
Huawei modelarts training alexnet model
How to check ad user information?
Two expressions of string
Gui Gui programming (XV) - use scale to control font size changes
Aardio - 阴影渐变文字
Lm08 mesh series mesh inversion (fine)
ONES 创始人王颖奇对话《财富》(中文版):中国有没有优秀的软件?
【入门】提取不重复的整数
【mysql学习笔记27】存储过程
How relational databases work
base64
Sqlalchemy creating MySQL_ Table
How to get a SharePoint online site created using the office365 group template
Kickback -- find the first palindrome character in a group of characters
web254
奥迪AUDI EDI 项目中供应商需要了解哪些信息?
[skill] create Bat quick open web page

![[kv260] generate chip temperature curve with xadc](/img/fc/e5e4648b09b1123b2d494b75a9f8f7.png)






