systemC全加器建模
阿新 • • 發佈:2018-07-04
RoCE ^c 時序 col oid 建模 fine def iostream 博主今天剛看完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全加器建模