1 了解仿真器的工作机制的目的
A 满足好奇心
B 了解仿真器的核心算法,并对verilog/sverilog语言和仿真器有深入掌握
2 假想的概念(来源与ieee 1364)
仿真时间:硬件执行的时间模拟,由仿真器控制
时间槽:仿真器将所有的仿真时间($finish控制???臆测),划分为各个时间单元,在每个时间槽内执行仿真,并且在执行玩所有的仿真之后,进入到下一个时间槽,直至到仿真结束。
事件:仿真器基于时间来管理仿真的调度,事件主要分为“更新事件“和”估值事件”
事件region:仿真器在每个时间槽,把不同的事件放入到对应的事件region(队列)中,并安排先后执行顺序,每个region内的事件的调度顺序随机而定。
3.假想
就verilong而言,定义了语法结构,包括module, initial ,always 以及assign(continous)等,以及层次结构。
也定义了reg和wire等数据结构。
仿真器要做的就是,在memory(计算机系统的物理内存)中,将所有的数据结构按照仿真时间进行类似照片一样的存储,即所有源代码中定义的reg和net进行内存分配,我们称为一帧,在仿真时间轴上,我们基于事件调度代码的先后执行,并在时间槽内完成数据帧的值更新,下一个时间槽,对应更新这帧数据。
reg和net在不同的module中可以重名,因此我们要建立hierarcy结构,在此结构上可以唯一确定所有的reg和wire.
然后将intitial always assign以及其中的赋值(blocking & nonblocking)对应到事件region上,并按照约定的事件调度顺序,完成数值的更新和估值。
总结,到目前也没找到具体的一个paper来讲述仿真器的具体执行过程。以上仅仅是猜想。
如果,针对每种verilog的语法结构(譬如initial)对应到仿真器都能推演一遍,如此遍历所有语法结构,则第一节中的目标可以实现了。 这个任务只能是后续找到资料,再研究,再补充了。