当前位置:网站首页>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.cpp
Multithreaded input instructions :
verilator -Wall --cc --trace --exe --build --threads {2} multi_logic.v test_main.cpp
Single thread debug Input instruction :
verilator --cc --trace -exe --debug --gdbbt multi_logic.v test_main.cpp
Conduct 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.cpp
end
边栏推荐
- MATLAB之基础知识
- How relational databases work
- Rk3399 platform development series explanation (network debugging) 7.30. What will affect the sending process of TCP packets?
- Li Kou daily question - day 31 -202 Happy number
- Latex table
- EDA开源仿真工具verilator入门6:调试实例
- Long way to go with technology
- Redisson watchdog mechanism, redisson watchdog performance problems, redisson source code analysis
- Inftnews | from "avalanche" to Baidu "xirang", 16 major events of the meta universe in 30 years
- Redisson uses the full solution - redisson official documents + comments (Part 2)
猜你喜欢
window c盘满了
5大组合拳,解决校园6大难题,护航教育信息化建设
Android screen adaptation (using constraintlayout), kotlin array sorting
论文学习——水文时间序列相似性查询的分析与研究
奥迪AUDI EDI 项目中供应商需要了解哪些信息?
What information does the supplier need to know about Audi EDI project?
QT -- 1. QT connection database
She is the "HR of others" | ones character
Gru of RNN
2022 operation of refrigeration and air conditioning equipment operation of national question bank simulated examination platform
随机推荐
Long way to go with technology
凸印的印刷原理及工艺介绍
[batch dos-cmd command - summary and summary] - Common operators in the CMD window (<, < <, & <,>, > >, & >, & >, & &, ||, (),;, @)
038 network security JS
2022 test question bank and simulation test of tea master (primary) operation certificate
2022 Guangdong Provincial Safety Officer a certificate third batch (main person in charge) special operation certificate examination question bank simulated examination platform operation
Li Kou daily question - Day 32 -1822 Symbol of array element product
Array: question brushing record
IMDB practice of emotion classification (simplernn, LSTM, Gru)
LM08丨网格系列之网格反转(精)
The triode is a great invention
力扣每日一题-第31天-1502.判断能否形成等差数列
力扣每日一题-第31天-202.快乐数
Gdip - hatchBrush图案表
MATLAB之基础知识
三极管是一项伟大的发明
Discussion on several research hotspots of cvpr2022
uni 热更新
Microsoft stream - how to modify video subtitles
[website architecture] solve 90% of distributed transactions in one move, and introduce the working principles and application scenarios of database transactions and distributed transactions