专业网站建设模块维护,wordpress 当前栏目名,网站怎么更换页面图片,企业整站seo简述
波形在Simulation/Emulation中地位十分重要#xff0c;尤其是在研发初期#xff0c;只能通过波形来查看软件hang住的位置。 对于TLM来说#xff0c;查看波形一般是指查看pvbus上的transaction#xff0c;而对于SystemC本身来说#xff0c;查看波形就是使用Gtkwave或…简述
波形在Simulation/Emulation中地位十分重要尤其是在研发初期只能通过波形来查看软件hang住的位置。 对于TLM来说查看波形一般是指查看pvbus上的transaction而对于SystemC本身来说查看波形就是使用Gtkwave或其他EDA工具查看Module的input/output的时序输入/输出其本质和硬件设计的Verilog/VHDL的波形基本一样。
工具准备
我在MacOS下使用的是GtkWave来查看生成的波形systemc里一般使用vcd文件来记录波形。 GtkWave在MacOS下的安装非常简单直接brew即可
brew install gtkwave测试代码
代码准备
下面代码的主体实际是gpt生成的主要修改了一些编译的bug。 整个代码逻辑非常简单就是一个timer模块输入是1ns周期的clk输出是根据clk每15ns为一个周期高电平输出5ns低电平输出15ns。 具体的代码含义已经在注释中不再赘述。 sc_create_vcd_trace_file是用于抓取信号vcd波形的接口。
#include systemc.hSC_MODULE(timer)
{sc_in_clk clk; // 输入时钟信号sc_outbool pulse; // 输出脉冲信号SC_CTOR(timer){// 在时钟上升沿触发的进程SC_THREAD(process);sensitive clk.pos();}// 进程定义void process(){while(true) {pulse.write(true); // 输出高电平wait(5, SC_NS); // 等待5ns即1个clk周期pulse.write(false); // 输出低电平wait(10, SC_NS); // 等待10ns即1个clk周期}}
};int sc_main(int argc, char *argv[])
{sc_clock clk(clk, 1, SC_NS); // 创建1ns周期的时钟信号timer t(timer); // 创建timer模块实例sc_bufferbool pulse_out;// 将时钟信号连接到timer模块t.clk(clk);// 将pulse_out信号连接到timer模块t.pulse(pulse_out);// 输出脉冲信号绑定到名为pulse的终端sc_trace_file *tf sc_create_vcd_trace_file(timer);sc_trace(tf, t.clk, clk);sc_trace(tf, t.pulse, pulse);// 开始仿真sc_start(50 * 10, SC_NS); // 仿真50*10个clk周期// 关闭波形文件sc_close_vcd_trace_file(tf);return 0;
}编译执行
如下按照正常的编译执行 执行完.x文件后目录下生成了一个vcd文件。
查看波形
用gtkwave打开vcd文件选取clk和pulse信号查看其输出发现和代码设计一致说明我们代码写的没问题
btw: GtkWave在Windows下速度超级拉胯在MacOS下速度竟然很流畅有点意外。。。。可能GtkWave原本是为Unix系统设计的