CN114528793B - 一种对Verilog HDL进行行为仿真的方法 - Google Patents

一种对Verilog HDL进行行为仿真的方法 Download PDF

Info

Publication number
CN114528793B
CN114528793B CN202210427569.0A CN202210427569A CN114528793B CN 114528793 B CN114528793 B CN 114528793B CN 202210427569 A CN202210427569 A CN 202210427569A CN 114528793 B CN114528793 B CN 114528793B
Authority
CN
China
Prior art keywords
queue
empty
checking whether
events
simulation
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
Application number
CN202210427569.0A
Other languages
English (en)
Other versions
CN114528793A (zh
Inventor
王彦鹏
李立
谢辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan Panlian Xin'an Information Technology Co ltd
Original Assignee
Hunan Panlian Xin'an Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan Panlian Xin'an Information Technology Co ltd filed Critical Hunan Panlian Xin'an Information Technology Co ltd
Priority to CN202210427569.0A priority Critical patent/CN114528793B/zh
Publication of CN114528793A publication Critical patent/CN114528793A/zh
Application granted granted Critical
Publication of CN114528793B publication Critical patent/CN114528793B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation

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)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种对Verilog HDL进行行为仿真的方法,包括获取当前仿真时刻的5个事件队列,检测队列A是否为空,若不为空,依次执行队列A中事件的处理函数;检查队列B是否为空,如果不为空,依次执行队列B中事件的处理函数;检查队列C是否为空,如果不为空,依次执行队列C中事件的处理函数;检查队列B是否为空,如果为空,检查队列D是否为空,如果不为空,依次执行队列D中事件的处理函数;检查队列B是否为空,如果为空,检查队列D是否为空,如果为空,检查是否触发了系统函数,如果触发了,依次执行队列E被触发的系统函数,完成当前仿真时刻的队列。在保证与verilog标准语义一致的前提下,更容易使用编程语言实现。

Description

