[VIP专享]systemc 心得

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. module是一个类,从sc_module扩展而来,包含其他modules以及

processes,channels and ports。

2. simulation process是由systemc kernel调度执行,它是sc_module的成员函数,并被注册登记到simulation kernel中。由此simulation kernel是这些simulation process唯一

的caller,那么这些simulation process没必要带参数和返回值了。sc_module中也可定义一些process,但这些process不被simulation kernel调用,仅仅是一些被simulation process调用的函数。

3. simulation process的registeration发生在elaboration的时候,即module的constructor执行的时候(使用SC_METHOD,SC_THREAD)。

4. SC_METHOD 是sc_module的成员函数,它没有任何参数和返回值,被simulation kernel不停的反复调用,一旦执行无延迟并执行到底。而SC_THREAD只执行一次带延迟,会挂起自己并等待。

5. static sensitivity 和dynamic sensitivity。对于动态敏感,SC_METHOD用

next_trigger(arg), SC_THREAD用wait(arg)来实现。

6. systemC的datatype由类模板以及运算符重载来实现。

supported data type = Native C++ data type + STL data type + SystemC datatype( logic, integers and fixed-point)

systemc 还提供了systemc data type 和C++ data type 之间的转化函数。所有的systemc data type都属于sc_dt namespace。

1. logic :sc_bv, sc_lv, bool, sc_logic,

注意sc_bit 被C++里面的bool取代了。

2. integer:sc_int, sc_uint (其中W<=64) , sc_bigint,

sc_biguint (其中BITWIDTH>64)

systemC的integer比传统的C++的integer类型提供了bit操作和concatination以及可配置位宽。

3. fixed point:sc_fixed

1.DataStream d1, d2;

2.SC_FORK

3. sc_spawn( sc_bind(&dut::AXI_xmt,this,sc_ref(d1)), "p1")

4.,sc_spawn(sc_bind(&dut::PCIX_rcv,this,sc_ref(d1)),"p2")

5.,sc_spawn(sc_bind(&dut::USB2,this,sc_ref(d1)), "p3")

6.,sc_spawn(sc_bind(&dut::HT1_xtm,this,sc_ref(d2)), "p4")

7.,sc_spawn(sc_bind(&dut::HT2_rcv,this,sc_ref(d2)), "p5")

8.SC_JOIN

为了帮助有效地进行communication,引入了channel的概念。sc_prim_channel扩展出了三个primitive channel: sc_mutex, sc_semaphore, sc_fifo。这些primitive channel 实现了对应的interface:sc_mutex_if; sc_semaphore_if;

sc_fifo_in_if;sc_fifo_out_if;

6)对于sc_signal 还有signame.posedge_event, signame.negedge_event.

7)request update 讲解

当一个process调用write method时,write method先将值写入New value存储区域,然后调用sc_primitive_channel::request_update() method 来通知simulation kernel。当update phase 到来时,kernel 自动调用曾在evaluation phase 时请求更新(request update)的channel 中的 update()method。这个update() method不光拷贝new value 到current value,而且会解决竞争,以及notify一些事件从而唤醒某些进程。

1. Design Hierarchy

2. How to creat hierarchy

3. process间的通讯

1. 和同层process通讯是通过event以及interface. 如下

process<-->interface<-->channel<-->interface<-->process。

2. 通过port和module外部通讯

3.和同层子module通讯是通过interface。如下 process<-->interface<--->channel<--->submodule port

或者 process<-->interface<---> sc_export

Standard Interface

1. FIFO interface

sc_fifo channel 由sc_fifo_in_if 以及sc_fifo_out_if扩展而来。所谓interface的out于in是相对于module的port而言的。sc_fifo_in_if提供了所有的从FIFO输入到module的纯虚函数。而sc_fifo_out_if提供了所有的从module输出到FIFO的纯虚函数。其中read和write函数是blocking的(FIFO空或满时等待)

相关文档
最新文档