2002年6月的标准与手册
2002年6月3日,Accellera董事会批准SystemVerilog 3.0。参考手册的批准页记载了这一日期;技术委员会主席Vassilios Gerousis当天向成员通报,最后的票数已统计完成,3.0成为Accellera认可的标准。它为Verilog-2001增加了面向较高抽象层次的硬件建模和验证能力。
标准通过后,文本开始在参与者之间流通。技术编辑Stuart Sutherland于6月6日通知成员:此前在圣何塞周三会议上没有拿到手册的人,可以下载PDF。邮件特别说明,这份文件已经不是草稿,但还不是Accellera的正式分发版。批准标准与完成正式分发,是相接的两个环节。
沿着Verilog扩展,而非更换设计语言
问题来自日益复杂的芯片设计。工程师已有大量Verilog代码和相应的仿真、综合工具,改用另一种语言会增加迁移成本;与此同时,系统建模和测试所需的数据组织、通信描述,又超出了原有语言方便表达的范围。
1997年,Simon Davidmann和Peter Flake成立Co-Design Automation,开发Superlog及其仿真器。它把Verilog的硬件描述方式与类似C的程序结构结合。早期实现采用分别读取Verilog和Superlog文件的分析器,也提供把一个Superlog子集翻译为Verilog的工具,以利用既有设计流程。
当事人参与撰写的语言史研究记载,SystemSim曾获得包括英特尔在内的客户,但专有语言及保密要求限制了推广。2001年,Co-Design把Superlog的硬件设计子集捐给Accellera。随后的委员会工作,将企业内部的语言技术改造为多家厂商可共同实现的规范。
参考:[2]
跨公司的规范整理
SystemVerilog 3.0并非一个人独立完成的产品。手册列出Gerousis为主席、Dave Kelf为联合主席,参与者包括设计与验证工程师、电子设计自动化厂商,以及电气与电子工程师协会(IEEE)的Verilog标准工作组成员。Sutherland担任技术编辑,Stefen Boyd负责以巴科斯—诺尔范式(BNF)编写的语法附录。
“3.0”的编号也有明确来历:手册将Verilog-1995称为1.0、Verilog-2001称为2.0,再以3.0表示在后者基础上加入这一批扩展。设计人员因此可以从已经使用的语言和工具出发,逐步采用新结构。
把一组连接收进interface
接口是3.0的一项重要方法。传统模块连接需要反复列出信号名称;当存储器、处理器等部件共用一组通信线时,同样的端口说明会出现在多处。SystemVerilog允许把相关信号收进一个命名的interface,再把整个接口实例交给模块。
手册的simple_bus例子包含请求req、许可gnt、地址addr和数据data等信号。顶层建立名为sb_intf的接口实例,再把它同时传给memMod和cpuMod。存储器内部用a.req这样的成员名称访问请求线。改变这组连接的组织方式时,就能集中修改接口定义,减少逐个模块维护长端口表的工作。
接口还可以容纳任务、函数和过程,集中描述通信行为或协议检查;modport则声明模块所见的输入输出方向。这种封装既保留具体信号,也允许设计者在更高层次上描述部件如何协作。
参考:[1]
在过程语句中写明电路意图
另一类扩展针对仿真描述与预期电路之间的差距。手册用“always_comb a = b & c;”示范组合逻辑:过程根据读入的变量推导敏感范围,并在仿真零时刻执行一次,使输出与输入相符;由该过程赋值的变量不能再由其他过程写入。
always_comb、always_latch和always_ff分别表明组合逻辑、锁存逻辑和时序逻辑的意图。工具可以据此检查不相符的写法,例如原想描述组合电路,却因分支遗漏产生锁存行为。它们提供更明确的约束,仍需工程师正确写出行为。
数据表达也更加细分。3.0区分仅含0、1的bit类型和还能表示未知X、高阻Z的logic类型,并加入结构、枚举和用户定义类型。模型可以按所需抽象程度选择表示方法,而不必把不同含义的数据都写成零散的位向量。
参考:[1]
把批准文本转成实施依据
标准获准以后,实现中的问题继续反馈到委员会。2002年11月17日,Gerousis强调3.0应当作为稳定的实施基线,并举例说,Harry Foster实现某项断言时发现的错误正在修正,英特尔也在提供BNF文法反馈。规范的稳定性和具体纠错同时推进。
这批记录呈现了3.0的形成方式:从已有商业语言和仿真经验中取材,由跨公司团队写成共同规范,再在实施中澄清问题。2002年的这一标准阶段,为设计者提供了可共同讨论的接口和过程语义,也为工具开发者规定了需要落实的行为。