一种对Verilog HDL进行行为仿真的方法
技术领域
本发明属于仿真领域,特别是涉及一种对Verilog HDL进行行为仿真的方法。
背景技术
在verilog标准中,所有的事件被分为了下面的5种:活动事件(Active Event)在当前的仿真事件产生,可以按任意顺序处理;非活动事件(Inactive Event)在当前仿真时间产生,但必须在所有活动事件处理完成之后再进行处理;非阻塞赋值更新事件(Nonblocking Assign Update Event)在之前的某个仿真时间已被计算,但在当前仿真时间,必须在所有活动事件和非活动事件处理完成之后,再进行赋值;监控事件(MonitorEvent)必须在所有活动,非活动,和非阻塞赋值更新事件之后处理;未来事件(FutureEvent)在未来某个仿真时间产生,未来事件分为未来非活动事件(Future InactiveEvent)和未来非阻塞赋值更新事件(Future Nonblocking Assignment Update Event)。
但是verilog标准中只给出来抽象模型,没有具体的实现的方法,因为亟需一种对Verilog HDL进行行为仿真的方法。
发明内容
针对以上技术问题,本发明提供一种对Verilog HDL进行行为仿真的方法。
本发明解决其技术问题采用的技术方案是:
一种对Verilog HDL进行行为仿真的方法,方法包括以下步骤:
步骤S100:在与Verilog保持语义和标准一致的前提下,将调度模型划分为每一时刻都有的5个事件队列,其中,队列A包括值计算、普通赋值语句值更新事件,队列B包括值更新引发的其他值的更新事件,队列C包括0延迟语句值更新事件,队列D包括非阻塞赋值值更新事件队列,队列E包括系统函数监控事件;
步骤S200:获取当前仿真时刻的5个事件队列,检测队列A是否为空,若队列A不为空,则依次执行队列A中事件的处理函数;
步骤S300:检查队列B是否为空,如果队列B不为空,依次执行队列B中事件的处理函数;
步骤S400:检查队列C是否为空,如果队列C不为空,依次执行队列C中事件的处理函数;
步骤S500:检查队列B是否为空,如果队列B为空,检查队列D是否为空,如果队列D不为空,依次执行队列D中事件的处理函数;
步骤S600:检查队列B是否为空,如果队列B为空,检查队列D是否为空,如果队列D为空,检查是否触发了系统函数,如果触发了,依次执行队列E被触发的系统函数,完成当前仿真时刻的事件队列,取下一个仿真时刻的事件队列作为当前时刻的仿真事件队列,并返回步骤S200,直至仿真结束,退出程序。
优选地,步骤S200还包括:若队列A为空,检查队列D是否为空,若队列D为空,则仿真结束,退出程序;若队列D不为空,依次执行队列D中事件的处理函数。
优选地,步骤S300还包括:如果队列B为空,执行步骤S400。
优选地,步骤S400还包括:如果队列C为空,执行步骤S500中检查队列D是否为空的步骤。
优选地,步骤S500还包括:如果队列D为空,则执行步骤S600中检查是否触发了系统函数的步骤。
优选地,步骤S200之前还包括:初始化内存和0时刻的事件队列。
上述一种对Verilog HDL进行行为仿真的方法,在保证与verilog标准语义一致的前提下,使用了与verilog标准不一样的事件队列组织和调度方法,更容易使用编程语言实现。
附图说明
图1为本发明一实施例中一种对Verilog HDL进行行为仿真的方法流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明的技术方案,下面结合附图对本发明作进一步的详细说明。
在一个实施例中,一种对Verilog HDL进行行为仿真的方法,方法包括以下步骤:
步骤S100:在与Verilog保持语义和标准一致的前提下,将调度模型划分为每一时刻都有的5个事件队列,其中,队列A包括值计算、普通赋值语句值更新事件,队列B包括值更新引发的其他值的更新事件,队列C包括0延迟语句值更新事件,队列D包括非阻塞赋值值更新事件队列,队列E包括系统函数监控事件。
具体地, 赋值语句有三种:1、阻塞赋值(普通的赋值语句),形如 a=b;2、非阻塞赋值,形如 a <= b;连续赋值,形如assign a=b。每种赋值语句都可以加延迟属性,如 #3 a=b表达的语义是:现将b的值记录下来,然后延迟3个时刻再值赋值给a。当延迟的时刻数是0时,就是特殊的语句,构成队列C。队列A:计算a=b这样的阻塞赋值语句;队列B:计算连续赋值语句(assign a=b 这样的赋值语句);队列C:#0 a=b 这样的显示的延迟为0的阻塞赋值语句;队列D:计算 a <=b 这样的非阻塞赋值语句;队列E:执行$monitor、$strobe这两个系统函数。
步骤S200:获取当前仿真时刻的5个事件队列,检测队列A是否为空,若队列A不为空,则依次执行队列A中事件的处理函数。
在一个实施例中,步骤S200还包括:若队列A为空,检查队列D是否为空,若队列D为空,则仿真结束,退出程序;若队列D不为空,依次执行队列D中事件的处理函数。
在一个实施例中,步骤S200之前还包括:初始化内存和0时刻的事件队列。
步骤S300:检查队列B是否为空,如果队列B不为空,依次执行队列B中事件的处理函数。
在一个实施例中,步骤S300还包括:如果队列B为空,执行步骤S400。
步骤S400:检查队列C是否为空,如果队列C不为空,依次执行队列C中事件的处理函数。
在一个实施例中,步骤S400还包括:如果队列C为空,执行步骤S500中检查队列D是否为空的步骤。
步骤S500:检查队列B是否为空,如果队列B为空,检查队列D是否为空,如果队列D不为空,依次执行队列D中事件的处理函数;
在一个实施例中,步骤S500还包括:如果队列D为空,则执行步骤S600中检查是否触发了系统函数的步骤。
步骤S600:检查队列B是否为空,如果队列B为空,检查队列D是否为空,如果队列D为空,检查是否触发了系统函数,如果触发了,依次执行队列E被触发的系统函数,完成当前仿真时刻的事件队列,取下一个仿真时刻的事件队列作为当前时刻的仿真事件队列,并返回步骤S200,直至仿真结束,退出程序。
具体调度方法为:
1、0时刻,初始化内存、初始化0时刻的事件队列;
2、检查队列A和队列D。如果都为空,执行第`13`步;如果队列A不为空,执行第`3`步;如果队列A为空,队列D不为空,则执行第`10`步;
3、依次执行队列A中事件的处理函数;
4、检查队列B是否为空,如果不为空,执行第`5`步;否则执行第`6`步;
5、依次执行队列B中事件的处理函数,然后执行第`4`步;
6、检查队列C是否为空,如果不为空,执行第`7`步;否则执行第`9`步;
7、依次执行队列C中事件的处理函数,然后执行第`8`步;
8、检查队列B是否为空,如果不为空,执行第`5`步;否则执行第`9`步;
9、检查队列D是否为空,如果不为空,执行第`10`步;否则执行第`11`步;
10、依次执行队列D中事件的处理函数,然后执行第`8`步;
11、检查是否触发了$monitor等系统函数,如果触发了,依次执行队列E被触发的系统函数,然后执行第`12`步;进一步地,monitor监控的变量,值发生了变化,就会触发monitor函数;
12、取下一个仿真时刻的事件队列,然后执行第`1`步;
13、仿真结束,退出程序。
具体调度流程图如图1所示。
如下verilog代码:
module demo;
reg a;
reg b;
wire [1:0]c;
initial begin
a = 0;
end
initial begin
b <= a;
end
initial begin
#0 a = 1;
end
initial begin
$monitor("a=%d, b=%d, c=%d", a, b, c);
end
assign c = a,;
endmodule
执行情况如下:
1、0时刻队列初始化后:
(1)队列A会有4个事件,分别对应于4个initial语句。
(2)队列B为空。
(3)队列C为空。
(4)队列D为空。
2、检查队列A是否为空,发现不为空,处理队列A:
(1)处理第一个事件,即会处理a=0语句:
①处理函数会将a的值更新为0;
②然后检查a的值是否发生了变化;
③发现a的值从x(未定值)变化到了0,即发生了改变,会调度被a影响的语句;
④因为assign语句对a的值敏感,所以会将assign语句调度到队列B中。
(2)处理第二个事件,即会处理b<=a语句:
①因为队列A只处理非阻塞赋值语句的值计算;
②所以只需要将此刻a的值(0)保存起来;
③然后将b的更新调度到队列D中。
(3)处理第三个事件,即会处理#0a=1语句:
①因为该语句是一个控制语句,所以会触发调度;
②所以会将a=1这个赋值语句加入到队列C中。
(4)处理第四个事件,即会处理$monitor语句:
①直接执行系统调用处理函数;
②处理函数中会将monitor标记置true,表明当前时刻需要触发monitor。
3、检查队列B是否为空,发现不为空,处理队列B:
(1)此时B队列只有一个事件,即assign语句;
(2)执行assign语句的处理函数,取出a的值(0),然后赋值给c。
4、检查队列B是否为空,发现为空,则进一步检查队列C是否为空,发现队列C不为空,处理队列C:
(1)此时队列C只有一个事件,即被#0控制的语句a=1;
(2)执行a=1的处理函数,将a的值更新为1;
(3)然后检查a的值是否发生了变化;
(4)发现a的值从0变化到了1,即发生了改变,会调度被a影响的语句;
(5)因为assign语句对a的值敏感,所以会将assign语句调度到队列B中。
5、检查队列B是否为空,发现不为空,处理队列B:
(1)此时B队列只有一个事件,即assign语句;
(2)执行assign语句的处理函数,取出a的值(1),然后赋值给c。
6、检查队列B是否为空,发现为空,则进一步检查队列C是否为空,发现队列C也为空。进一步检查队列D,发现队列D不为空,则处理队列D:
(1)此时队列D只有一个事件,即要用之前存起来的a的值(0)对b进行更新;
(2)更新b(此时b值为0);
7、检查队列B是否为空,发现为空,则进一步检查队列C是否为空,发现队列C也为空。进一步检查队列D,发现队列D也为空,则处理系统函数。
8、因为前面标记了此刻需要执行monitor函数,所以会执行队列E内的monitor系统函数。
9、跳转到下个仿真时刻。
10、发现队列都是空的,退出仿真程序。
上述一种对Verilog HDL进行行为仿真的方法,语义上与verilog标准保持了一致,抽象出了一个新的队列B,用于处理当前时刻某些值的更新,所触发的新的需要执行的事件。将verilog标准中的active事件队列又细分为了两个队列,队列A和队列B,在保证语义一致的前提下,使用了与verilog标准不一样的事件队列组织和调度方法,更容易使用编程语言实现。
以上对本发明所提供的一种对Verilog HDL进行行为仿真的方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

