SystemC教程-模块和进程(Modules and Processes)

本节包含一个完整的简单设计,以演示SystemC中模块和进程的使用。

为了简单起见,它是非常低的水平 - 不是你通常在系统级设计语言期望的编码风格!

所展示的要点是

  • 创建层次结构
  • 所述sc_signal原始信道
  • (专门)端口
  • 进程(SC_METHODSC_THREADSC_CTHREAD
  • 一个简单的测试台(test bench)

SystemC背景

为什么要看模块和进程?原因在于SystemC的目的是要处理硬件和软件,并允许大型系统建模。

进程是与其他进程同时运行的小块代码。几乎所有开发的高级系统级设计(SLD)工具都使用了一个流程网络的基础模型。SystemC提供进程来支持构建独立(并行/并行)代码段的网络。

SLD需要处理大型设计。为了应付这种情况,通常使用层次结构。SystemC中通过使用模块实现层次结构,该模块可以使用端口链接到其他模块。模块允许一个设计单独工作。模块可能包含进程和其他模块的实例。

示例设计

该设计由一个用四个与非门(NAND)实现的异或(EXOR)门组成。此外,重要的是要注意,这不是一个典型的设计风格 - 但它是好的,简单的理解。设计看起来像这样

第一步是模拟NAND门。与非门是一个组合电路; 其输出纯粹是输入值的函数。它没有记忆,也不需要时钟。正因为如此,该模型可以使用最简单的一种SystemC进程,SC_METHOD

SC_METHOD只是C ++函数。因此,SystemC类库必须使它们像进程一样工作。尤其是

  • SystemC类库包含一个模拟内核 - 一段代码,用于模拟时间的流逝,并调用函数来计算输ru发生变化时的输出。
  • 该函数必须声明为SC_METHOD,并对其输入敏感。

这是NAND门的代码,在一个文件nand.h中

#include“systemc.h”
SC_MODULE(nand2)//声明nand2 sc_module
{
  
  sc_in <bool> A,B; //输入信号端口
  sc_out <bool> F; //输出信号端口

  void do_nand2()//一个C ++函数
  {
  
    F.write(!(A.read()&& B.read()));
  }

  SC_CTOR(nand2)// nand2的构造函数
  {
  
    SC_METHOD(do_nand2); //用内核注册do_nand2函数作 进程
    sensitive << A << B ;		//敏感表
  } 
};

SystemC中的层次结构是使用类sc_module创建的可以直接使用sc_module,也可以使用宏SC_MODULE “隐藏” 上面的例子SC_MODULE创建一个名为nand2sc_module类对象

接下来是声明的输入和输出端口。通常,使用类sc_port声明一个端口例如,使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值