CN116882336B - 一种基于高级语言模拟rtl的建模方法与装置 - Google Patents
一种基于高级语言模拟rtl的建模方法与装置 Download PDFInfo
- Publication number
- CN116882336B CN116882336B CN202311149789.2A CN202311149789A CN116882336B CN 116882336 B CN116882336 B CN 116882336B CN 202311149789 A CN202311149789 A CN 202311149789A CN 116882336 B CN116882336 B CN 116882336B
- Authority
- CN
- China
- Prior art keywords
- transaction
- signal
- signals
- clock
- transactions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
- G06F30/3312—Timing analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/327—Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明提供一种基于高级语言模拟RTL的建模方法与装置,通过定义时钟与周期,将组合逻辑相关信号和时序逻辑相关信号分别抽象成组合事务和时序事务,并将所有所述组合事务和时序事务放入相应的队列,将时钟、时序事务和组合事务分开考虑,时钟负责维护事务队列,时序逻辑和组合逻辑的运行均由事务驱动,在每个周期中将组合事务和时序事务分开进行信号的传输,并进行相应的赋值与更新,实现逻辑功能的接收与发送,通过维护事务队列,实现组合事务和时序事务按照周期的正确执行。
Description
技术领域
本发明涉及芯片设计技术领域,特别是涉及一种基于高级语言模拟RTL的建模方法与装置。
背景技术
现有使基于高级语言模拟RTL的工具主要是SystemC,SystemC对组合逻辑和时序逻辑没有直接的区分,而侧重于解决高级语言实现信号同步变化的问题。SystemC引入了delta周期的概念,模块中的每个输入输出信号在函数体内赋值之后,不会立即变化,而是在整个函数体执行完后再更新。通过这个设定,SystemC实现了串行模拟并行。但是,SystemC中的输入输出信号在函数体内不更新,使得一个函数只能用于计算一个信号,函数效率降低,模块编写复杂,代码逻辑变得难以理解,因此无法无法明确整个过程所需的时长以及周期数。
鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
发明内容
本发明要解决的技术问题是现有的基于高级语言模拟RTL的建模流程无法明确整个过程所需的时长以及周期数。
本发明进一步要解决的技术问题是提供一种基于高级语言模拟RTL的建模方法与装置。
本发明采用如下技术方案:
第一方面,一种基于高级语言模拟RTL的建模方法,包括:
定义时钟与周期,其中,所述时钟包括0与1两种状态,所述时钟每1/2周期进行状态切换;
将组合逻辑相关信号和时序逻辑相关信号分别抽象成组合事务和时序事务,将所有所述组合事务和时序事务放入相应的队列,并设置总周期数;
每个所述周期内,当所述时钟的状态为0时,所有时序事务按照队列的顺序,向其他事务传输上一周期所得到的更新后的信号,并根据当前接收到的信号进行赋值;当所述时钟的状态为1时,所有组合事务按照队列的顺序根据当前接收到的信号进行赋值,并立即更新,将更新后的信号传输给其他事务,并将上一周期中所有进行信号赋值的时序事务进行信号更新;
在所述总周期数内将所述组合事务与所述时序事务执行完毕。
优选的,所述将所有所述组合事务和时序事务放入相应的队列,具体包括:
所述队列包括输入层和功能层,所述输入层中的节点接收来自外部的信号,并进行赋值和更新,将更新后的数值传输至所述功能层;
所述功能层接收来自输入层的信号,并在功能层内部按照队列的顺序进行传输,所述功能层中的节点接收来自输入层的信号,或者各节点相互之间进行接收传输信号并进行赋值和更新;
其中,所述功能层和输入层均包括多个节点,每个节点为组合事务或者时序事务。
优选的,所述输入层中的每个节点将信号传输给一个或者多个功能层中的节点;
所述功能层中的每个节点接收队列中除自身以外的一个或者多个节点的信号,并进行赋值和更新;所述功能层中的每个节点将信号传输至功能层中除自身以外的一个或者多个节点。
优选的,所述当所述时钟的状态为0时,所有时序事务按照队列的顺序,向其他事务传输上一周期所得到的更新后的信号,并根据当前接收到的信号进行赋值,具体包括:
当所述时钟的状态为0时,所有已进行信号更新的时序事务按照队列的顺序进行信号传输,将已更新的信号传输给一个或者多个节点,接收到信号的所述一个或者多个节点完成赋值并停止信号传输。
优选的,所述当所述时钟的状态为1时,所有组合事务按照队列的顺序根据当前接收到的信号进行赋值,并立即更新,将更新后的信号传输给其他事务,并将上一周期中所有进行信号赋值的时序事务进行信号更新,具体包括:
当所述时钟的状态为1时,所有完成赋值的组合事务进行信号更新,并按照队列的顺序将信号传输给一个或者多个节点;
当接收到信号的节点为组合事务时,所述组合事务根据接收到的信号完成赋值以及更新,并继续按照队列的顺序将信号传输给一个或者多个节点,直至信号被传输给时序事务,所述时序事务根据接收到的信号完成赋值并停止信号传输。
优选的,所述将上一周期中所有进行信号赋值的时序事务进行信号更新,具体包括:
当所述时钟的状态为1时,获取所有上一个周期中接收到信号并进行过信号赋值的时序事务,将所有进行过信号赋值的时序事务进行信号更新,用于在后续时钟的状态为0时,将更新后的时序事务进行信号传输。
优选的,所述设置总周期数,具体包括:
所述总周期数根据所述输入层接收外部信号的次数,以及每轮外部信号在队列中传输完毕的周期数而定。
优选的,所述时序事务接收到信号后,所述时序事务添加变量将接收到的信号作为未来值进行暂存,从而完成时序事务的赋值;
当时钟的状态为1时,从所述未来值中提取上一个周期接收到的信号并更新至当前值中,从而完成时序事务的更新。
优选的,所述组合事务接收到信号后,所述组合事务添加变量将接收到的信号作为未来值进行暂存,从而完成组合事务的赋值;
从所述未来值中提取接收到的信号并更新至当前值中,从而完成组合事务的更新;当时钟的状态为1时,所述组合事务接收到信号后,依据当前接收到的信号进行赋值与更新。
第二方面,一种基于高级语言模拟RTL的建模装置,所述装置包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行所述的基于高级语言模拟RTL的建模方法。
本发明实施例提供一种基于高级语言模拟RTL的建模方法与装置,通过定义时钟与周期,将组合逻辑相关信号和时序逻辑相关信号分别抽象成组合事务和时序事务,并将所有所述组合事务和时序事务放入相应的队列,将时钟、时序事务和组合事务分开考虑,时钟负责维护事务队列,时序逻辑和组合逻辑的运行均由事务驱动,在每个周期中将组合事务和时序事务分开进行信号的传输,并进行相应的赋值与更新,实现逻辑功能的接收与发送,通过维护事务队列,实现组合事务和时序事务按照周期的正确执行。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种基于高级语言模拟RTL的建模方法的方法流程图;
图2是本发明实施例提供的一种基于高级语言模拟RTL的建模方法的节点传输示意图;
图3是本发明实施例提供的一种基于高级语言模拟RTL的建模方法的另一种节点传输示意图;
图4是本发明实施例提供的一种基于高级语言模拟RTL的建模方法的信号传输流程图;
图5是本发明实施例提供的另一种基于高级语言模拟RTL的建模方法的方法流程图;
图6是本发明实施例提供的另一种基于高级语言模拟RTL的建模方法的模块框图;
图7是本发明实施例提供的又一种基于高级语言模拟RTL的建模方法的另一种节点传输示意图;
图8是本发明实施例提供的一种基于高级语言模拟RTL的建模方法的时序图;
图9是本发明实施例提供的一种基于高级语言模拟RTL的建模方法的RTL的代码图;
图10是本发明实施例提供的另一种基于高级语言模拟RTL的建模方法的RTL的代码图;
图11是本发明实施例提供的另一种基于高级语言模拟RTL的建模装置的装置示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
本发明中术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本申请中,除非另有明确的规定和限定,术语“连接”应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或成一体;可以是直接相连,也可以通过中间媒介间接相连。此外,术语“耦接”可以是实现信号传输的电性连接的方式。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明实施例提供了一种基于高级语言模拟RTL的建模方法,如图1所示,包括:
步骤101中,定义时钟与周期,其中,所述时钟包括0与1两种状态,所述时钟每1/2周期进行状态切换。
其中,所述周期用于统计全局经历的周期数,所述时钟在0和1两种状态翻转,每半个周期所述时钟进行一次翻转。
其中,所述1/2周期的翻转即代表该1/2周期内需要处理的事务已处理完毕。
步骤102中,将组合逻辑相关信号和时序逻辑相关信号分别抽象成组合事务和时序事务,将所有所述组合事务和时序事务放入相应的队列,并设置总周期数。
其中,所述组合逻辑相关信号为wire类型信号,受到组合逻辑控制;所述时序逻辑相关信号为reg类型信号,受到时序逻辑控制,均通过高级语言实现;本实施例中,通过将程序的执行过程分为时钟为0和时钟为1两个部分,从而将时序逻辑和组合逻辑分开进行考虑,其中所述时钟用于负责维护事务队列,而所述时序逻辑和所述组合逻辑均由事务进行驱动。本实施例中,所述时序事务和所述组合事务均可以用来表示节点。所述队列即:由所述时序事务和所述组合事务按照预设顺序进行信号传输的流程;所述总周期数指代仿真时间,由testbench捕获系统的pulse决定;例如,本领域技术人员可根据经验判断完成此testbench需要多少时间,或者设置一个信号用于检测系统的输出,如果输出长时间不变化,则停止仿真,所述总周期数即用于完成全局信号传输所需的周期总数,在所述总周期数中的每个周期中都有一次外部信号输入至队列中。
其中,所述周期数可自行设定,也可让系统自行停止而确定。实际上,此处的周期数含义有两个方面:1.系统实现相应功能需要的周期数;2.系统仿真的周期数。1代表着系统总共工作了多久,2代表着系统保持可工作状态的时长。涉及到输入源,首先输入源会规定好了哪个周期会有什么样的输入,本领域技术人员或者系统自行判断处理上述输入需要系统工作多少周期来进行仿真;或者设定检测,检测到系统进入可工作状态而一定周期下不工作时停止仿真。
需要注意的是,在本发明实施例中,所述事务的定义与数据库相关的事务概念不同;本实施例所述事务包含了完成一段功能需要的所有数据。另外,在硬件设计中,两个模块的交互起初是由valid和enable信号的握手确立,本实施例中的事务类似于此,当其中一个模块发起事务时,潜在地表明了valid信号置高,当另一模块接收事务时,潜在地表明了enable信号置高;因此当其中一个模块发出事务,另一模块接收到事务,意味着两个模块完成了握手。
步骤103中,每个所述周期内,当所述时钟的状态为0时,所有时序事务按照队列的顺序,向其他事务传输上一周期所得到的更新后的信号,并根据当前接收到的信号进行赋值;当所述时钟的状态为1时,所有组合事务按照队列的顺序根据当前接收到的信号进行赋值,并立即更新,将更新后的信号传输给其他事务,并将上一周期中所有进行信号赋值的时序事务进行信号更新。
在本发明实施例中,对于组合事务,实现的方法是在时钟为1时调用,由于时序事务的存在,部分信号在事务传递的循环中始终固定不变,而各个节点都可以接收一个或者多个节点的信号,也可以将信号传输给一个或者多个节点,因此组合事务能够分解为时序事务,同样的时序事务也可以分解为组合事务。本实施例中,节点接收到信号后包括以下两个步骤:第一步,根据接收到的信号进行赋值,此过程可以理解为,将接收到的信号作为未来值进行暂存;第二步,从所述未来值中提取接收到的信号并更新至当前值中,从而根据所述赋值进行更新,后续该节点进行信号传输时,传输的内容即为更新后的信号值,需要注意的是,节点之间进行信号传输时,只有该节点更新的信号值才能进行信号传输。
需要注意的是,当时钟的状态为0时,只有当时序事务下游为其他时序事务时,该时序事务才能接收到信号,当时序事务下游为组合事务时,该时序事务无法接收到信号,这是由于时钟的状态为0时只有时序事务才能进行信号传输,组合事务无法进行信号传输。
当所述时钟的状态为0时,所有更新完毕的时序事务将已更新的信号进行信号传输,而未更新完毕的时序事务则不能进行信号传输,当时序事务将信号传输至下一个节点后,该节点只根据接收到的信号进行赋值而不进行更新;当所述时钟的状态为1时,所有被赋值但还未更新的组合事务进行信号传输,并且当信号传输至组合事务时,该组合事务则直接进行信号的赋值以及更新,并接着将信号按照队列的顺序进行传输,直至传输至时序事务,当信号传输至时序事务时,所述时序事务则仅根据该信号进行赋值但不进行更新,因此时钟的状态为1时,信号传输至时序事务时则停止传输流程。由于当所述时钟的状态为0时,所有接收到信号的时序事务仅根据信号进行赋值,而不进行更新,并且本实施例中,需要确保每个时序事务进行更新的信号值为前一个周期中时钟为0时所赋值的信号值,而不是当前周期中时钟为1时所接收到的信号的信号值,因此当时钟为1时,还需要将所有在上一周期中已经进行赋值但还未进行更新的时序事务按照赋值进行信号更新,从而实现时序事务在计算信号值上直观来看在赋值后会延迟一个周期进行更新的效果,用于保证系统能够动态地确定完成一端功能所需的周期数。
步骤104中,在所述总周期数内将所述组合事务与所述时序事务执行完毕。
现有高级语言模拟RTL的工具主要是SystemC,SystemC对组合逻辑和时序逻辑没有直接的区分,而侧重于解决高级语言实现信号同步变化的问题。SystemC引入了delta周期的概念,模块中的每个输入输出信号在函数体内赋值之后,不会立即变化,而是在整个函数体执行完后再更新。通过这个设定,SystemC实现了串行模拟并行。但是,SystemC中的输入输出信号在函数体内不更新,使得一个函数只能用于计算一个信号,函数效率降低,模块编写复杂,代码逻辑变得难以理解。
在本发明实施例中,通过定义时钟与周期,将组合逻辑相关信号和时序逻辑相关信号分别抽象成组合事务和时序事务,并将所有所述组合事务和时序事务放入相应的队列,将时钟、时序事务和组合事务分开考虑,时钟负责维护事务队列,时序逻辑和组合逻辑的运行均由事务驱动,在每个周期中将组合事务和时序事务分开进行信号的传输,并进行相应的赋值与更新,实现逻辑功能的接收与发送,通过维护事务队列,实现组合事务和时序事务按照周期的正确执行。
由于本实施例中,所述队列需要从外部进行信号输入,从而将信号在队列中的各个节点间进行传输,进行相应的赋值与更新,实现逻辑功能的接收与发送,因此本发明实施例还具有以下设计:
所述根据所有所述组合事务和时序事务建立队列,具体包括:
所述队列包括输入层和功能层,所述输入层中的节点接收来自外部的信号,并进行赋值和更新,将更新后的数值传输至所述功能层;所述功能层接收来自输入层的信号,并在功能层内部按照队列的顺序进行传输,所述功能层中的节点接收来自输入层的信号,或者各节点相互之间进行接收传输信号并进行赋值和更新;其中,所述功能层和输入层均包括多个节点,每个节点为组合事务或者时序事务。
所述输入层中的每个节点将信号传输给一个或者多个功能层中的节点;所述功能层中的每个节点接收队列中除自身以外的一个或者多个节点的信号,并进行赋值和更新;所述功能层中的每个节点将信号传输至功能层中除自身以外的一个或者多个节点。
其中,所述输入层在总周期数内的每个周期都会进行一次信号输入,所述输入层中的每个节点在每个周期都会接收一次外部信号,所有输入层的节点都直接与功能层中的节点对应传输,输入层中的各个节点之间没有传输关系;需要注意的是,输入层的每个节点将信号发送至功能层中的一个或者多个节点,而功能层中一部分节点用于接收一个或多个输入层中的节点,并且该部分节点将信号接收后,传输至功能层中除自己以外的一个或者多个节点;而功能层中的另一部分节点则同除自己以外的一个或者多个节点建立传输与接收关系。
值得一提的是,当A节点用于接收两个或者两个以上数量的其他节点的信号时,所接收到的信号值应为所述两个或者两个以上数量的其他节点的信号值的算术逻辑组合;而当A节点用于将信号传输至两个或者两个以上数量的其他节点时,传输给每个其他节点的信号均应相同;其中所述A节点不用于指代特定节点,A节点可以用于指代功能层中的任意一个节点。
在本发明实施例中,时序事务和组合事务分别在时钟为0和时钟为1时进行传输,从而将两种事务分开进行考虑,而对于时序事务,模型实现的方法是在时钟为0时调用,但考虑到顺序执行带来的差异,本发明实施例还具有以下设计:
所述当所述时钟的状态为0时,所有时序事务按照队列的顺序进行信号传输的赋值,具体包括:
当所述时钟的状态为0时,所有已进行信号更新的时序事务按照队列的顺序进行信号传输,将已更新的信号传输给一个或者多个节点,接收到信号的所述一个或者多个节点完成赋值并停止信号传输。
当时钟的状态为0时,只有已进行信号更新的时序事务才能按照队列顺序将信号传输给其他节点,而未接收到信号的时序事务则无法进行信号传输,而仅仅进行了信号赋值未进行信号更新的信号值同样不能进行信号传输,此处需要注意的是,由于每个周期都会从外部输入信号,因此同一个时序事务在同一个周期的时钟为0期间,可能一方面会接收来自下游的其他时序事务的信号并赋值,另一方面会将上一周期中已经更新完的信号进行发送,这类节点也算是更新完毕的时序事务,但这类节点仅能将已更新的信号值进行传输,而不能将刚接收到的赋值信号进行传输,所述赋值信号需要等到下一周期更新完毕后在时钟的状态为0时进行传输。
而组合逻辑是模型提高抽象层次的关键,RTL中的信号可以视为每经过一个周期都重新计算,这种更新方法对于高级语言来说效率太低,因此需要对具体组合逻辑信号进行分析,将信号聚类成事务,因此本发明实施例还具有以下设计:
所述当所述时钟的状态为1时,所有组合事务按照队列的顺序进行信号传输的赋值以及更新,具体包括:
当所述时钟的状态为1时,所有完成赋值的组合事务进行信号更新,并按照队列的顺序将信号传输给一个或者多个节点。
当接收到信号的节点为组合事务时,所述组合事务根据接收到的信号完成赋值以及更新,并继续按照队列的顺序将信号传输给一个或者多个节点,直至信号被传输给时序事务,所述时序事务根据接收到的信号完成赋值并停止信号传输;当接收到信号的节点为时序事务时,所述时序事务根据接收到的信号完成赋值并停止信号传输。
所述所有完成赋值的组合事务即为:在上一次时钟的状态为0时,接收到来自时序事务的信号的组合事务,由于在时钟的状态为0时,时序事务将信号传输至其他节点后,该节点对于接收到的信号只进行赋值不进行更新,因此在时钟的状态为1时,首先进行传输的组合事务均应刚接收到来自时序事务的信号;需要注意的是,在组合事务进行信号传输时,根据队列顺序,若组合事务的后续节点同样为组合事务,则后续的组合事务则根据接收到的信号直接完成赋值与更新,并将信号继续传输,直至传输至时序事务为止,这是由于时序事务仅在时钟的状态为0的时候才能执行,而此时时钟为1,因此组合事务的执行不受影响,需要注意的是,当时序事务接收到来自组合事务的信号时,时序事务仅对该信号进行赋值,并不对进行更新,因此也无法信号传输。综上,当时钟的状态为1时,将队列中连续的组合事务持续进行信号传输,直至传输至时序信号后停止。
因为有时序逻辑的存在,部分信号在事务传递的循环中始终固定不变,而组合逻辑信号最终也能分解成时序逻辑信号。因此,组合逻辑执行时,事务传递不会无止尽的循环下去,最终会完成整个更新链上所有组合逻辑信号的更新,并停在时序逻辑信号的更新上。
由于需要确保每个时序事务进行更新的信号值为前一个周期中时钟为0时所赋值的信号值,而不是当前周期中时钟为1时所接收到的信号的信号值,因此为了实现时序事务在计算信号值上直观来看在赋值后会延迟一个周期进行更新,本发明实施例还具有以下设计:
所述将上一周期中所有进行信号赋值的时序事务按照所述信号赋值进行信号更新,具体包括:
当所述时钟的状态为1时,获取所有上一个周期中接收到信号并进行过信号赋值的时序事务,将所述时序事务按照所述信号赋值进行信号更新,用于在后续时钟的状态为0时,将所述更新后的信号值进行时序事务的信号传输。
由于时钟为0时,时序事务在接收到信号后,只能根据该信号进行赋值,不能根据赋值进行更新,因此将所有时序事务的更新设置在时钟的状态为1时进行,本实施例中,所述时序事务的更新在时钟的状态从1翻转为0时进行,并且所有更新的时序事务均为上一周期中进行赋值的时序事务。由于时序逻辑方法调用时只会产生影响下一周期的事务,所以事务传递并不会出现环路。时钟为0时,模型执行结果类似在经历delta周期,信号均处于不稳定状态,模型的信号处于当前周期和下一周期之间的状态,无法做结果对比。
对于上述描述,本实施例进行如下举例说明:
如图2所示,图中实线圆圈为组合事务,受组合逻辑控制,虚线圆圈为时序事务,受时序逻辑控制,图中箭头代表信号的传输方向。
当前周期的时钟的状态为1时,组合事务1进行信号更新,并将信号传输至组合事务2和组合事务3,组合事务2和组合事务3完成输入信号的赋值与更新,并将信号传输给时序事务4,此时时序事务4先将上一个周期中赋值的第一信号进行更新,再将本轮周期中接收到的第二信号进行赋值,但不会将第二信号进行更新,所述第二信号的更新会在下一个周期的时钟的状态为1时进行,在当前时钟的状态为1时,信号的传输停止。
当前周期的时钟的状态为0时,时序事务4将更新后的第二信号传输至组合事务5,组合事务5将接收到的第二信号进行赋值,信号的传输停止。
下一周期的时钟的状态为1时,组合事务5将第二信号的赋值进行更新,并将信号传输至组合事务3,组合事务3根据接收到的信号进行赋值更新,并将信号传输至时序逻辑4中,时序逻辑4根据接收到的信号进行赋值,并且信号的传输停止。
所述按照所述队列设置总周期数,具体包括:
所述周期数根据所述输入层接收外部信号的次数,以及每轮外部信号在队列中传输完毕的周期数而定。
所述总周期数需要在整个流程实施以前就进行设定,当队列流程设定完毕后,执行队列中所有节点所需的信号也已经确定,因此可以确定输入层一共需要接收多少次外部信号,而本实施例中,每个周期进行一次外部信号的输入,并且每轮外部信号在队列中传输所需的周期数也是固定的,因此整个流程所需的总周期数也是固定的。
由于所有节点在接受到信号后都需要先进行赋值再进行更新,而本实施例中,还会出现部分节点在当前周期只能进行赋值,到下一个周期才能根据赋值进行更新,因此对于每个节点来说,在接收到信号以后,赋值和更新需要分开进行处理,因此本发明实施例具有以下设计:
所述时序事务接收到信号后,所述时序事务添加新变量将接收到的信号作为未来值进行暂存,从而完成时序事务的赋值;从所述未来值中提取接收到的信号并更新至当前值中,从而完成时序事务的更新。
所述组合事务接收到信号后,所述组合事务添加新变量将接收到的信号作为未来值进行暂存,从而完成组合事务的赋值;从所述未来值中提取接收到的信号并更新至当前值中,从而完成组合事务的更新。
在本发明实施例中,对于每个节点,无论是时序事务还是组合事务,都需要对应设置未来值和当前值,其中所述未来值所存储的信号值用于进行赋值,而当前值存储的信号值则用于进行更新。考虑到在流程执行过程中,由于每个周期都会进行外部信号的输入,因此除开连续的传输的组合事务以外,所有时序事务和部分组合事务在同一周期内,自身的未来值和当前值不同,未来值是当前周期传输至节点的信号值,而当前值则是前一个周期传送至节点的信号值;而对于连续的传输的组合事务来说,由于当时钟为1时,在队列中处于连续顺序的组合事务在接收到信号后都是在直接进行赋值更新,并将信号传输至下一个节点,因此在队列中处于连续顺序的组合事务通常无需用到未来值与当前值。
本发明实施例还以实际情景展现一种基于高级语言模拟RTL的建模方法。
需要注意的是,该实施例是一种功能抽象出来的特例。
如图3所示,图中实线圆圈为组合事务,受组合逻辑控制,虚线圆圈为时序事务,受时序逻辑控制,图中箭头代表信号的传输方向。
根据图中可知,节点1、节点2、节点3、节点4和节点5均为输入层节点;
以节点2和节点3为例,节点2和节点3均为时序事务,如图4所示,流程如下:
步骤201中,当仿真开始时,外部信号输入至节点2和节点3,并在节点2和节点3中赋值更新。
步骤202中,当第一周期的时钟为0时,节点2和节点3将信号传输至节点7,节点7根据接收到的信号进行赋值。
步骤203中,当第一周期的时钟翻转1时,节点7根据赋值进行更新,并将信号按照节点9、节点10、节点13、节点15的顺序传输,直至传输到节点15停止,节点15根据接收到的信号赋值。
步骤204中,第一周期的下一周期的时钟为1时,节点15根据第一周期中的信号赋值进行信号更新。
步骤205中,在第一周期的下一周期的时钟为0时,节点15将更新的信号值传输至节点10,节点10根据接收到的信号进行赋值。
由上述实施例可知,组合逻辑执行时,组合事务的信号传输不会无止尽的循环下去,最终会完成整个队列上所有连续顺序的组合事务的更新,并在传输至时序事务时停止。
本发明实施例还提供了一种基于高级语言模拟RTL的建模方法的实施流程,如图5所示,包括:
步骤301中,预先设定周期数为n,总周期数为N,启动时钟翻转以及外部信号输入。
需要注意的是,总周期数也可以不预先进行设定,而是根据相应设定自行停止。
步骤302中,判断时钟的状态是否为1,若是,则跳转至步骤303,若不是,则跳转至步骤308。
步骤303中,按照队列顺序获取所有能够执行的组合事务。
步骤304中,对所有能够执行的组合事务进行信号传输以及赋值更新,并执行步骤305。
步骤305中,根据执行的组合事务,将新的事务发出,并跳转至步骤306。
步骤306中,判断所有获取的能够执行的组合事务中是否有还未处理的,若是,则跳转至步骤303,若不是,则跳转至步骤307。
步骤307中,将时钟的状态进行翻转,并跳转至步骤302。
步骤308中,按照队列顺序获取所有能够执行的时序事务。
步骤309中,对所有已更新的时序事务进行信号传输。
步骤310中,根据执行的时序事务,将新的事务发出。
步骤311中,令n=n+1。
步骤312中,判断是否n小于N,若是,跳转至步骤306,若不是,跳转至步骤313。
步骤313中,仿真结束。
本发明实施例还提供另一种基于高级语言模拟RTL的建模方法,对该方法从模块的层面进行阐述。
本实施例中,整个模块的实现包括:信号定义、组合逻辑实现、时序逻辑实现、时钟控制系统,其中:
(1)信号定义:信号是模型中最重要的数据,在RTL逻辑中,每个模块具有输入信号、输出信号和内部信号,上层模块对底层模块实例化并将信号传入模块实现信道通信。其最大的特点就是无论信号的值是否发生变化,信号对应的电路始终在通电状态,在波形上看,每经过一个周期信号都重新计算了一遍。而在高级语言中,只有相关的方法被调用,变量才会更新。因此,不能以周期为基准,而是以信号变化为基准,进行事务级建模,信号变化代表了新事务产生,方法才会被调用。
(2)组合逻辑实现
如图6所示,组合逻辑是模型提高抽象层次的关键。如上所述,RTL中信号可以视作每经过一个周期都重新计算,这种更新方式对于高级语言而言效率太低,因此需要对具体组合逻辑信号进行分析,将信号聚类成事务。这样一来,组合逻辑事务的执行所影响的对象是其他组合事务和时序事务,而在上述的建模方法描述中,组合逻辑事务对时序逻辑事务的影响会在时钟的另一选择分支中执行,所以只需要考虑组合逻辑事务对其他组合逻辑事务的影响,将模块内的多条组合逻辑抽象成事务和方法,使用事务级建模方法来调用此方法。在时钟为一时,外部的TestBench和时序逻辑的更新都会产生输入信号,作为启动控制器组合逻辑的事务进入到各个模块的组合逻辑部分,开始组合逻辑间的事务传递。
(3)时序逻辑实现
如图6所示,时序逻辑在组合逻辑的事务传递结束之后才需要进行计算,具体地,在组合逻辑事务传递到时序逻辑而时钟为一时,时序逻辑部分不会执行,因为组合逻辑的更新尚未完全结束,只有在时钟为零时,时序逻辑才可以处理组合逻辑传来的事务,并将计算结果暂存下来,由时钟控制系统触发更新。
(4)时钟控制系统
如图6所示,该系统负责更新时钟和周期、更新时序逻辑信号、维护事务队列和启动事务传递。系统内维护两个事务队列,用于时钟为零和时钟为一的执行,称为零时钟队列和一时钟队列。时钟在零和一之间翻转,每翻转一轮后周期数增加,并允许TestBench输入新事务如一时钟队列(命令或读数据传输信号)。一时钟队列中的事务会在时钟为一时处理,且均是组合逻辑的事务。组合逻辑在处理事务时,会在两事务队列里,继续新增事务,新增至一事务队列中的事务会继续处理,直到该队列不再有新增事务。一事务队列为空时,组合逻辑全部更新完毕。时钟从一翻转至零。在时钟为零时,零事务队列先记录下队列尾的事务索引指针,处理至记录的队尾索引后,系统控制时序逻辑部分更新时序逻辑信号。至此,一个周期的事务均处理完毕,时钟从零翻转回一,周期自加,开始新一周期的事务处理。
如图7-图10所示,本实施例还以实际情景下为例,展现一种基于高级语言模拟RTL的建模的流程。
其中图7为该流程的队列节点图,其中,clk为时钟节点,左边即为其相关代码,rtsn为重置信号节点,左边即为其相关代码,Valid即为输入信号节点,用于接收来自外部的输入信号,左边即为其相关代码。
图8即为图7对应的时序图,展现了信号在各个节点中的传输流程。
图9和图10即为相应的RTL的代码图。
如图11所示,是本发明实施例的基于高级语言模拟RTL的建模装置的装置示意图。本实施例的基于高级语言模拟RTL的建模装置包括一个或多个处理器21以及存储器22。其中,图7中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图11中以通过总线连接为例。
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如上述实施例中的基于高级语言模拟RTL的建模方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行基于高级语言模拟RTL的建模方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例中的基于高级语言模拟RTL的建模方法,例如,执行以上描述的图1-10所示的各个步骤。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于高级语言模拟RTL的建模方法,其特征在于,包括:
定义时钟与周期,其中,所述时钟包括0与1两种状态,所述时钟每1/2周期进行状态切换;
将组合逻辑相关信号和时序逻辑相关信号分别抽象成组合事务和时序事务,将所有所述组合事务和时序事务放入相应的队列,并设置总周期数;
所述队列包括输入层和功能层,所述输入层中的节点接收来自外部的信号,并进行赋值和更新,将更新后的数值传输至所述功能层;所述功能层接收来自输入层的信号,并在功能层内部按照队列的顺序进行传输,所述功能层中的节点接收来自输入层的信号,或者各节点相互之间进行接收传输信号并进行赋值和更新;其中,所述功能层和输入层均包括多个节点,每个节点为组合事务或者时序事务;
所述输入层中的每个节点将信号传输给一个或者多个功能层中的节点;所述功能层中的每个节点接收队列中除自身以外的一个或者多个节点的信号,并进行赋值和更新;所述功能层中的每个节点将信号传输至功能层中除自身以外的一个或者多个节点;
每个所述周期内,当所述时钟的状态为0时,所有时序事务按照队列的顺序,向其他事务传输上一周期所得到的更新后的信号,并根据当前接收到的信号进行赋值;当所述时钟的状态为1时,所有组合事务按照队列的顺序根据当前接收到的信号进行赋值,并立即更新,将更新后的信号传输给其他事务,并将上一周期中所有进行信号赋值的时序事务进行信号更新;
在所述总周期数内将所述组合事务与所述时序事务执行完毕。
2.根据权利要求1所述的基于高级语言模拟RTL的建模方法,其特征在于,所述当所述时钟的状态为0时,所有时序事务按照队列的顺序,向其他事务传输上一周期所得到的更新后的信号,并根据当前接收到的信号进行赋值包括:
当所述时钟的状态为0时,所有已进行信号更新的时序事务按照队列的顺序进行信号传输,将已更新的信号传输给一个或者多个节点,接收到信号的所述一个或者多个节点完成赋值并停止信号传输。
3.根据权利要求2所述的基于高级语言模拟RTL的建模方法,其特征在于,所述当所述时钟的状态为1时,所有组合事务按照队列的顺序根据当前接收到的信号进行赋值,并立即更新,将更新后的信号传输给其他事务,并将上一周期中所有进行信号赋值的时序事务进行信号更新包括:
当所述时钟的状态为1时,所有完成赋值的组合事务进行信号更新,并按照队列的顺序将信号传输给一个或者多个节点;
当接收到信号的节点为组合事务时,所述组合事务根据接收到的信号完成赋值以及更新,并继续按照队列的顺序将信号传输给一个或者多个节点,直至信号被传输给时序事务,所述时序事务根据接收到的信号完成赋值并停止信号传输。
4.根据权利要求3所述的基于高级语言模拟RTL的建模方法,其特征在于,所述将上一周期中所有进行信号赋值的时序事务进行信号更新包括:
当所述时钟的状态为1时,获取所有上一个周期中接收到信号并进行过信号赋值的时序事务,将所有进行过信号赋值的时序事务进行信号更新,用于在后续时钟的状态为0时,将更新后的时序事务进行信号传输。
5.根据权利要求1所述的基于高级语言模拟RTL的建模方法,其特征在于,所述设置总周期数包括:
所述总周期数根据所述输入层接收外部信号的次数,以及每轮外部信号在队列中传输完毕的周期数而定。
6.根据权利要求1至4中任一项所述的基于高级语言模拟RTL的建模方法,其特征在于,所述时序事务接收到信号后,所述时序事务添加变量将接收到的信号作为未来值进行暂存,从而完成时序事务的赋值;
当时钟的状态为1时,从所述未来值中提取上一个周期接收到的信号并更新至当前值中,从而完成时序事务的更新。
7.根据权利要求1至4中任一项所述的基于高级语言模拟RTL的建模方法,其特征在于,所述组合事务接收到信号后,所述组合事务添加变量将接收到的信号作为未来值进行暂存,从而完成组合事务的赋值;
从所述未来值中提取接收到的信号并更新至当前值中,从而完成组合事务的更新;当时钟的状态为1时,所述组合事务接收到信号后,依据当前接收到的信号进行赋值与更新。
8.一种基于高级语言模拟RTL的建模装置,其特征在于,所述装置包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行如权利要求1至7中任一项所述的基于高级语言模拟RTL的建模方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311149789.2A CN116882336B (zh) | 2023-09-07 | 2023-09-07 | 一种基于高级语言模拟rtl的建模方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311149789.2A CN116882336B (zh) | 2023-09-07 | 2023-09-07 | 一种基于高级语言模拟rtl的建模方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116882336A CN116882336A (zh) | 2023-10-13 |
CN116882336B true CN116882336B (zh) | 2023-12-01 |
Family
ID=88272220
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311149789.2A Active CN116882336B (zh) | 2023-09-07 | 2023-09-07 | 一种基于高级语言模拟rtl的建模方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116882336B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118194813A (zh) * | 2023-12-01 | 2024-06-14 | 芯动微电子科技(武汉)有限公司 | 一种芯片设计阶段的仿真验证方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1491394A (zh) * | 2001-08-14 | 2004-04-21 | ���ܿ���ϵͳ����˾ | 时序不灵敏及无假信号逻辑系统和方法 |
CN110612526A (zh) * | 2017-05-29 | 2019-12-24 | 富士通株式会社 | 系统c模型生成方法和系统c模型生成程序 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7080365B2 (en) * | 2001-08-17 | 2006-07-18 | Sun Microsystems, Inc. | Method and apparatus for simulation system compiler |
US7231615B2 (en) * | 2003-12-08 | 2007-06-12 | Cadence Design Systems, Inc. | Methods and apparatus for transforming sequential logic designs into equivalent combinational logic |
US8306802B2 (en) * | 2006-11-02 | 2012-11-06 | Synopsys, Inc. | Method for modeling an HDL design using symbolic simulation |
US9684746B2 (en) * | 2015-10-13 | 2017-06-20 | Synopsys, Inc. | Signal reconstruction in sequential logic circuitry |
GB201522216D0 (en) * | 2015-12-16 | 2016-01-27 | Lambda Logic Ltd | System and method for the design of digital hardware |
-
2023
- 2023-09-07 CN CN202311149789.2A patent/CN116882336B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1491394A (zh) * | 2001-08-14 | 2004-04-21 | ���ܿ���ϵͳ����˾ | 时序不灵敏及无假信号逻辑系统和方法 |
CN110612526A (zh) * | 2017-05-29 | 2019-12-24 | 富士通株式会社 | 系统c模型生成方法和系统c模型生成程序 |
Also Published As
Publication number | Publication date |
---|---|
CN116882336A (zh) | 2023-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Knapp et al. | Model checking timed UML state machines and collaborations | |
Gupta et al. | Hardware-software cosynthesis for digital systems | |
US6021266A (en) | Method of designing an integrated circuit using scheduling and allocation with parallelism and handshaking communication, and an integrated circuit designed by such method | |
US7260798B2 (en) | Compilation of remote procedure calls between a timed HDL model on a reconfigurable hardware platform and an untimed model on a sequential computing platform | |
CN110825440B (zh) | 指令执行方法和装置 | |
CN111897580B (zh) | 一种可重构阵列处理器的指令调度系统及方法 | |
CN116882336B (zh) | 一种基于高级语言模拟rtl的建模方法与装置 | |
CN106462431B (zh) | 在高级综合中提取系统架构 | |
US8782592B2 (en) | System and method for designing digital circuitry with an activity sensor | |
CN105843660A (zh) | 一种编译器的代码优化调度方法 | |
CN111985634B (zh) | 神经网络的运算方法、装置、计算机设备及存储介质 | |
Takach et al. | An automaton model for scheduling constraints in synchronous machines | |
Lin et al. | Embedded architecture co-synthesis and system integration | |
US7464361B2 (en) | System and method for asynchronous logic synthesis from high-level synchronous descriptions | |
CN116841564B (zh) | 一种数据处理方法、装置、设备以及计算机可读存储介质 | |
CN114138342B (zh) | Rocc协处理器接口模型及其自动生成工具和实现方法 | |
US8595659B2 (en) | Verification and reachability using an organic approach | |
Cortadella et al. | Quasi-static scheduling of independent tasks for reactive systems | |
Borrione et al. | An approach to the introduction of formal validation in an asynchronous circuit design flow | |
Hang et al. | Timing analysis for mode switch in component-based multi-mode systems | |
David et al. | Self-timed architecture of a reduced instruction set computer | |
Lo et al. | Automatic generation of Cycle Accurate and Cycle Count Accurate transaction level bus models from a formal model | |
Sindorf et al. | An integer linear programming approach to the overlapped scheduling of iterative data-flow graphs for target architectures with communication delays | |
CN111522635A (zh) | 计算任务处理方法、装置、服务器及存储介质 | |
CN111143208A (zh) | 基于处理器技术辅助fpga实现ai算法的验证方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |