目录
3.1 Error-[SC-SYSCAN-OCOMP] Unsupported compiler
3.2 Error-[SC-SYSCAN-PERL-N] Cannot find perl5
以一个加法器(Adder)为例,展示第一个SystemC程序。
VCS自带了一系列的SystemC例程,位于<$VCS_HOME/doc/examples/systemc/>目录下。本文所述的加法器,其完整工程文件,位于上述目录下的<./vcs/simple/>目录:
[user@centos7 simple]$ ll
-rwxrwxr-x. 1 user user 1362 Oct 29 10:23 adder.h # Main Adder Program
-rwxrwxr-x. 1 user user 1531 Oct 29 10:23 adder.cpp # include adder.h
-rwxrwxr-x. 1 user user 2712 Oct 30 11:09 top.v # Testbench Top
-rwxrwxr-x. 1 user user 890 Oct 30 11:13 Makefile # Script for Running Sim
-rwxrwxr-x. 1 user user 1305 Oct 29 10:23 README
-rw-rw-r--. 1 user user 178 Oct 30 11:06 run.tcl # Script for Dump FSDB (Mannually Created)
...
1 代码文件介绍
1.1 adder.h文件
此文件,包含了一个SystemC形式的加法器的所有逻辑代码,包括顶层端口声明、内部逻辑实现:
SC_MODULE(adder)
{
public:
sc_in<sc_lv<32>> ina;
sc_in<sc_lv<32>> inb;
sc_out<sc_lv<32>> outx;
SC_CTOR(adder): ina("ina") , inb("inb"), outx("outx") {
SC_METHOD(adder_action);
sensitive << ina << inb;
}
// As inputs are triggered, drive the output.
void adder_action() {
sc_lv<32> val;
val = ina.read();
val = val.get_word(0) + inb.read().get_word(0);
outx.write( val );
}
};
1.2 adder.cpp文件
此文件,仅Include了上述addr.h文件,无其他逻辑代码:
#include "adder.h"
1.3 top.sv文件
此文件,作为整个仿真的顶层,完成对加法器的实例化,以及时钟信号、加法器输入激励的构造,仿真结束的控制:
`define W 31
module top();
parameter PERIOD = 20;
reg clock;
reg [`W:0] value1;
reg [`W:0] value2;
wire [`W:0] add_wire;
integer counter;
integer direction;
integer cycle;
// SystemC model
adder add1(value1, value2, add_wire);
initial begin
value1 = 32'b010; // starts at 2
value2 = 32'b000; // starts at 0
counter = 0;
direction = 1;
cycle = 0;
end
// clock generator
always begin
clock = 1'b0;
#PERIOD
forever begin
#(PERIOD/2) clock = 1'b1;
#(PERIOD/2) clock = 1'b0;
end
end
// stimulus generator
always @(posedge clock) begin
value1 <= counter+2;
value2 <= 32'b010; // stays at 2 after here.
if (d