Claims (2)

1.一种对Verilog HDL进行行为仿真的方法,其特征在于,所述方法包括以下步骤:
步骤S100:在与Verilog保持语义和标准一致的前提下,将调度模型划分为每一时刻都有的5个事件队列,其中,队列A包括值计算、普通赋值语句值更新事件,队列B包括值更新引发的其他值的更新事件,队列C包括0延迟语句值更新事件,队列D包括非阻塞赋值值更新事件,队列E包括系统函数监控事件;
步骤S200:获取当前仿真时刻的5个事件队列,检测队列A是否为空,若所述队列A不为空,则依次执行所述队列A中事件的处理函数;若所述队列A为空,检查队列D是否为空,若所述队列D为空,则仿真结束,退出程序;若所述队列D不为空,依次执行队列D中事件的处理函数;
步骤S300:检查队列B是否为空,如果所述队列B不为空,依次执行所述队列B中事件的处理函数;如果所述队列B为空,执行步骤S400;
步骤S400:检查队列C是否为空,如果所述队列C不为空,依次执行所述队列C中事件的处理函数;如果所述队列C为空,执行步骤S500中检查队列D是否为空的步骤;
步骤S500:检查所述队列B是否为空,如果所述队列B为空,检查队列D是否为空,如果所述队列D不为空,依次执行所述队列D中事件的处理函数;如果所述队列D为空,则执行步骤S600中检查是否触发了系统函数的步骤;
步骤S600:检查所述队列B是否为空,如果所述队列B为空,检查所述队列D是否为空,如果所述队列D为空,检查是否触发了系统函数,如果触发了,依次执行队列E被触发的系统函数,完成当前仿真时刻的事件队列,取下一个仿真时刻的事件队列作为当前时刻的仿真事件队列,并返回步骤S200,直至仿真结束,退出程序。
2.根据权利要求1中所述的方法,其特征在于,步骤S200之前还包括:初始化内存和0时刻的事件队列。
CN202210427569.0A 2022-04-22 2022-04-22 一种对Verilog HDL进行行为仿真的方法 Active CN114528793B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210427569.0A CN114528793B (zh) 2022-04-22 2022-04-22 一种对Verilog HDL进行行为仿真的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210427569.0A CN114528793B (zh) 2022-04-22 2022-04-22 一种对Verilog HDL进行行为仿真的方法

