SystemC学习笔记(3):2输入与非门的描述

一、实验环境

Vmware Workstation ACE Edition Version 6.0.1 build-55017

Debian Linux Version 2.6.18

SystemC Version 2.2.0

二、环境配置

1.OSCI官方网站(http://www.systemc.org/)下载最新版本的SystemC源程序文件systemc-2.2.0.tgz

2.加压缩并配置安装SystemC,大致过程及对应命令如下:

tar –xvzf systemc-2.2.0.tgz              ;解压缩到systemc-2.2.0文件夹

cd system-2.2.0

mkdir objdir          ;建立临时文件夹,用于存放SystemC安装文件

cd objdir

../configure –prefix=/home/user/systemc      ;执行配置文件,指定SystemC的安装路径

cd ..

make             ;重新编译SystemC

make install    ;安装SystemC

安装完毕,SystemC将安装在/home/user/systemc路径下,记住这个路径,因为后面编译SystemC源程序时需要指定头文件和目标文件的路径。

三、实验步骤

1.编辑SystemC源程序文件,其中nand2.h为定义2输入与非门的头文件,tb.h为定义验证程序的头文件,nand2.cpp为测试用主程序文件。

2.编译链接源程序文件并生成可执行文件nand2

       g++ nand2.cpp I/home/user/systemc/include L/home/user/systemc/lib-linux o nand2 lsystemc

注意在这个过程中所提供的-I-L-l参数,即头文件路径、库文件路径以及库文件名的正确性。

如果g++命令成功执行,则生成一个名为nand2的可执行文件。

3.执行nand2

       ./nand2

结果如下:

Info: (I804) /IEEE_Std_1666/deprecated: sc_start(double) deprecated, use sc_start(sc_time) or sc_start()

a=0,b=0,f=1

a=0,b=1,f=1

a=1,b=0,f=1

a=1,b=1,f=1

a=1,b=1,f=0

 

Info: (I804) /IEEE_Std_1666/deprecated: You can turn off warnings about

             IEEE 1666 deprecated features by placing this method call as the

             first statement in your sc_main() function:

 

  sc_report_handler::set_actions("/IEEE_Std_1666/deprecated", SC_DO_NOTHING);

从运行结果可以看出,其正确实现了2输入与非门的逻辑功能。

 

附:源程序列表

1.nand2.h

#ifndef _NAND2_H

#define _NAND2_H

#include <systemc.h>

#include <math.h>

SC_MODULE(nand2){

       sc_in<bool> A;

       sc_in<bool> B;

       sc_out<bool> F;

      

       void do_nand(){

              F=!( A & B);

       };

       SC_CTOR(nand2){

              SC_METHOD(do_nand);

              sensitive<<A<<B;

       }

};

#endif

 

2.tb.h

#ifndef _TB_H

#define _TB_H

SC_MODULE(tb)

{

       sc_out<bool> a,b;

       sc_in<bool> f;

       sc_in_clk clk;

      

       void gen_input(){

              ait(); a=0; b=0;

              ait(); a=0; b=1;

              wait(); a=1; b=0;

              wait(); a=1; b=1;

              wait(100);

       }

       void display_variable() {

              out<<"a="<<a<<",b="<<b<<",f="<<f<<endl;

       }       

       SC_CTOR(tb)       {

              C_CTHREAD(gen_input,clk.pos());  

        SC_METHOD(display_variable);

              ensitive<<f<<a<<b;

              dont_initialize();

       }

};

#endif

 

3.nand2.cpp

#include <systemc.h>

#include "nand2.h"

#include "tb.h"

int sc_main(int, char**){

       sc_signal<bool> a,b,f;

       sc_clock clk("Clk",20,SC_NS);

       nand2 N2("Nand2");

       N2.A(a);

       N2.B(b);

       N2.F(f);

       tb tb1("tb");

       tb1.clk(clk);

       tb1.a(a);

       tb1.b(b);

       tb1.f(f);

       sc_start(200);

       return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值