欢迎来到天天文库
浏览记录
ID:36383231
大小:41.00 KB
页数:14页
时间:2019-05-10
《VerilogHDL简明教程:第4篇表达式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、本章讲述在VerilogHDL中编写表达式的基础。 表达式由操作数和操作符组成。表达式可以在出现数值的任何地方使用。4.1操作数 操作数可以是以下类型中的一种: 1)常数 2)参数 3)线网 4)寄存器 5)位选择 6)部分选择 7)存储器单元 8)函数调用4.1.1常数 前面的章节已讲述了如何书写常量。下面是一些实例。256,7//非定长的十进制数。4'b10_11,8'h0A//定长的整型常量。'b1,'hFBA//非定长的整数常量。90.00006//实数型常量。"BOND"//串常量;每个字符作为8位ASCII值存储。 表达式中的整数
2、值可被解释为有符号数或无符号数。如果表达式中是十进制整数,例如,12被解释为有符号数。如果整数是基数型整数(定长或非定长),那么该整数作为无符号数对待。下面举例说明。12是01100的5位向量形式(有符号)-12是10100的5位向量形式(有符号)5'b01100是十进制数12(无符号)5'b10100是十进制数20(无符号)4'd12是十进制数12(无符号) 更为重要的是对基数表示或非基数表示的负整数处理方式不同。非基数表示形式的负整数作为有符号数处理,而基数表示形式的负整数值作为无符号数。因此-44和-6'o54(十进制的44等于八进制的54)在下例中处理不同。
3、integerCone;...Cone=-44/4Cone=-6'o54/4; 注意-44和-6'o54以相同的位模式求值;但是-44作为有符号数处理,而-6'o54作为无符号数处理。因此第一个字符中Cone的值为-11,而在第二个赋值中Cone的值为1073741813。4.1.2参数 前一章中已对参数作了介绍。参数类似于常量,并且使用参数声明进行说明。下面是参数说明实例。parameterLOAD=4'd12,STORE=4'd10;LOAD和STORE为参数的例子,值分别被声明为12和10。4.1.3线网 可在表达式中使用标量线网(1位)和向量线网(多位)
4、。下面是线网说明实例。wire[0:3]Prt;//Prt为4位向量线网。wireBdq;//Bbq是标量线网。 线网中的值被解释为无符号数。在连续赋值语句中,assignPrt=-3;Prt被赋于位向量1101,实际上为十进制的13。在下面的连续赋值中,assignPrt=4'HA;Prt被赋于位向量1010,即为十进制的10。4.1.4寄存器 标量和向量寄存器可在表达式中使用。寄存器变量使用寄存器声明进行说明。例如:integerTemA,TemB;reg[1:5]State;timeQue[1:5]; 整型寄存器中的值被解释为有符号的二进制补码数,而reg
5、寄存器或时间寄存器中的值被解释为无符号数。实数和实数时间类型寄存器中的值被解释为有符号浮点数。TemA=-10;//TemA值为位向量10110,是10的二进制补码。TemA='b1011;//TemA值为十进制数11。State=-10;//State值为位向量10110,即十进制数22。State='b1011;//State值为位向量01011,是十进制值11。4.1.5位选择 位选择从向量中抽取特定的位。形式如下:net_or_reg_vector[bit_select_expr] 下面是表达式中应用位选择的例子。State[1]&&State[4]//寄
6、存器位选择。Prt[0]
7、Bbq//线网位选择。 如果选择表达式的值为x、z,或越界,则位选择的值为x。例如State[x]值为x。4.1.6部分选择 在部分选择中,向量的连续序列被选择。形式如下:net_or_reg_vector[msb_const_expr:1sb_const_expr] 其中范围表达式必须为常数表达式。例如。State[1:4]//寄存器部分选择。Prt[1:3]//线网部分选择。选择范围越界或为x、z时,部分选择的值为x。4.1.7存储器单元 存储器单元从存储器中选择一个字。形式如下:memory[word_address]例如:re
8、g[1:8]Ack,Dram[0:63];... Ack=Dram[60];//存储器的第60个单元。 不允许对存储器变量值部分选择或位选择。例如,Dram[60][2]不允许。Dram[60][2:4]也不允许。 在存储器中读取一个位或部分选择一个字的方法如下:将存储器单元赋值给寄存器变量,然后对该寄存器变量采用部分选择或位选择操作。例如,Ack[2]和Ack[2:4]是合法的表达式。4.1.8函数调用 表达式中可使用函数调用。函数调用可以是系统函数调用(以$字符开始)或用户定义的函数调用。例如:$time+SumOfEvents(A,B)/
此文档下载收益归作者所有