1、sc_port关联sc_interface和channel。sc_module聚合sc_module、var、process和sc_port。sc_cthread和sc_method继承sc_thread。
sc_interface中声明很多虚函数,作为接口函数实现接口功能,如send()、recv()等。可以通过发送和接收模块的端口调用(sc_in/sc_port<sc_interface>->send()),实现模块通信。
2、通道实现(继承)了一个或者多个接口。
端口总是与一定的接口类关联sc_in<sc_myInterface>,端口只能连接到实现了该类接口的通道上。
通过端口,模块中的进程可以连接到通道并使用通道提供的方法。
3、通道分为基本通道和分层通道,基本通道是非结构化的,不包含进程,也不能直接读写其他基本通道。而分层通道是一个特殊模块,它可以包含子模块和进程,当然也可以直接读写其他通道。
4、端口和通道可以通过端口(通道),实现通道和端口的绑定。如:fifo_out/in(fifo)实现端口和通道的绑定,给post1写数据就会把数据写到fifo1中。通道允许并行操作,如果同时读写,则读的结果是写入之前的值。示例:
sc_fifo_out<int> out;
sc_fifo_in<int> in;
sc_fifo<int> fifo;
out(fifo);
in(fifo);
out.write(1);
in.read();
5、wait_for_request()等待请求信号,wait_for_response()等待响应信号。
6、sc_port<ram_if<int>,3>一个端口可以绑定多个接口。
7、sc_fifo是一个模板类。创建:sc_fifo<int> my_fifo(10)创建深度为10的my_fifo。my_fifo.write()写fifo、my_fifo.read()读fifo、my_fifo.nb_write()不阻塞写、my_fifo.nb_read()不阻塞读。my_fifo.num_available()获取my_fifo中的元素个数、my_fifo.num_free()获取fifo中的空闲空间数。
8、代码中可以添加静态规则检查和动态规则检查,避免异常。sc_get_curr_process_handle()获取当前进程句柄。通道属性描述通道的一些特征,比如优先级等。
9、常见通道:sc_signal<T>、sc_signal_rv<T>和sc_fifo<T>。
10、sc_semaphore:信号量,是操作系统提供的管理公有资源的有效手段。代表可用资源实体的数量,主要用于限制同时使用某个共享资源的进程的数量。用法:
#include <boost/interprocess/sync/semaphore.hpp>
boost::interprocess::seaphore sem(2(初始计数为2))
sem.wait();//等待信号量
共享资源代码
sem.post();//释放信号量
11、
寄存器传输层:描述存储单元和组合逻辑块之间的互连关系。形成最终可综合的VHDL,verilog或者SystemC代码。
传输层:的系统建模一般对应着一定的总线协议。这一层的建模需要提供一个精确到时钟周期、符合协议要求的模块互连机制。为IP模块的抽象仿真模型提供精确到周期的接口。
交易层:描述发起设备和目标设备的数据传输,与协议无关。主要用于性能和行为分析。
消息层:以事件驱动系统执行,系统层概念。主要用于制定可执行设计规范和功能划分等。
12、TLM模型:SystemC开发的事务级模型,包含事件正确执行顺序,而且没有底层物理延时,高级数字系统模型化方法。作用:1、抽象通信细节;2、快速搭建架构模型;3、支持软硬件协同设计;4、提高仿真速度,比RTL快1000~10000倍。
13、交易级建模系统一般带有一个或者多个嵌入式微处理器和相应的片上总线通信结构,完成各个功能模块之间的相互通信。主要是利用systemC进行相应的通信抽象,实现通信机制。特点:功能和通信分离;调用接口方法。
14、通信细化,通过适配器,在保持接口不变的情况下,将某个单元的功能模型向更低级别的模型实现细节转化。
15、行为级建模三个关键抽象:行为、状态和事件。