北大数字集成电路课件5verilog的符号标识.ppt

上传人:sccc 文档编号:5313628 上传时间:2023-06-25 格式:PPT 页数:22 大小:108.51KB
返回 下载 相关 举报
北大数字集成电路课件5verilog的符号标识.ppt_第1页
第1页 / 共22页
北大数字集成电路课件5verilog的符号标识.ppt_第2页
第2页 / 共22页
北大数字集成电路课件5verilog的符号标识.ppt_第3页
第3页 / 共22页
北大数字集成电路课件5verilog的符号标识.ppt_第4页
第4页 / 共22页
北大数字集成电路课件5verilog的符号标识.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《北大数字集成电路课件5verilog的符号标识.ppt》由会员分享,可在线阅读,更多相关《北大数字集成电路课件5verilog的符号标识.ppt(22页珍藏版)》请在三一办公上搜索。

1、数字集成电路设计入门-从HDL到版图于敦山 北大微电子学系,第五章 Verilog的词汇约定(Lexical convention),理解Verilog中使用的词汇约定认识语言专用标记(tokens)学习timescale,学习内容:,术语及定义,空白符:空格、tabs及换行Identifier:标志符,Verilog中对象(如模块或端口)的名字Lexical:语言中的字或词汇,或与其相关。由其文法(grammar)或语法(syntax)区分。LSB:最低有效位(Lease significant bit)MSB:最高有效位(Most significant bit),空白符和注释,modul

2、e MUX2_1(out,a,b,sel);/Port declarations output out;input sel,/control input b,/*data inputs*/a;/*The netlist logic selects input”a”when sel=0 and it selects”b”when sel=1.*/not(sel_,sel);and(a1,a,sel_),(b1,b,sel);/What does this line do?or(out,a1,b1);endmodule,格式自由使用空白符提高可读性及代码组织。Verilog忽略空白符除非用于分开其

