0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SystemC中的模块与进程

麦辣鸡腿堡 来源:TrustZone 作者:TrustZone 2023-11-02 15:31 次阅读

SystemC中的模块

模块(SC_MODULE)是SystemC系统建模的一个基本单位。一个系统由许多个模块构成,各个模块实现系统中不同的功能。在设计中,设计者需要根据功能把复杂的系统划分成若干个更小、更易于管理的模块。模块内部包含若干个进程(Process)来描述模块的功能。

一个模块可以包含端口、内部信号、内部数据、子模块、进程、构造函数和析构函数等,这些元素实现了模块要求的功能。SC_MODULE是SystemC库中定义的一个宏,使用它定义一个模块实际上是定义了一个新对象。下面是一个半加器的例子:

//File:myand.h
#include < systemc.h > //该文件中存有SystemC类库的定义,所有SystemC模块都
//必须包含这个文件
SC_MODULE (myand) //这个模块的名字为myand
{
   sc_in< bool > a,b; //输入端口
   sc_out< bool > c; //输出端口
   void proc_and ( ); //声明进程proc_and
   SC_CTOR (myand) { //构造函数
       SC_METHOD (proc_and); //proc_and是一个SC_METHOD型进程
       sensitive < < a < < b ; //敏感变量
   }
}
//myand.cpp //这个文件存放进程的定义
#include "myand.h″
void myand::proc_and( )
{
     c=a.read( ) & b.read( );
}

模块与模块之间通过通道实现通信,而进程之间则利用通道或事件互相通信。这是最基本的系统建模概念。模块、端口、接口和通道这些概念在4.7.6节事务级建模中已经有过介绍。

信号是SystemC中新增加的一个概念,模块之间的通信需要通过端口连接到通道。信号(以sc_signal为例)实现模块之间端口的连接。信号也是一种通道。

信号与Verilog中的wire类似,可以实现模块之间的互连,这是一种硬件方式的互连,因此是可综合的设计。信号一般通过read( )和write( )函数来读/写,由于信号总是连接到端口上,如sc_in、sc_out及sc_inout 等,也可以通过端口读/写信号。

其中,sc_in端口支持read( )、event( )、posedge( )及negedge( )4种方法,而sc_out和sc_inout还支持write( )方法。

SystemC中的进程

进程是SystemC中基本的运行单元,调用进程可以仿真目标设备或系统的行为。进程是一个独立的处理单元,可以实现SystemC中并发的行为动作。

并发是SystemC在C++基础上新增加的概念。对于每个独立的进程来说,只有在它的敏感信号或敏感事件发生时进程才会被调用,而在其他情况下处于保持状态。

当多个独立的进程有同一个敏感变量时,这个敏感变量可以触发这些进程的调用,实现并发的行为。SystemC的进程有3种:SC_METHOD、SC_THREAD、C_CTHREAD。

  • • 方法进程(SC_METHOD)是目前唯一可综合的寄存器传输级进程,它可以描述同步或非同步系统。方法进程由sensitive()、sensitive_pos( )、sensitive_neg( )等函数中的敏感信号触发。当敏感列表上有事件发生时,方法进程就会被调用。方法进程调用后需要立即返回,因此在该进程中不允许使用wait( )之类的语句。方法进程由于面向可综合的设计,而且方法进程的调用特性使它更倾向于在较低的抽象层次上使用,如在寄存器传输层次上。
  • • 线程进程(SC_THREAD)在执行过程中能够被挂起和重新激活,可以使用wait( )语句执行挂起动作,当敏感事件发生时被重新激活执行。由于线程进程的这个特点,它更加适合于较高抽象层次上的行为和系统的描述。线程进程的另外一个用途就是可以用来描述验证平台(testbench)。
  • • 钟控线程进程(SC_CTHREAD)是一种继承于线程进程的特殊进程,可以认为是线程进程和方法进程在描述行为上的一个折中。它只能在时钟的上升沿或下降沿被触发,这种行为其实更接近于实际硬件的行为。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2655

    浏览量

    47287
  • ESL
    ESL
    +关注

    关注

    1

    文章

    72

    浏览量

    21320
  • 进程
    +关注

    关注

    0

    文章

    201

    浏览量

    13937
  • 系统
    +关注

    关注

    1

    文章

    1006

    浏览量

    21289
