PART 01 所学资源
01 头文件
#include <stdlib.h>
#include <iostream>
#include <cstdlib>
#include <verilated.h> //这个+后面的为了产生波形vcd
#include <verilated_vcd_c.h>
#include "Valu.h" //这个+后面都是在obj_dir文件中的函数,其中Valu.h是主要设计的头部函数,包含了转换后的ALU类定义
#include "Valu___024unit.h" //是ALU的内部头标
#define MAX_SIM_TIME 300
#define VERIF_START_TIME 7
vluint64_t sim_time = 0;
vluint64_t posedge_cnt = 0;
简单形式testbench
#include <stdlib.h>
#include <iostream>
#include <verilated.h>
#include <verilated_vcd_c.h>
#include "Valu.h"
#include "Valu___024unit.h"
#define MAX_SIM_TIME 20 //设置最大仿真时间
vluint64_t sim_time = 0; //用sim_time追踪何时完成仿真
int main(int argc, char** argv, char** env)
{
Valu *dut = new Valu; //例化alu模块
Verilated::traceEverOn(true);
VerilatedVcdC *m_trace = new VerilatedVcdC;
dut->trace(m_trace, 5); //创建m_trace并传递给dut,参数5只是将追踪深度限制在被测设备的5层(lever)
m_trace->open("waveform.vcd");
/* while (sim_time < MAX_SIM_TIME) {
dut->clk ^= 1;//反转clk(可创建上升沿/下降沿
dut->eval();//评估alu的所以信号
m_trace->dump(sim_time);//把被追踪信号值传递给波形图,目前只有clk模块
sim_time++;
}*/ 此部分和实现内容有关,其余为框架代码
m_trace->close();
delete dut;
exit(EXIT_SUCCESS);
}
产生波形图如下