3、它的语言标记。,多行注释,在/*/内,单行注释到行末结束,整数常量和实数常量,整数的大小可以定义也可以不定义。整数表示为:其中 size:大小,由十进制数表示的位数(bit)表示。缺省为32位 base:数基,可为2(b)、8(o)、10(d)、16(h)进制。缺省为10进制 value:是所选数基内任意有效数字,包括X、Z。实数常量可以用十进制或科学表示法表示。,Verilog中,常量(literals)可是整数也可以是实数,整数常量和实数常量,整数的大小可以定义也可以不定义。整数表示为:数字中(_)忽略,便于查看没有定义大小(size)整数缺省为32位缺省数基为十进制数基(base)和数字

4、(16进制)中的字母无大小写之分当数值value大于指定的大小时,截去高位。如 2b1101表示的是2b01实数常量实数可用科学表示法或十进制表示科学表示法表示方式:,表示:尾数10指数,字符串(string),字符串要在一行中用双引号括起来,也就是不能跨行。字符串中可以使用一些C语言转义(escape)符,如t n可以使用一些C语言格式符(如%b)在仿真时产生格式化输出:”This is a normal string”This string has a t tab and ends with a new linen”This string formats a value:val=%b”,V

5、erilog中,字符串大多用于显示信息的命令中。Verilog没有字符串数据类型,字符串(string),转义符及格式符将在验证支持部分讨论 格式符,转义符,格式符%0d表示没有前导0的十进制数,标识符(identifiers),标识符是用户在描述时给Verilog对象起的名字标识符必须以字母(a-z,A-Z)或(_)开头,后面可以是字母、数字、($)或(_)。最长可以是1023个字符标识符区分大小写,sel和SEL是不同的标识符模块、端口和实例的名字都是标识符module MUX2_1(out,a,b,sel);output out;input a,b,sel;not not1(sel_,s

6、el);and and1(a1,a,sel_);and and2(b1,b,sel);or or1(out,a1,b1);endmodule,Verilog标识符,标识符(identifiers),有效标识符举例:shift_reg_a busa_index _bus3无效标识符举例:34net/开头不是字母或“_”a*b_net/包含了非字母或数字,“$”“_”n238/包含了非字母或数字,“$”“_”Verilog区分大小写,所有Verilog关键词使用小写字母。,转义标识符(Escaped identifiers),可以包含任何可打印字符反斜杠及空白符不是标识符的一部分module 2:

7、1MUX(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使用转义符可能会产生一些问题,并且不是所有工具都支持。有时用转义符完成一些转换,如产生逻辑图的Verilog网表。综合工具输出综合网表时也使用转义符。不建议使用转义符。,转义标识符由反斜杠“”开始,空白符结束,Escaped Identifiers,转义标识符(Escaped identifiers),转义标识符允许用户在标识符中使用非法字符。如

8、:#sel busa+index A,B 1/在层次化名字中转义符 转义标识符必须以空格结束,语言专用标记(tokens),系统任务及函数,$符号指示这是系统任务和函数系统函数有很多,如:返回当前仿真时间$time显示/监视信号值($display,$monitor)停止仿真$stop结束仿真$finish$monitor($time,“a=%b,b=%h”,a,b);当信号a或b的值发生变化时,系统任务$monitor显示当前仿真时间,信号a值(二进制格式),信号b值(16进制格式)。,语言专用标记(tokens),延时说明,“#”用于说明过程(procedural)语句和门的实例的延时,但

9、不能用于模块的实例化。module MUX2_ 1(out,a,b,sel);output out;input a,b,sel;not#1 not1(sel_,sel);and#2 and1(a1,a,sel_);and#2 and2(b1,b,sel);or#1 or1(out,a1,b1);endmodule门延时有很多类名字:门延时(gate delay),传输延时(propagation delay),固有延时(intrinsic delay),对象内在延时(intra-object delay),编译指导(Compiler Directives),()符号说明一个编译指导这些编译指导

10、使仿真编译器进行一些特殊的操作编译指导一直保持有效直到被覆盖或解除resetall 复位所有的编译指导为缺省值,应该在其它编译指导之前使用,文本替换(substitution)-define,编译指导define提供了一种简单的文本替换的功能 define 在编译时替换。可提高描述的可读性。,define not_delay#1define and_delay#2define or_delay#1module MUX2_1(out,a,b,sel);output out;input a,b,sel;not not_delay not1(sel_,sel);and and_delay and1(

11、a1,a,sel_);and and_delay and2(b1,b,sel);or or_delay or1(out,a1,b1);endmodule,定义not_delay,使用not_delay,文本替换(substitution),解除定义的宏,使用 undef macro_name使用编译指导define,可以提高描述的可读性定义全局设计参数,如延时和矢量的位数。这些参数可以定义在同一位置。这样,当要修改设计配置时,只需要在一个地方修改。定义Verilog命令的简写形式 define vectors_ file/usr1/chrisz/library/vectors define r

12、esults_ file/usr1/chrisz/library/results可以将define放在一个文件中,与其它文件一起编译。,文本包含(inclusion)-include,编译指导include在当前内容中插入一个文件 格式:include“”如include global.vinclude parts/count.vinclude././library/mux.v”include可用于:include保存在文件中的全局的或经常用到的一些定义,如文本宏在模块内部include一些任务(tasks),提高代码的可维护性。,可以是相对路径或绝对路径,Timescale,timescal

13、e 说明时间单位及精度格式:timescale/如:timescale 1 ns/100 ps time_unit:延时或时间的测量单位time_precision:延时值超出精度要先舍入后使用timescale必须在模块之前出现timescale 1 ns/10 ps/All time units are in multiples of 1 nanosecondmodule MUX2_1(out,a,b,sel);output out;input a,b,sel;not#1 not1(sel_,sel);and#2 and1(a1,a,sel_);and#2 and2(b1,b,sel);o

14、r#1 or1(out,a1,b1);endmodule,Timescale,time_precision不能大于time_unittime_precision和time_unit的表示方法:integer unit_stringinteger:可以是1,10,100unit_string:可以是s(second),ms(millisecond),us(microsecond),ns(nanosecond),ps(picosecond),fs(femtosecond)以上integer和unit_string可任意组合precision的时间单位应尽量与设计的实际精度相同。precision是

15、仿真器的仿真时间步。若time_unit与precision_unit差别很大将严重影响仿真速度。如说明一个timescale 1s/1ps,则仿真器在1秒内要扫描其事件序列1012次;而timescale 1s/1ms则只需扫描103次。如果没有timescale说明将使用缺省值,一般是ns。,Timescale,所有timescale中的最小值决定仿真时的最小时间单位。这是因为仿真器必须对整个设计进行精确仿真 在下面的例子中,仿真时间单位(STU)为100fstimescale 1ns/10psmodule1(.);not#1.23(.)/1.23ns or 12300 STUs.endm

16、oduletimescale 100ns/1nsmodule2(.);not#1.23(.)/123ns or 1230000 STUs.endmoduletimescale 1ps/100fsmodule3(.);not#1.23(.)/1.23ps or 12 STUs(rounded off).endmodule,复习,Verilog中的空白符总是忽略的吗?在源代码中插入注释有哪两种方法?整数常数的尺寸如何指定?缺省的尺寸及数基是多少?设置的编译指导如何解除?编译指导影响全局吗?在仿真时为什么要用接近实际的最大timescale精度?,是的。空白符用于隔开标识符及关键词,多余的忽略/用于单行注释,/*/用于多行注释整数常量的尺寸由10进制数表示的位数确定。缺省为32位,缺省的数基为十进制。使用resetall解除编译指导是全局的。编译时遇到编译指导后开始有效,直至复位或被覆盖,可能影响多个文件。使用尽可能大的精度。精度越小,仿真时间步越小,仿真时间越长。使用适当的精度,既达到必要的精度,又不会仿真太慢。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号