收藏 人收藏

    评论

    相关推荐

    如何在ModelSim下用SystemC的做验证?

    SystemC和SystemVerilog在设计的地位问题,我认为在验证方面,SystemC有明显的优势。如果你设计纯粹的ASIC,那么用SystemVerilog可能就足够了。但是在很多场合,软硬件同时存在
    发表于 03-01 11:30

    Verilog generate if 语句如何用systemc实现?

    Verilog generate if语句如何用systemc实现?例如:generateif (SIZE < 8)assign y = a & b & c;else
    发表于 08-28 12:06

    Verilog generate if语句如何用systemc实现?

    1.Verilog generate if语句如何用systemc实现?例如:generateif (SIZE < 8)assign y = a & b & c;else
    发表于 08-29 16:11

    systemC设计如何实现上拉和下拉?

    在verilog实现上拉和下拉很容易,使用pullup 和 pulldown 就行,但在systemC设计如何实现上拉和下拉?
    发表于 07-22 22:37

    SystemC是什么?有什么作用?

    SystemC是什么?SystmeC的作用是什么?
    发表于 06-21 08:05

    SystemC是什么?SystmeC的作用是什么?

    SystemC是什么?SystmeC的作用是什么?SystemC的用途是什么?
    发表于 06-21 07:37

    SystemC循环模型11.2版用户指南

    查看本节中使用ARM SystemC周期模型的前提条件。 有关以下必备条件的详细信息,请参阅周期模型系统C运行时安装指南(101146): ·您的环境必须安装受支持的周期模型SystemC
    发表于 08-12 06:21

    Cortex-R8 SystemC循环模型用户指南

    标准的模拟器进行编译。 您可以在ARM周期模型参考平台中使用SystemC周期模型,也可以将它们直接集成到任何符合IEEE 1666的SystemC环境
    发表于 08-16 06:47

    Cortex-R52 SystemC循环模型11.2版用户指南

    标准的模拟器进行编译。 您可以在ARM周期模型性能分析工具包(CPAK)中使用SystemC周期模型,也可以将它们直接集成到任何符合IEEE 1666的SystemC环境
    发表于 08-18 07:25

    Systemc From The Ground Up

    Systemc From The Ground Up:The first question any reader should ask is “Why this book?” We
    发表于 07-10 17:27 0次下载
    <b class='flag-5'>Systemc</b> From The Ground Up

    基于SystemC的系统验证研究和应用

    视频编解码芯片中运动估计与补偿单元(MECU)的算法复杂,使用传统硬件描述语言建立模型和模型验证的过程繁琐耗时,为了缩短芯片验证时间,本文针对MECU模块提出了基于SystemC语言
    发表于 02-24 12:07 16次下载

    数字专用集成电路设计SystemC建模验证方法

    数字专用集成电路设计SystemC建模验证方法
    发表于 07-17 16:36 31次下载

    Systemc语言_简介

    systemc语言简单介绍,有助于初学者更好的运用和了解
    发表于 12-07 10:33 0次下载

    SystemC的数据类型概念

    SystemC的事件 在SystemC,事件提供了一个底层的处理程序间同步及重新启动的方式,它能用来实现通道的功能,定义事件的语法如下: sc_event event_name;
    的头像 发表于 11-02 15:44 861次阅读
    <b class='flag-5'>SystemC</b><b class='flag-5'>中</b>的数据类型概念

    SystemC TLM的接口

    SystemC TLM的接口 在SystemC TLM,接口是一个C++的抽象类。抽象类的所有方法都是用“=0”标识表示的纯虚函数。C
    的头像 发表于 11-02 15:54 740次阅读