systemC全加器建模

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了systemC全加器建模相关的知识,希望对你有一定的参考价值。

博主今天刚看完systemC的时序建模和组合建模部分,就开始写sc代码了,但遇到了很多错误。。。

base.h头文件:

#ifndef _base_
#define _base_
#include "systemc.h"
#include <iostream>
#endif

关于全加器的定义 full_adder.h :

#include "base.h"
#ifndef _full_adder_
#define _full_adder_
SC_MODULE(Full_Adder)
{
    sc_in<bool>   a , b , carry_in ;
    sc_out<bool>  sum , carry_out ;
    
    void Full_Adder_Proc();
    
    SC_CTOR(Full_Adder){
        SC_METHOD(Full_Adder_Proc);
        sensitive<<a<<b<<carry_in ;
    }
};
#endif

关于全加器的函数 full_adder.cpp :

#include "full_adder.h"
void Full_Adder::Full_Adder_Proc(){
    sum = a^b^carry_in ;
    carry_out = a&carry_in |  b&carry_in | a&b ;
}

关于信号驱动的头文件  driver.h:

#include "base.h"
#ifndef _driver_
#define _driver_
SC_MODULE(driver)
{
    sc_out<bool > d_a , d_b , d_cin;
    
    void driver_proc();
    
    SC_CTOR(driver){
        SC_METHOD(driver_proc);
    }
};
#endif

关于信号驱动的实现代码driver.cpp:

#include "driver.h"
void driver::driver_proc(){   
 sc_uint<3> temp;  
       
 temp = 0 ;    
    
  while(1){       
           d_a = temp[0];      
           d_b = temp[1];        
           d_cin = temp[2]; 
          
           wait(5,SC_NS);       
           temp++;    
          };    
}

关于monitor的头文件:

#include "base.h"
#ifndef _monitor_
#define _monitor_
SC_MODULE(Monitor){
    sc_in<bool> a , b , carry_in , sum , carry_out ;
    
    void Monitor_Proc();
    
    SC_CTOR(Monitor){
            SC_METHOD(Monitor_Proc);
            sensitive<<a<<b<<carry_in<<sum<<carry_out ;
    }
};
#endif

关于monitor的实现:

#include "monitor.h"
void Monitor::Monitor_Proc(){
    std::cout<<" a:"<<a<<" b:"<<b<<" cin:"<<carry_in;
    std::cout<<"sum:"<<sum<<" cout:"<<carry_out<<std::endl;
}

期间博主犯了两个很傻的错误:

(1)   其中一个文件把#ifndef  写成了 #ifdef

(2)   构造函数SC_CTOR写成了SC_STOR

导致一直编译不能通过。。。。。。。。。。

在解决这些问题后,终于正常通过了,正打算看看结果,却发现:

技术分享图片

似乎和systemC内建的关键字冲突了,后来改了Driver,但还是显示相同的警告。

由于还没开始学习如何编写sc测试平台,所以暂时还不知道为什么会这样。。

暂且把问题留在这吧,等博主过段时间再来解答

以上是关于systemC全加器建模的主要内容,如果未能解决你的问题,请参考以下文章

systemC三态建模

systemC的组合逻辑建模

SystemC事务级建模03之DMI

SystemC传输级别建模从tlm_generic_payload中提取两个整数

jchdl进展 - 20180918

从验证的角度,systemverilog和systemc谁更合适