北大数字集成电路课件9verilog编译控制

上传人:gp****x 文档编号:243045956 上传时间:2024-09-14 格式:PPT 页数:29 大小:135KB
返回 下载 相关 举报
北大数字集成电路课件9verilog编译控制_第1页
第1页 / 共29页
北大数字集成电路课件9verilog编译控制_第2页
第2页 / 共29页
北大数字集成电路课件9verilog编译控制_第3页
第3页 / 共29页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,数字集成电路设计入门,-从HDL到版图,北大微电子学系,1,第九章,编译控制的使用,学习目标:,开发商提供的Verilog库,用Verilog库仿真,Verilog源代码加密,其它仿真器相关的问题,2,术语及定义,PLI,:编程语言接口,基于C的过程访问Verilog数据结构,UDP,:用户定义的基本单元,用户定义的门级组合的及时序 的Verilog基本单元。,VHDL,:VHSIC HDL,类似Ada的高级VLSI设计语言,3,Verilog模型库,ASIC和FPGA开发商开发并提供工艺专用库,设计人员以库中的元件建立网表,仿真器在编译时扫描模型库寻找实例化模块,合成库可以支持多种工具,例如它可以包含下列工具所需要的信息,仿真器(如Verilog-XL和NC Verilog),综合器(如Ambit),时序分析器(如Pearl),故障仿真(Verifault-XL),开发商提供了大量的Verilog库。这些库并不是Verilog仿真器专用的,但其库管理格式都基于Verilog-XL风格。,库中每个元件都包括功能及工具专用的时序及工艺信息。,4,元件库建模,建立Verilog模型库,需要:,每个元件(或单元)用一个module描述,将相关的module放在同一个文件或,同一个目录中,当把module放到同一个目录时,,文件名应与module名相同。,文件名的扩展名是可选的,可以用两种抽象级描述库单元,结构级,用,Verilog,基本单元或,UDP,用于描述组合逻辑或简单的时序逻辑,行为级,用过程块或赋值语句,用于描述大的或复杂的元件,如,RAM,或,ROM,5,元件库建模(续),库单元的特点:,每个库单元的描述在编译指导,celldefine,和,endcelldefine,之间,每个库单元的描述有两部分:,功能描述,时序描述,celldefine,timescale 1ns / 100ps,module,full_adder( cout, sum, a_in, b_in, c_in);,input a_in, b_in, c_in;,output cout, sum;,/,功能描述,. . .,/,时序描述,.,endmodule,endcelldefine,在模块定义之前插入timescale定义单元所使用的时间单位和精度,6,Verilog库的使用,在Cadence Verilog仿真器中使用Verilog库:,使用库文件,在命令行中使用选项:,-v,使用库目录,在命令行中使用选项,y directory_name,在命令行中使用选项,+libext+,在使用库目录时,如果每个文件都有一个扩展名,则在Cadence Verilog仿真器,必须用+libext选项指定其扩展名。,仿真器中没有缺省地使用.v作扩展名,使用-v或-y选项指定库时,只编译那些设计中用到的模块。如果在命令行中直接输入库文件名而没有使用-v选项 (或在文件中使用编译指导include),则库中所有模块都被编译。使用选项大大压缩编译时间及内存空间。在NC Verilog中也压缩了使用的磁盘空间。,7,库文件扫描,每一个-v选项指定一个库文件,verilog test. v design. v -v library_file. v,module and2(.);,. . .,endmodule,module mux(.);,. . .,endmodule,module dff(.);,. . .,endmodule,library_file.v,8,库目录扫描,每一个-y选项指定一个库目录。,+libext+选项指定有效的文件扩展名。,verilog test. v design. v -y library_ directory +libext+. v,Verilog模型库目录,9,编译指导uselib,定义设计中使用的库元件(包括,UDP,)的位置,一直有效,直到遇到另一个,uselib,或,resetall,覆盖任何命令行选项中库的设置。也就是说如果不能在,uselib,指定的位置找到元件,仿真器不会再按命令行中,-v,或,-y,选项去寻找。,uselib,语法,uselib library_reference library_reference,其中,,library_reference,可以是:,file =,dir = directory_name_path libext = .,注意,:,uselib,使用,.v,作为缺省扩展名,如,-y,命令选项不同,使用空uselib或resetall会产生什么效果?,在uselib中可以使用“ ”进行多行说明,uselib ,dir=/usr1/chrisz/libs/goo/libext=.v,恢复命令行,-v和-y设置,10,编译指导uselib使用举例,module adder (c_out, sum, a, b, c_in);,output c_out, sum;,input a, b, c_in;,uselib dir=/libs/FAST_LIB/,SN7486,u1 (half_sum, a, b);,uselib dir=/libs/TTL/ libext=. v,SN7408 u2 (half_c, a, b);,SN7408 u3 (tmp, c_in, half_sum);,SN7486,u4 (sum, c_in, half_sum);,SN7432 u5 (c_out, tmp, half_c);,endmodule,uselib,目录库TTL中的单元可以使用文件库udp.lib中定义的单元,指定目录库FAST_LIB中寻找实例u1的定义,指定目录库TTL及文件库udp.lib寻找其它实例的定义,11,编译指导uselib,define,TTL_LIB,dir=/libs/TTL/libext=. v,define,TTL_UDP,file=/ libs/ TTL_U/udp.lib,uselib,TTL_LIB,TTL_UDP,在uselib中库的指定可以使用由define定义的宏进行文本替换。,在命令行中用+define+选项给宏一个值。设计易于管理,可移植性高。,12,编写与大小无关的源代码,Verilog是对大小写敏感的语言,如sel和SEL是不同的标识符,Verilog,关键字均使用小写,如,input, output,标识符中大小写都可以使用,但,Sel,和,sel,是不同的标识符,仿真时使用,-u,选项进入大小写不敏感模式。仿真器将所有标识符转换为大写形式,而关键字仍保持为小写。,module MUX2_1 (out, a, b, sel);,output out;,input a, b, sel;,not not1(,SEL,sel,);,and and1( a1, a,SEL,);,and and2( b1, b,sel,);,or or1( out, a1, b1);,endmodule,在正常情况下,左边例子中sel和SEL是不同的信号。若使用-u选项,sel和SEL变为相同的信号。,将产生错误的仿真结果。,如果在大小写不敏感的工具中使用这个模型,则用-u选项可以找出错误。,可以用-d选项输出-u选项产生的大小写不敏感的描述,13,编译指导,尽管编译指导是Verilog语言的一部分,但其作用取决于编译器,因此不同的仿真器中其作用可能不同。,resetall,将编译指导变为缺省值。,Cadence Verilog,仿真器在遇到,resetall,时,文本宏定义不变。要清除文本宏定义,使用,undef macro_name,在使用,include,编译指导时,使用,+incdir,命令行选项指定所包含文件的查找路径。,+incdir+directory1+ directory2+. directoryN,仿真器首先查找当前目录,若没有找到再沿指定路径顺序查找。,14,编译指导,编译指导从出现时开始有效,直到被覆盖或使其失效。因此编译指导是全局的。,下列编译指导是Verilog IEEE标准中的:,库单元分界,celldefine,endcelldefine,复合编译指导,default_nettype,include,unconnected_drive,nounconnected_drive,resetall,timescale,定义文本宏其和基于文本宏的转换,define,undef,ifdef,else,endif,15,定义文本宏,用+define+命令行参数定义文本宏,语法:+define+,MACRO_NAME,=“,MACRO_TEXT,”,注意: 文本宏的覆盖可能影响设计的结构,可能强制,NC Verilog,重新编译全部或部分设计,例子,verilog test. v +define+gate=or,define gate and,module test;,reg a, b;,gate (c, a, b);,initial,begin,a= 0; b= 1;,$monitor ($time, c, a, b);,#1 $finish;,end,endmodule,文本宏中字符串长度没有限制。,清除文本宏定义,使用:,undef macro_name,清除所有文本宏定义,使用,undefall,16,选择仿真延迟模型,选择延时值,用下列命令行选项选择延时模型,+mindelays,+typdelays,+maxdelays,用下列命令行选项或编译指导指定单位延时、零延时、分布延时或路径延时,+delay_mode_unit delay_mode_unit,+delay_mode_zero delay_mode_zero,+delay_mode_path delay_mode_path,+delay_mode_distributed delay_mode_distributed,在单位和零延时模型中,仿真器忽略所有,specify,块,门延时为单位或零,分布延时忽略所有,specify,块,只保留门延时,路径延时忽略门延时,只保留,spcify,块中延时,零延时和路径延时可造成结构零延时反馈,因此使用编译指导影响设计中的指定块。,单位指的是时间精度precision,在设定单位延时和零延时模型时不影响过程中时序控制,17,固有延时和传输延时模型,仿真时可以用固时延时模型或传输延时模型,固有延时模型,(,缺省模型,),不传送脉冲宽度小于电路延时的信号。这是开关电路的行为特性,在传输延时模型中,输入上的所有变化在路径延时之后反映到输出上。这是传输线的行为特性。,采用命令行选项,+transport_path_delays,设置传输延时模型,注意:记住使用+pathpulse用于路径延时控制,小于2ns的脉冲没有响应,任何脉冲都有响应,输入,固有延时输出,传输延时输出,18,Verilog-XL路径延时的限制,模块路径延时由specify块说明。Verilog-XL中路径输出端必须是一个可以加速的基本单元。NC Verilog没有这个限制。,路径输出端口必须由一个可加速的门驱动。,合法,合法,输出端口在模块内部只能有一个驱动。,非法,非法,不是可加速基本单元或是行为描述时:,Error! Path delay output is not accelerated due to. . .,. . . Verilog- PDOMBA,Error! Multiple path delays defined to node ;,Path delay outputs must have only one driver within the module,Verilog- PDOMOD,解决方法:在输出加基本单元buf,19,Verilog-XL可加速的对象,Verilog-XL可加速net和基本单元,但也有例外情况:,不能加速的,net,:,矢量,net,具有非零延时的,net,被,force,语句驱动或驱动过的,net,net,被连续赋值(除非使用,+caxl,),不能加速的基本单元,双向基本单元,tran tranif0 tranif1 rtran rtranif0 itranif1,buf,和,not,门有多个输出,基本单元的输入连接到寄存器数组的一位或一部分,基本,单元的延时有非常数表达式,基本单元的一个输入是表达式(除非使用,+caxl,),基本单元的不同延时超过,65535,系统任务,$shownonxl( ),寻找非,XL,结构。其参数设定一个模块的实例时查找该实例。若没有参数则在整个设计层次中查找。,不能由XL算法加速,但可以由Switch-XL加速,延时必须真正的不同。延时#(3,4)和#(3,2)是不同的,而#3和#(3,3)是相同的,系统任务可以显示所有forced net,20,用Verilog-XL加密源代码,用户可以保护设计中的所有权信息,有两种方法保护,Verilog,源描述:,用,+autoprotect,命令行选项保护所有模块,结合编译指导,protect,和,endprotect,,使用,+protect,选项保护所选模块或区域。,仿真器对源文件的加密是将,protect,和,endprotect,之间的源代码封装起来。,保护机制建立一个加密文件。仿真加密模块时,这些编译指导指示仿真器将源代码解密并仿真,但用户不能访问加密的数据结构。,可以用,Affirma Model Packager,保护私有模块用于,NC Verilog,和,NC VHDL,仿真。但对其它,Verilog,仿真器不会很理想。,21,保护所有Verilog源代码,用+autoprotect命令行选项进行编译可以保护所有Verilog源代码。编译后建建立一个新的只有模块名字可读的源文件。,verilog design.v +autoprotect,加密,module AND2 protected,8Q RMSQH5DT oAXO3N VVhaD89ldTiYhe,n= 0Pi Q JifJ Z ai766? ReA0RPaQ94H,GHN60= Y KQgBdW4dO3662XYUXK=; CM= EVc,cZo2 65Lm XL: 0VR CAUbShNPHne2,IVFe3ZFa; pB5fO6kpT_ a) = (1.2,2.0);,(c = a) = (1.4,1.8);,endspecify,endmodule,design.v,Verilog-XL缺省的输出文件名为原文件名后加“p”,可以用+autoprotect选项指定输出文件扩展名,verilog design.v +autoprotect.port,输出的保护文件名为:design.v.prot,22,保护选择的源描述,为了保护源描述的某一部分,用编译指导,protect,和,endprotect,将这部分包含起来。在编译源文件时使用命令行选项+protect。,verilog design.v +protect,module AND2( a, b, c);,output a;,input b, c;,protect,and a1( a, b, c);,specify,(b = a) = (1.2,2.0);,(c = a) = (1.4,1.8);,endspecify,endprotect,endmodule,保护区域,module AND2( a, b, c);,output a;,input b, c;,protected,RFdelSQV5DT ilbl= Yl2AiTMmV,mKD Bg23WoqMlQbbREfQhfXF9S,G: M94J5E6SC079qZAZVgd$,endprotected,endmodule,不保护模块名及端口列表,design.vp,提高了可移植性,可以用+protect选项指定输出文件扩展名,verilog design.v +protect.prot,输出的保护文件名为:design.v.prot,加密,不变,23,在Verilog-XL中输入(import)VHDL模型,在Verilog设计中可以包含VHDL模型,并用Cadence VHDL仿真器(leapfrog)进行协同仿真。这称为VHDL import。,module MULTIPLIER (IN1, IN2, OUT1, CLK),(* integer simulator = Leapfrog;,integer model = WORKLIB. MULTIPLIER;*);,input 15: 0 IN1, IN2;,input CLK;,output 31: 0 OUT1;,endmodule,verilog包装的一个shell例子,(* *)中的命令是属性,是Verilog语言的一部分,还没有标准化。,将VHDL模型进行预编译并放在Leapfrog的work库中。,执行vhdlshell产生每个VHDL模型的verilog包装(shell)。,确保,从,Leapfrog的license有效,执行Verilog仿真。它自动启动Leapfrog仿真器。,24,在Verilog-XL中引入VHDL模型,从Leapfrog仿真器与常规的Leapfrog仿真器使用不同的license。如果从Leapfrog仿真器的license有效,并且设计中有VHDL模型,Verilog-XL自动启动、连接到从Leapfrog仿真器。Verilog-XL仿真器控制从仿真器何时启动,何时停止,并与之同步。,使用Leapfrog协同仿真时要注意以下几点:,对于Verilog-XL,VHDL模型是黑盒子。除能观察其端口外,不能观测其内部信号。为了能够观察其内部结构,需要在VHDL模型中设置附加的端口。这将影响仿真性能。,shell模块中不能实例化其它模块,shell中端口次序、大小、类型及指针方向必须与VHDL模型匹配。,VHDL模块中不能实例化Verilog模块。,不能在引入的VHD模块之间传输双向信号,不能向VHDL inout端口传送Verilog的tran门信号。,所有Verilog模块必须有timescale,使用Leapfrog协同仿真器时不能使用$save和$restart,25,使用INCA协同执行Verilog和VHDL,在Verilog设计中可以包含VHDL模型,使用NC仿真器协同执行。协同执行(co-execute)使用单一过程,比协同仿真(co-simulation)更有有效。,用ncvhdl预编译VHDL模型,可以执行ncshell产生VHDL模型的Verilog封装。也可以直接实例化VHDL对象(不通过shell),通过使用VHDL定义的端口名称及次序,而不需要转换端口类型。,确保一个NC CoEx仿真器的license有效。,执行NC仿真,使用ncxlmode。,module MULTIPLIER (IN1, IN2, OUT1, CLK),(* integer foreign = VHDL( event) WORKLIB.MULTIPLIER; *);,input 15: 0 IN1, IN2;,input CLK;,output 31: 0 OUT1;,endmodule,VHDL模型的Verilog封装的一个例子,26,使用INCA协同执行Verilog和VHDL(续),CoEx选项的license不同于NC Verilog和NC VHDL仿真器。如果license有效,并且设计中有VHDL模型,仿真器自动协同执行。由于使用同一个过程,同步是非常有效的。,在协同执行时要注意下列几点:,当进入并观测实例模型内部时,必须遵循协同执行及VHDL的访问规则。,shell端口次序、大小、类型及指针方向必须与VHDL模块匹配。,不能向VHDL inout端口传送Verilog的tran门信号。,所有Verilog模块必须有timescale,协同执行时不能使用$save、$restart和$reset。,可以在Verilog设计层次中引用层次名(使用Verilog模块外引用或OOMR)。这些引用可以穿过VHDL对象(但不能作为目标)。如果任何路径中的VHDL对象名称使用大写或非法字符,或Verilog关键字,必须使用nmp工具确定其Verilog名称。同样,必须注意将VHDL实例中指针(n)改变为Verilog指针n。,注意:可以使用ncshell工具产生shell以引入(import)LMSFI、FMI或Swift模型到VHDL设计中。产生的shell也可用于Verilog-XL或Leapfrog仿真。,27,小结,在本章我们学习了:,生产商提供的Verilog库,使用Verilog库仿真,Verilog源代码加密,其它与仿真相关的话题,28,复习,问题:,当仿真器遇到编译指导resetall时将所有编译指导置为缺省值吗?,使用什么选项指定库的名字?,如果仿真器没有在编译指导uselib指定的库中找到实例的定义,它会去哪里寻找?,解答:,不是。当使用编译指导,resetall,时,,IEEE,规范没有说明如何处理文本宏。,Cadence Verilog,仿真器对文本宏不作处理。要重文本宏,使用编译指导,undef,。,使用,-v,选项和,/,或,-y,及,+libext+,选项。,不会再去别的位置查找。,29,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!