0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SystemC TLM中的接口

麥辣雞腿堡 ? 來源:TrustZone ? 作者:TrustZone ? 2023-11-02 15:54 ? 次閱讀

SystemC TLM中的接口

在SystemC TLM中,接口是一個C++的抽象類。抽象類中的所有方法都是用“=0”標(biāo)識表示的純虛函數(shù)。C++不允許創(chuàng)建抽象類的對象,因為抽象類對象是沒有意義的。 在SystemC中,sc_interface是所有接口的基類,任何一個接口必須直接或間接繼承sc_interface。

此外,接口不包含任何數(shù)據(jù)成員。下面是一個接口實例,首先定義一個存儲器讀接口mem_read_if,然后定義一個存儲器寫接口mem_write_if,接著定義一個存儲器的復(fù)位接口reset_if,最后利用這3個接口定義隨機(jī)存取存儲器的接口ram_if:

# ifndef _MEM_IF_H
# define _MEM_IF_H
# include “systemc.h”
enum transfer_status {TRANSFER_OK=0, TRANSFER_ERROR}; template < class T >
class mem_read_if : public sc_interface
{
      public:
      virtual transfer_status read (unsigned int address, T& data)=0;
      // 定義存儲器讀的方法
};
template < class T >
class mem_write_if : public sc_interface
{
      public:
      virtual transfer_status write (unsigned int address, T& data)=0;
      // 定義存儲器寫的方法
};
class reset_if : public sc_interface
{
      public:
      virtual bool reset ( )=0; // 定義存儲器復(fù)位的方法
};
template < class T >
class ram_if : public mem_write_if < T >, mem_read_if < T >, reset_if
{
public:
      virtual unsigned int start_address ( ) const=0; //定義獲取存儲器首地址的方法
      virtual unsigned int end_address ( ) const=0; //定義獲取存儲器終止地址的方法
};
#endif

從上面的存儲器接口的定義可以看出,接口是可以分層的,復(fù)雜的接口可以由多個簡單的接口繼承而得到。

SystemC TLM中的通道

從接口的定義可以看出,在SystemC中的接口僅僅定義了一組通信方法,并不包含這些方法的具體實現(xiàn)。為了實現(xiàn)這些方法,使建模的模塊具有實用的功能,SystemC中針對事務(wù)級建模引入了通道的概念。

通道是接口方法的具體實現(xiàn),通過繼承一個或多個接口實現(xiàn)模型的具體功能。針對上述存儲器接口ram_if,其通道的定義如下:

#ifndef _RAM_H
#define _RAM_H
#include "systemc.h"
#include "mem_if.h"
template < class T >
class ram : public sc_module, ram < T >
{
      public:
      ram (sc_module_name name, unsigned int start_address, unsigned int end_address)
              : sc_module (name)
              , m_start_address (start_address)
              , m_end_address (end_address){
              sc_assert (end_address >=start_address);
              mem=new T[end_address -start_address];
} //構(gòu)造函數(shù)ram ( ) {
    if (mem) {delete mem; mem=0}
} //析構(gòu)函數(shù)
transfer_status read (unsigned address, T& data)
{
    if (address < m_start_address || address > m_end_address) {
        data=0;
        return TRANSFER_ERROR;
}
data=mem [address -start_address];
return TRANSFER_OK;
}
transfer_status write (unsigned address, T& data)
{
    if (address < m_start_address || address > m_end_address) {
        return TRANSFER_ERROR; }
    mem [address -m_start_address]=data;
    return TRANSFER_OK;
}
bool reset( ) {...}
inline unsigned int start_address ( ) const {...}
inline unsigned int end_address ( ) const {...}
private:
    T* mem;
    unsigned int m_start_address, m_end_address
};
#endif

SystemC TLM中的端口

在SystemC中,端口與特定的通道接口相連。進(jìn)程通過特定的端口調(diào)用通道的接口提供的方法。對于(1)中提出的基本端口類型sc_in、sc_out以及sc_inout,可以調(diào)用的接口方法僅有write ( )和read ( ),但對于事務(wù)級建模,這些端口已經(jīng)不能夠滿足需求。比如,當(dāng)端口與總線接口或存儲器接口相連時,需要同時提供地址和數(shù)據(jù),事務(wù)級模型需要執(zhí)行與數(shù)據(jù)讀寫無關(guān)的一些操作如復(fù)位操作等。

在SystemC中,一個端口可以同時連接到一個或多個實現(xiàn)了同一接口的通道之上。端口的定義如下:

sc_port < Interface Type, ChannelNumber=1 >

Interface Type是端口所要連接的通道的接口類型。ChannelNumber代表端口所要連接的最大通道數(shù),默認(rèn)值是1。對于上面定義的的接口ram_if,下面的端口定義都是合法的:

sc_port < ram_if > ram_port1; //連接到一個RAM上
sc_port < ram_if, N > ram_portN; //連接到N個RAM上

根據(jù)上述存儲器接口ram_if及相應(yīng)通道的定義,可以定義一個模塊Component通過端口對其進(jìn)行訪問,如下:

SC_MODULE (Component) {
   sc_in_clk clk;
   sc_port < ram_if < int > > ram_port; // 實例化端口
   void action ( );
   int data;
   unsigned int address;
   SC_CTOR ( ) {
   SC_METHOD (action, clk.pos( ));
}
};
void Component :: action ( ){
   wait ( );
   int i=0;
   while (i++< 100) {
      address=0;
      if (transfer_status status=ram_port - > write (address, data)) {
      // 通過端口ram_port調(diào)用存儲器寫方法
      cout < < "Write RAM successfully" < < endl;
}
else cout < < "Write RAM fail" < < endl;
if (transfer_status status=ram_port - > read (address, data)) {
// 通過端口ram_port調(diào)用存儲器讀方法
      cout < < "Read RAM successfully" < < endl;
}
  else cout < < "Read RAM fail" <
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8360

    瀏覽量

    150522
  • ESL
    ESL
    +關(guān)注

    關(guān)注

    1

    文章

    72

    瀏覽量

    21313
  • systemc
    +關(guān)注

    關(guān)注

    2

    文章

    25

    瀏覽量

    14534
  • TLM
    TLM
    +關(guān)注

    關(guān)注

    1

    文章

    32

    瀏覽量

    24720
收藏 人收藏

    評論

    相關(guān)推薦

    全面的SystemC TLM驅(qū)動式IP設(shè)計與驗證解決方案

    用于早期軟件開發(fā)和調(diào)試的虛擬平臺可能包含由SystemC TLM模型組成的子系統(tǒng)。得益于它們的快速執(zhí)行,為創(chuàng)建硬件設(shè)計而開發(fā)的模型也可用來加速軟件設(shè)計。
    的頭像 發(fā)表于 09-05 12:23 ?5210次閱讀
    全面的<b class='flag-5'>SystemC</b> <b class='flag-5'>TLM</b>驅(qū)動式IP設(shè)計與驗證解決方案

    如何在ModelSim下用SystemC的做驗證?

    SystemC和SystemVerilog在設(shè)計的地位問題,我認(rèn)為在驗證方面,SystemC有明顯的優(yōu)勢。如果你設(shè)計純粹的ASIC,那么用SystemVerilog可能就足夠了。但是在很多場合,軟硬件同時存在
    發(fā)表于 03-01 11:30

    Verilog generate if 語句如何用systemc實現(xiàn)?

    Verilog generate if語句如何用systemc實現(xiàn)?例如:generateif (SIZE < 8)assign y = a & b & c;else
    發(fā)表于 08-28 12:06

    Verilog generate if語句如何用systemc實現(xiàn)?

    1.Verilog generate if語句如何用systemc實現(xiàn)?例如:generateif (SIZE < 8)assign y = a & b & c;else
    發(fā)表于 08-29 16:11

    systemC設(shè)計如何實現(xiàn)上拉和下拉?

    在verilog實現(xiàn)上拉和下拉很容易,使用pullup 和 pulldown 就行,但在systemC設(shè)計如何實現(xiàn)上拉和下拉?
    發(fā)表于 07-22 22:37

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

    SystemC是什么?SystmeC的作用是什么?SystemC的用途是什么?
    發(fā)表于 06-21 07:37

    AMBA-PV TLM擴(kuò)展用戶指南

    )和調(diào)試接口。 ?可互操作,此類允許使用映射AMBA?總線的模型在符合Accellera的SystemC環(huán)境工作。
    發(fā)表于 08-10 06:56

    ARM System C循環(huán)模型用戶指南

    1666的SystemC環(huán)境。 僅在CPAK環(huán)境中支持TLM包裝器的頂級重新編譯。 基于PIN的系統(tǒng)C周期模型可以在CPAK的范圍之外使用。
    發(fā)表于 08-12 07:02

    海信TLM3229G、TLM3729G彩電電路圖

    海信TLM3229G彩電電路圖海信TLM3229G彩色電視機(jī)電路圖,海信TLM3229G彩電圖紙,海信TLM3229G原理圖
    發(fā)表于 05-08 17:31 ?89次下載
    海信<b class='flag-5'>TLM</b>3229G、<b class='flag-5'>TLM</b>3729G彩電電路圖

    Systemc From The Ground Up

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

    利用基于SystemC/TLM的方法學(xué)進(jìn)行IP開發(fā)和FPGA

    利用基于SystemC/TLM的方法學(xué)進(jìn)行IP開發(fā)和FPGA建模 隨著系統(tǒng)級芯片技術(shù)的出現(xiàn),設(shè)計規(guī)模正變得越來越大,因而變得非常復(fù)雜,同時上市時間也變得更加苛刻。通常RTL已
    發(fā)表于 01-04 13:11 ?5351次閱讀
    利用基于<b class='flag-5'>SystemC</b>/<b class='flag-5'>TLM</b>的方法學(xué)進(jìn)行IP開發(fā)和FPGA

    TLM驅(qū)動式新方案探討

    引言 Cadence設(shè)計系統(tǒng)公司目前提供一種全面的SystemC TLM 驅(qū)動式IP設(shè)計與驗證解決方案,包括方法學(xué)指南、高階綜合、有TLM感知的驗證以及客戶服務(wù),推動用戶向TLM驅(qū)動設(shè)
    發(fā)表于 08-25 09:56 ?1286次閱讀
    <b class='flag-5'>TLM</b>驅(qū)動式新方案探討

    UVM基于SOCKET通信的TLM2.0介紹

    TLM2.0在2009年成為OSCI標(biāo)準(zhǔn),主要用于構(gòu)造總線系統(tǒng)的SystemC模型。
    的頭像 發(fā)表于 06-25 09:58 ?2273次閱讀
    UVM<b class='flag-5'>中</b>基于SOCKET通信的<b class='flag-5'>TLM</b>2.0介紹

    SystemC的模塊與進(jìn)程

    SystemC的模塊 模塊(SC_MODULE)是SystemC系統(tǒng)建模的一個基本單位。一個系統(tǒng)由許多個模塊構(gòu)成,各個模塊實現(xiàn)系統(tǒng)不同的功能。在設(shè)計
    的頭像 發(fā)表于 11-02 15:31 ?783次閱讀

    SystemC的數(shù)據(jù)類型概念

    SystemC的事件 在SystemC,事件提供了一個底層的處理程序間同步及重新啟動的方式,它能用來實現(xiàn)通道的功能,定義事件的語法如下: sc_event event_name;
    的頭像 發(fā)表于 11-02 15:44 ?807次閱讀
    <b class='flag-5'>SystemC</b><b class='flag-5'>中</b>的數(shù)據(jù)類型概念