SystemC学习(4)— 在VCS中运行SystemC
一、前言
参考:VCS编译verilog&SystemC
二、仅包含SystemC的仿真
源文件使用上一篇:SystemC学习(3)— APB_SRAM的建模与测试
编写makefile
如下所示:
all: comp simcomp:vcs -full64 -debug_acc+pp+dmptf -debug_region+cell+encrypt -sysc=show_sc_main \-sysc sc_main apb_sram/main.cpp -l comp.logsim:./simv -ucli -do ./vcs.tcl -l sim.logclean:rm -rf csrc/ simv simv.daidircleanall: cleanrm -rf 64 AN.DB/ ucli.key novas.* *Log *log
编写vcs.tcl
如下所示:
fsdbDumpvars sc_main.dut 0run
finish
编译运行后可以打开novas.fsdb
波形文件如下所示:
三、Verilog和SystemC混合仿真
我们将apb_sram修为如下apb_sram.v
文件:
parameter ADDR_SIZE = 32;
parameter DATA_SIZE = 32;module apb_sram(input apb_pclk,input apb_presetn,input apb_psel,input apb_penable,input apb_pwrite,input [ADDR_SIZE-1:0] apb_paddr,input [DATA_SIZE-1:0] apb_pwdata,output reg [DATA_SIZE-1:0] apb_prdata,output reg apb_pready,output reg apb_pslverr);bit [DATA_SIZE-1:0] mem[4096];always @(posedge apb_pclk or negedge apb_presetn) beginif(!apb_presetn) beginapb_prdata <= 0;apb_pready <= 0;apb_pslverr <= 0;endelse if((apb_psel==1) && (apb_penable==0) && (apb_pwrite==0)) beginapb_prdata <= mem[apb_paddr[ADDR_SIZE-1:2]];endelse if((apb_psel==1) && (apb_penable==1) && (apb_pwrite==0)) beginapb_pready <= 1;endelse if((apb_psel==1) && (apb_penable==1) && (apb_pwrite==1)) beginmem[apb_paddr[ADDR_SIZE-1:2]] <= apb_pwdata;apb_pready <= 1;endelse beginapb_prdata <= apb_prdata;apb_pready <= 0;endend
endmodule
makefile
修改为如下所示:
all: comp simcomp:vlogan -full64 -sverilog -sysc -sc_model apb_sram -sc_portmap the.map apb_sram/apb_sram.vvcs -full64 -debug_acc+pp+dmptf -debug_region+cell+encrypt \-sysc apb_sram/main.cpp -sysc=show_sc_main -l comp.log -timescale=1ns/1pssim:./simv -ucli -do ./vcs.tcl -l sim.logclean:rm -rf csrc/ simv simv.daidircleanall: cleanrm -rf 64 AN.DB/ ucli.key novas.* *Log *log
the.map
文件如下所示:
#port width Verilog SystemC
ina 32 bitvector int
inb 32 bitvector int
outx 32 bitvector int
编译运行后可以打开novas.fsdb
波形文件看到如下所示: