首页> 中国专利> 高级语言实现硬件非阻塞赋值的建模方法

高级语言实现硬件非阻塞赋值的建模方法

摘要

本发明公开了一种高级语言实现硬件非阻塞赋值的建模方法,所述方法包括:对输入信号声明N个对应的临时基本数据类型变量,其中,第N个变量被赋值为第N-1个变量的值,第N-1个变量被赋值为第N-2个变量的值,依此类推,直至第1个变量被赋值为输入信号的值;之后在每个时钟的上升沿,均执行一次赋值。采用本发明,对于模拟硬件非阻塞赋值建立SystemC寄存器传输级模型来说,采用高级语言基本数据类型、SystemC基本数据类型或者用户自定义数据类型变量,相比SystemC中支持“求值-更新”过程的基本通道类更节约内存占用,执行效率更高。

著录项

  • 公开/公告号CN102930090A

    专利类型发明专利

  • 公开/公告日2013-02-13

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN201210404828.4

  • 发明设计人 张传奇;刘自强;王志忠;

    申请日2012-10-22

  • 分类号G06F17/50(20060101);

  • 代理机构44287 深圳市世纪恒程知识产权代理事务所;

  • 代理人胡海国

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部

  • 入库时间 2024-02-19 17:52:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-12-16

    授权

    授权

  • 2013-03-20

    实质审查的生效 IPC(主分类):G06F17/50 申请日:20121022

    实质审查的生效

  • 2013-02-13

    公开

    公开

说明书

技术领域

本发明涉及电子系统设计建模领域,更为具体地,涉及在对时钟周期 精准的SystemC寄存器传输级建模中的一种高级语言实现硬件非阻塞赋 值的建模方法。

背景技术

随着集成电路制造技术按照摩尔定律继续发展,目前电子系统也变得 越来越复杂,人们已经可以把复杂的电子系统集成到一个芯片上,这 就是所谓的片上系统(System on Chip,SoC)。

对于复杂的片上系统SoC而言,在进行寄存器传输级(Register Tra nsfer Level,RTL)设计前需要进行深入的系统级仿真,以确认设计 的体系架构是否恰当、总线是否能够满足吞吐量、存储器是否被浪费 以及论证实时性要求,其中,所进行的仿真就是建立芯片的仿真模型 或者参考模型。

SystemC作为一种软/硬件协同设计语言,正是建模芯片模型的最佳语 言。SystemC是在C++的基础上扩展了硬件类和仿真核形成的,由于结 合了面向对象编程和硬件建模机制原理两方面的优点,这可以使Syst emC在抽象层次的不同级进行系统设计,使得系统的设计者能够用C++ 的词法模拟并发的进程,特别是在SoC系统中。

Verilog是进行硬件电路设计的一种硬件描述语言(Hardware Descr iption Language,HDL)。通常,硬件设计中的信号同步、节拍延迟 、状态转换等物理特性,均体现于Verilog语言中的非阻塞赋值“<=” 中,SystemC语言也同样具有这些基本物理特性。Verilog语言中描述 时序逻辑的always块中,通过对寄存器变量的非阻塞赋值“<=”,可 以在同一个时间片(赋值操作时刻)内做到寄存器变量的两种状态的 转换。对应一个输入信号定义多个寄存器变量,通过多个寄存器变量 间的非阻塞赋值可以做到节拍延迟从而保持不同信号的 同步。

非阻塞赋值在时间片开始时计算非阻塞赋值符右边的表达式值,在时 间片(赋值操作)结束时刻才更新至左边。在计算非阻塞赋值右表达 式和更新至左侧期间,其他的Verilog语句,包括其他的Verilog非阻 塞赋值语句都能同时计算右表达式和更新左侧,非阻塞赋值的操作过 程可以看作为以下两个步骤:

a) 在赋值开始时刻,计算非阻塞赋值右侧表达式;

b) 在赋值结束时刻,更新非阻塞赋值左侧表达式。

非阻塞赋值操作只能用于对寄存器类型变量赋值,因此只能用于init ial和always等过程块中,不允许用于连续赋值。

为了支持寄存器传输级的并行描述,SystemC还采用了与传统硬件描述 语言基本相同的调度模型—基于Δ(delta)延迟。一个Δ周期包括求 值和更新两个阶段,在一个时间点上,这样的Δ周期会持续出现,直 到再求值前后的结果不再发生变化为止。一个求值和更新循环构成一 个Δ周期,每一个Δ周期都代表微观上时间步的前进,而在宏观上时 间却并没有前进。通过Δ延迟来模拟实际硬件的行为,实现了赋值和 更新的分离,保证了仿真结果与硬件一致。

SystemC中的端口(port)类与信号(signal)类提供的读写成员函数 正是基于Δ(delta)延迟实现的方法。受时钟沿触发的时序逻辑电路 中它们提供的写方法,在时间片结束时才对其值进行更新,所以本节 拍读取这个信号或者端口得到的值还是时间片结束之前未更新过来的 值,要得到更新的值只有下一节拍才能读取得到。端口与信号的这个 属性正是与普通数据类型的重要区别之一。利用信号(signal)的这 个属性可以模拟数字电路设计中的寄存器非阻塞赋值。

Verilog语言中非阻塞赋值的目的是要满足硬件设计中的物理特性,S ystemC建模中同样要考虑这些物理特性,利用的SystemC自带的基本通 道类,比如sc_signal<T>可以模拟硬件设计中的非阻塞赋值,例如, 其等价方式可以为:

发明内容

本发明针对高级语言建模模拟硬件Verilog语言非阻塞赋值,提出了一 种更为普适的数据信号同步方法,即用高级语言基本数据类型(T)模 拟硬件实现非阻塞赋值的方法。

为了实现上述目的,本发明采用以下技术方案实现:

一种高级语言实现硬件非阻塞赋值的建模方法,包括:

对输入信号声明N个对应的临时基本数据类型变量,其中,第N个变量 被赋值为第N-1个变量的值,第N-1个变量被赋值为第N-2个变量的值, 依此类推,直至第1个变量被赋值为输入信号的值;

之后在每个时钟的上升沿,均执行一次赋值。

优选地,非阻塞赋值寄存器变量个数等价为延迟多少拍,在寄存器变 量个数较少时,采用高级语言的基本数据类型变量组,变量的使用与 赋值,必须在同一个注册为线程进程或方法进程的过程中。

更为优选地,方法进程不包含while循环,需要将变量声明为模块成员 变量或者过程的静态变量。

优选地,一组基本数据类型变量的使用与赋值的顺序为:使用先于赋 值。

一种高级语言实现硬件非阻塞赋值的建模方法,包括:

模块构造函数初始化的时候,根据延时填充queue队列为无效值;

仿真开始时,接收进程收到一个有效数据则存入接收先入先出fifo队 列;

发送进程则每拍从queue队列中先弹出一个数据,如果数据有效,则存 入发送fifo队列。

优选地,在执行所有步骤之后,所述高级语言实现硬件非阻塞赋值的 建模方法还包括:

从queue队列中弹出一个元素后,紧接着需要入队一个元素,以保证队 列大小恒定,读出接收fifo的数据,并根据有效标识判断将其填入相 应的queue队列,如果接收fifo队列为空,则queue队列入队无效值。

高级语言实现硬件非阻塞赋值的建模,将延迟节拍作为模块模板类的 参数,通过在对模块例化的时候可重入该参数来做到数据信号的读写 同步。

优选地,始终保持以queue队列的大小来模拟节拍延迟参数,以使得来 一个数据a即入队queue队列末端,这样经过所设置的延迟拍数次出队 元素后,恰好弹出元素a。

一种如上所述的高级语言实现硬件非阻塞赋值的建模方法的用途,其 可以仿真多个延迟参数不同的硬件原型。

通过上述本发明的技术方案可以看出,本发明至少具有以下有益效果 :

对于模拟硬件非阻塞赋值建立SystemC寄存器传输级模型来说,采用高 级语言基本数据类型、SystemC基本数据类型或者用户自定义数据类型 变量,相比SystemC中支持“求值-更新”过程的基本通道类更节约内 存占用,执行效率更高,唯一注意的就是变量赋值与使用顺序。

采用STL模板类中queue容器亦可建模实现硬件非阻塞赋值,节拍延迟 等硬件特性,但适用范围更宽泛一些。利用容器的一些特性比如支持 不指定大小的存储,运行时高效的push/pop元素,相比SystemC中必须 指定存储深度的基本fifo通道sc_fifo<T>来说,更适合延迟节拍可变 的应用场景。

附图说明

图1是本发明实施例中查询片内SRAM应用场景示意图;

图2是本发明实施例中查询片外SDRAM应用场景示意图;

图3是本发明实施例1的实施流程图;

图4是本发明实施例2的实施流程图。

本发明目的的实现、功能特点及优异效果,下面将结合具体实施例以 及附图做进一步的说明。

具体实施方式

下面结合附图和具体实施例对本发明所述技术方案作进一步的详细描 述,以使本领域的技术人员可以更好的理解本发明并能予以实施,但 所举实施例不作为对本发明的限定。

本发明利用高级语言(SystemC、C++、C等)在建立硬件芯片模型过程 中,为模拟硬件非阻塞赋值实现数据信号同步、节拍延迟、状态转换 等物理特性而提出了两种方法,解决了高级语言串行执行难以描述在 同一个时间片内变量的变化更新过程的问题,即实现了硬件非阻塞赋 值。

根据非阻塞赋值中与输入信号相关的寄存器变量个数,一个寄存器变 量可以等价为延迟一个节拍,节拍延迟少的应用高级语言基本数据类 型变量组 实现非阻塞赋值的方案,方案采用变量使用先于赋值的方式。对于寄 存器变量个数较多、等价延迟拍数较大的寄存器传输级模型来说,本 发明还提出了另外一种解决方法,采用C++标准模板库STL queue队列 实现,利用queue队列支持不指定大小的存储的属性,可以建立节拍延 迟数可重入的模块,实现模拟可变的节拍延迟。

在本发明实施例中,参见如下代码片段,硬件代码中对应输入信号xx x_vld声明了三个寄存器变量,在时钟上升沿驱动的同步逻辑块中使用 非阻塞赋值从而达到将输入信号延迟了三个时钟节拍。

用高级语言模拟此逻辑,对应一个输入信号需要声明四个对应的临时 基本类型变量,因为对软件语言的基本数据类型变量赋值,不会存在 “求值-更新”的过程,是瞬间变化的,所以需要记录输入信号的值。

即第4个变量被赋值为第3个变量的值,第3个变量被赋值为第2个变量 的值,第2个变量被赋值为第1个变量的值,直至第1个变量被赋值为输 入信号的值。

之后每个时钟的上升沿,均会执行一次赋值,由于变量的使用先于被 赋值,所以每一次循环均能够使有效数据转移到下一个变量。

另外,在本实施例中,高级语言基本数据类型T为bool类型。

由于C++等高级软件语言专长于描述串行执行的程序,本发明实施例为 了实现非阻塞赋值等效的效果并且考虑到软件语言的顺序执行行为, 需要对变量的赋值与使用有严格的顺序,比如上例就要变量使用先于 赋值执行才能达到硬件非阻塞赋值“求值-更新”过程等效的效果。

并且由于SystemC内核注册进程的串行调度策略,即使声明为全局变量 ,也不可跨越进程使用,避免内核调度的不确定性带来的数据使用与 赋值的竞争冒险现象发生。

采用以上精简的数据信号同步方式,相比采用SystemC基本通道类支持 的“求值-更新”过程来说有如下几方面的优点。

1.耗费内存少。

基本通道类存在多个继承类,类中数据成员和成员函数调用都会占用 较大的内存使用。

2.执行效率高,仿真速度快。

使用底层基本数据类型无疑会加快仿真速度。

3.基本通道类sc_signal<T> 在RTL建模中,一般用于不同模块端口 间的连接信号,使用不当会造成信号的多驱动问题。

上述模拟硬件非阻塞赋值实现硬件电路设计中的基本物理特性,如信 号同步、节拍延迟、状态转换,可以理解成对模块输入有效数据延迟 了有限个 节拍将数据传输到下一个模块,对于延迟数十节拍数的同步来讲,信 号变量声明太多,造成代码冗余庞大因此并不合适。

为此,本发明实施例还提出了另外一种解决方法,可以采用C++ STL 标准模板库中的先进先出queue队列实现硬件非阻塞赋值。

基本方案为:

步骤一、在模块构造函数初始化的时候根据预先设置的同步延迟节拍 数填充queue队列为无效值。

步骤二、仿真开始时,接收进程收到一个有效数据则存入接收fifo队 列,

步骤三、发送进程则每拍从queue队列中先弹出一个数据,如果数据有 效则存入发送fifo,然后读出接收fifo的数据根据有效标识判断入哪 一个queue队列,如果接收fifo为空,则queue队列入队无效值,补足 队列中元素个数恒定。

由于queue队列是一种可以不指定大小的容器,因此更适合模拟延迟节 拍可变的应用场景中。将延迟节拍作为模块模板类的参数,通过在对 模块例化的时候可重入该参数来做到数据信号的读写同步。

模拟硬件非阻塞赋值中,根据同一个输入信号对应声明的寄存器变量 (一个寄存器变量对应延迟一拍)个数多少,建模中可以选择上述两 种方案之一。在应用场景上亦可有多种实施场景可实践。比如网络处 理器不可编程单元某模块查片内SRAM表,可编程单元查片外SDRAM表等 。这些在早期芯片建模架构验证的时候,不可能提供真实的查找片外 表项管理控制单元只有通过等效的模拟来实现。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进 行清楚、完整地描述。

其中,第一实施例即为查询片内SRAM应用场景实例,第二实施例即为 查询片外SDRAM应用场景实例。

如图1所示,其展示了仿真时钟周期精准的寄存器传输级模型时,为了 保持与硬件逻辑代码相同的输出处理结果节拍,通过S11步骤从前级模 块收到一个待处理模块S12处理的描述符后,从描述符中提取关键值( key)发送查找请求到片内SRAM模块S14,片内SRAM模块S14找到匹配关 键值的结果(result)后作适当的延迟发送给处理模块S12,处理模块 S12根据查找结果修 改描述符,然后通过发送通道S16发送给下级模块。

处理模块S12实现的主要处理逻辑就是:模拟硬件非阻塞赋值,用几个 基本数据类型变量来存储流水线形式过来的描述符,假设我们变量命 名为a1、a2、…、an,那么提取a1中的关键字发出查找请求,经过n个 时钟节拍后,an的值已经更新为原来n拍之前a1的值,这时正好查找结 果返回,修改an某些bit位的值,发送描述符至下级模块。链路S17以 及S18用于配置管理表项,包括初始化、修改、写入、查询等具体操作 。

实施例1

参考图3,其为本发明该实施例提供的基本数据类型实现非阻塞赋值方 法的流程图,是对图1应用场景的更为详细的描述。

该实施例的详细处理过程见图3,其中:

S301表示从前一级模块发送的报文描述符,报文描述符的概念可以这 样理解,为从原始报文中解析提取的后续模块将要逻辑处理的关键字 段组成的数据结构。

S302,S305,S307共同完成图1中的应用业务模块的功能。其中在S30 2中,接收报文描述符并提取关键字发送给S303。S305实现非阻塞赋值 ,由于查找片内SRAM的延迟拍数较低,所采用的同步方式即为模拟非 阻塞赋值的方法。S307接收查表返回的结果,修改并发送S305同步的 数据。

S303,S304,S306共同完成图1中的片内SRAM模块的功能。片内SRAM模 块存储表项内容,可以采用STL map关联式容器来建模key-value的对 应关系。如果不采用S304延迟查找键值关键字,那么从S302发出查找 请求到S307收到查找结果,对于受同一时钟驱动的同步电路来说,均 为上升沿敏感,为固定两拍延迟。S304就是根据实际的SRAM属性,作 适当的键值处理的,比如模拟内置TCAM,一般8拍才返回结果,这时候 就需要S304用于非阻塞赋值了。由于S304根据SRAM属性设置延迟拍数 ,因此适合采用参数可重入的模板类实现。

实施例2

参考图4,其为本发明实施例提供的queue队列实现非阻塞赋值方法第 二实施例的流程图,是对图2应用场景的更为详细的描述。

结合图2所示应用场景,在该实施例中,为模拟查找片外表,如hash、 tree、tcam、eram、ddr3等,需要构造一个中间模块S209,用于模拟 查询不同类型表项的管理控制。其中,图4既是对中间模块S209的详细 的描述。

假设外挂逻辑表根据类型分为hash、tree、tcam、eram、ddr3五大类 ,那么我们需要5个STL queue队列来模拟实现数据延迟。所采用的方 法如下:

模块建模为4个SC_THREAD进程,为了引用方便起见,命名thread_1为 接收键值关键字缓存先入先出fifo队列的进程,命名thread_2为发送 键值关键字的进程,命名thread_3为接收查找结果的进程,命名thre ad_4为发送查找结果的进程。

首先在启动仿真核,进行初始化的时候,构造函数中将根据设置的延 迟拍数填充queue队列为无效键值0。

应用模块S403发出查找请求,在S404中,进程thread_1将接收到的请 求存入fifo队列。由于SystemC内核串行调度策略,所有注册的进程在 同一仿真时间节拍将调度一次,来模拟硬件上的并发性。S405示意为 进程在同一节拍上是并行的。

thread_2进程做三件事,串行执行S406、S407、以及S408,其中:

S406,首先检测请求发送fifo中有无有效数据,有的话就发送给S409 用于查表。

S407,各queue队列每拍均出队一个数据,根据数据的有效性,决定是 否存入请求发送fifo中。

由于各queue队列每拍均出队一个数据,因此为了保持queue队列中元 素数目恒定,需要每拍入队一个数据。S408,实现这个功能,入队的 依据即为从接收请求的fifo中读取有效数据,根据数据的相关标识入 队相应的queue,其余queue入队为无效键值0即可。

S411,S412分别表示thread_3、thread_4进程接收查表结果缓存并发 送结果给S403的过程。

对于本发明实施例提供的所述的高级语言实现硬件非阻塞赋值的建模 方法的用途,其可以仿真多个延迟参数不同的硬件原型,达到模拟实 现查找乱序的功能行为。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围 ,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换 ,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的 专利保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号