Publications (2)

Publication Number Publication Date
CN114528793A CN114528793A (zh) 2022-05-24
CN114528793B true CN114528793B (zh) 2022-07-01

Family

ID=81628263

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210427569.0A Active CN114528793B (zh) 2022-04-22 2022-04-22 一种对Verilog HDL进行行为仿真的方法

Country Status (1)

Country Link
CN (1) CN114528793B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113095022A (zh) * 2021-04-22 2021-07-09 国微集团(深圳)有限公司 门级电路的并行仿真处理方法、计算机可读存储介质
CN113343629A (zh) * 2021-06-25 2021-09-03 海光信息技术股份有限公司 集成电路验证方法、代码生成方法、系统、设备和介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7478350B2 (en) * 2005-01-27 2009-01-13 Arc International (Uk) Limited Model modification method for timing Interoperability for simulating hardware
US8849644B2 (en) * 2007-12-20 2014-09-30 Mentor Graphics Corporation Parallel simulation using an ordered priority of event regions
US10528685B2 (en) * 2014-06-06 2020-01-07 Synopsys, Inc. Efficient mechanism in hardware and software co-simulation system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113095022A (zh) * 2021-04-22 2021-07-09 国微集团(深圳)有限公司 门级电路的并行仿真处理方法、计算机可读存储介质
CN113343629A (zh) * 2021-06-25 2021-09-03 海光信息技术股份有限公司 集成电路验证方法、代码生成方法、系统、设备和介质

Also Published As

Publication number Publication date
CN114528793A (zh) 2022-05-24

Similar Documents

Publication Publication Date Title
US7451447B1 (en) Method, computer program and apparatus for operating system dynamic event management and task scheduling using function calls
JP3801630B2 (ja) 車両における内燃機関に対する燃料噴射制御方法
US20040255296A1 (en) Time-bounded program execution
US11568129B2 (en) Spreadsheet recalculation algorithm for directed acyclic graph processing
JPH10207918A (ja) デジタル・システム・シミュレーション
JP2003044295A (ja) スリープキュー管理
JP2003044296A (ja) 実行キュー管理
CN112199170B (zh) 实时操作系统的定时处理方法、装置、设备及存储介质
US10271326B2 (en) Scheduling function calls
JP4241462B2 (ja) 制御ユニットおよびマイクロコンピュータ
CN111400016B (zh) 一种调用应用程序接口函数的方法和设备
CN113495780A (zh) 任务调度方法、装置、存储介质及电子设备
JP4973095B2 (ja) Cadデータのロード装置
CN114625108B (zh) 一种仿真测试方法及装置
CN113126924A (zh) 一种数据迁移方法、装置、设备及计算机可读存储介质
CN114528793B (zh) 一种对Verilog HDL进行行为仿真的方法
CN106650323B (zh) 一种应用程序管理方法及装置
CN112997152A (zh) 应用程序的优先级调整方法、装置、存储介质及电子设备
US20090168092A1 (en) Job management and scheduling method for network system
Quinton et al. Formal analysis of sporadic bursts in real-time systems
CN113056756A (zh) 睡眠识别方法、装置、存储介质及电子设备
JPH10135096A (ja) 半導体製造におけるスケジューリング方法
CN117421106B (zh) 一种嵌入式软件的任务调度方法、系统及设备
CN114153571A (zh) 基于固定时间片的任务调度方法、系统、设备及存储介质
CN114201281A (zh) 指令调度方法、装置、设备以及存储介质

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