当前位置:网站首页>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
边栏推荐
- Sorting out tcp/udp communication problems
- Array: question brushing record
- redisson使用全解——redisson官方文档+注释(中篇)
- She is the "HR of others" | ones character
- Php laraver Wechat payment
- redisson使用全解——redisson官方文檔+注釋(上篇)
- [recommendation system] breakthrough and imagination of deep location interactive network dpin for meituan takeout recommendation scenario
- Latex table
- Source code analysis of open source API gateway APIs IX
- How relational databases work
猜你喜欢

如何让两融交易更极速

STM32 uses esp01s to go to the cloud, mqtt FX debugging

How to use layui to display the data in the database in the form of tables

PostgreSQL source code learning (26) -- windows vscode remote debugging PostgreSQL on Linux

2022电工(中级)复训题库及答案

Wang Yingqi, founder of ones, talks to fortune (Chinese version): is there any excellent software in China?

【无标题】

Basic knowledge of MATLAB
![[recommendation system] breakthrough and imagination of deep location interactive network dpin for meituan takeout recommendation scenario](/img/10/ed857892d2e0ea72e100a4008e6d69.png)
[recommendation system] breakthrough and imagination of deep location interactive network dpin for meituan takeout recommendation scenario
![[kv260] generate chip temperature curve with xadc](/img/fc/e5e4648b09b1123b2d494b75a9f8f7.png)
[kv260] generate chip temperature curve with xadc
随机推荐
【批处理DOS-CMD-汇总】扩展变量-延迟变量cmd /v:on、cmd /v:off、setlocal enabledelayedexpansion、DisableDelayedExpansion
[recommendation system] breakthrough and imagination of deep location interactive network dpin for meituan takeout recommendation scenario
How to make the two financial transactions faster
Eigen matrix operation Library
TCP/UDP 通信问题整理
Latex formula code
Implementation and encapsulation of go universal dynamic retry mechanism
Browser local storage
Teach you how to apply for domestic trademark online step by step
下载Xshell和Xftp
2022制冷与空调设备运行操作国家题库模拟考试平台操作
力扣每日一题-第31天-1502.判断能否形成等差数列
What information does the supplier need to know about Audi EDI project?
038 network security JS
Tupu software has passed CMMI5 certification| High authority and high-level certification in the international software field
Gui Gui programming (XV) - use scale to control font size changes
The Windows C disk is full
web254
Atguigu---- scaffold --02- use scaffold (2)
go通用动态重试机制解决方案的实现与封装