SystemC学习(4)— 在VCS中运行SystemC

一、前言

参考:VCS编译verilog&SystemC

二、仅包含SystemC的仿真

源文件使用上一篇:SystemC学习(3)— APB_SRAM的建模与测试

编写makefile如下所示:

all: comp sim

comp:
	vcs -full64 -debug_acc+pp+dmptf -debug_region+cell+encrypt -sysc=show_sc_main \
	-sysc sc_main apb_sram/main.cpp -l comp.log

sim:
	./simv -ucli -do ./vcs.tcl -l sim.log

clean:
	rm -rf csrc/ simv simv.daidir

cleanall: clean
	rm -rf 64 AN.DB/ ucli.key novas.* *Log *log

编写vcs.tcl 如下所示:

fsdbDumpvars sc_main.dut 0

run
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) begin
        if(!apb_presetn) begin
            apb_prdata  <= 0;
            apb_pready  <= 0;
            apb_pslverr <= 0;
        end
        else if((apb_psel==1) && (apb_penable==0) && (apb_pwrite==0)) begin
            apb_prdata <= mem[apb_paddr[ADDR_SIZE-1:2]];
        end
        else if((apb_psel==1) && (apb_penable==1) && (apb_pwrite==0)) begin
            apb_pready <= 1;
        end
        else if((apb_psel==1) && (apb_penable==1) && (apb_pwrite==1)) begin
            mem[apb_paddr[ADDR_SIZE-1:2]] <= apb_pwdata;
            apb_pready <= 1;
        end
        else begin
            apb_prdata <= apb_prdata;
            apb_pready <= 0;
        end
    end
endmodule

makefile修改为如下所示:



all: comp sim

comp:
	vlogan -full64 -sverilog -sysc -sc_model apb_sram -sc_portmap the.map apb_sram/apb_sram.v
	vcs -full64 -debug_acc+pp+dmptf -debug_region+cell+encrypt \
	-sysc apb_sram/main.cpp -sysc=show_sc_main -l comp.log -timescale=1ns/1ps

sim:
	./simv -ucli -do ./vcs.tcl -l sim.log

clean:
	rm -rf csrc/ simv simv.daidir

cleanall: clean
	rm -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波形文件看到如下所示:
在这里插入图片描述

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部