- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例3-27:{1’b0,3{1’b1}} = 4’b0111 {1’b0,{3{2’b01}} = 7’b0010101 9).条件运算符 条件运算符是一个三目的运算符,格式为: 条件表达式? 表达式1 : 表达式2 例3-28:assign c=ab? a: b; //如果a大于b(即:(ab)为真),c=a;反之,c=b。 优先级见P99 表3.4 * * 第3章 Verilog硬件描述语言(二) 3.3 Verilog HDL词法、数据类型和运算符 3.3.1词法约定 1)注释 注释加强程序的可读性和文档管理。 注释有两种方式:单行注释和多行注释。 单行注释以“//”开始,只能写在一行中。 多行注释以“/*”开始,以“*/”结束,注释的内容可以跨越多行。 * 例3-10: 单行注释:assign c= a+b; //c等于a,b的和 多行注释:assign c= a+b; /* c等于a,b的和 本语句可综合成一个加法器,实现加法的组合逻辑*/ * 2)数字和字符串 数字的表达方式:位宽’进制数值 * 例3-11: 8’//位宽为8的二进制数,’b表示二进制 ’hff23 //十六进制数,采用机器的默认位宽 123 //十进制数123,采用机器的默认位宽 2’b1101 //表示的是2’b01,因为当数值大于指定的大小时,截去高位 4’b110x //四位二进制数,最低位为不定值x 6’o1x //位宽为六位的八进制,其值的二进制表示为:6’b001xxx? 16’h1z0x /*位宽为16位的十六进制数,其值的二进制表示为: 16’b0001zzzz0000xxxx */ 字符串是双引号内的字符序列。 例:$display (the sum is %d,j= %d,data_out,j); * 3). 标识符 标识符( identifier)用于定义模块名、端口名、连线、信号名等。 标识符可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线,字符数不能多于1024个。 标识符区分大小写。 * 合法和非法标识符 合法的: shift_reg_a busa_index bus263 非法的: 34net //不能用数字开头 a*b_net //不能含有非字母符号* n@263 //不能含有非字母符号@ Verilog 是大小写敏感的。所有的Verilog 关键词都是小写的。 4)空白符 Verilog HDL中的空白符仅仅用于分隔标识符,在编译阶段被忽略。 5)关键字 Verilog HDL内部已经使用的词称为关键字或保留字。关键字必须使用小写字母,说明见附表B。 3.3.2 数据类型 Verilog HDL允许信号可以具有逻辑值和强度值 逻辑值有0,1,x,z 逻辑强度值从最强到最弱分为几种强度等级 下面介绍常用的变量数据类型:wire型、reg 型、memory型和常量数据类型parameter型。 1). 线网型(wire) wire型是连线型(net)中最常用的,它表示硬件单元之间的连接 wire数据默认值是z 常用于表示以assign为关键字的组合逻辑。 格式:wire [width-1 :0] 变量名1,变量名2,…,变量名n; 例:wire [7:0] a ,b;//位宽为8的wire型变量a和b 2) 寄存器型(reg) 寄存器是数据存储单元的抽象,寄存器中的数据可以保存,直到被赋值语句赋予新的值 。 reg型变量只能在initial语句和always语句中被赋值。 reg的默认值是不定值x 格式:reg[width-1:0] 变量名1,变量名2,…,变量名n 例3-14:reg [7:0] b,c; //两个位宽为8的寄存器变量b和c reg a; //寄存器变量a,位宽为1 reg[3:1] d; //位宽为3的寄存器变量d,由 //d[3],d[2],d[1]组成 3). 存储器型(memory) memory型数据常用于寄存器文件、ROM和RAM建模等,是寄存器型的二维数组形式,它是将reg型变量进行地址扩展而得到. 一般格式: reg[n-1 : 0] 存储器名[N-1 : 0]; //定义位宽为n,深度为N的寄存 组 例3-15: reg[7:0] mem[255 : 0]; /*每个寄存器位宽为8,共有256 个寄存器组成的存
文档评论(0)