位置:51电子网 » 技术资料 » 其它综合

Verilog HDL操作数

发布时间:2008/6/5 0:00:00 访问次数:838

操作数可以是以下类型中的一种:
  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值存储。

  表达式中的整数值可被解释为有符号数或无符号数。如果表达式中是十进制整数,例如,12被解释为有符号数。如果整数是基数型整数(定长或非定长),那么该整数作为无符号数对待。下面举例说明。

12是01100的5位向量形式(有符号)
-12是10100的5位向量形式(有符号)
5'b01100是十进制数12(无符号)
5'b10100是十进制数20(无符号)
4'd12是十进制数12(无符号)

  更为重要的是对基数表示或非基数表示的负整数处理方式不同。非基数表示形式的负整数作为有符号数处理,而基数表示形式的负整数值作为无符号数。因此-44和-6'o54 (十进制的44等于八进制的54)在下例中处理不同。

integer cone;
. . .
cone = -44/4
cone = -6'o54/ 4;

  注意-44和-6'o54以相同的位模式求值;但是-44作为有符号数处理,而-6'o54作为无符号数处理。因此第一个字符中cone的值为-11,而在第二个赋值中cone的值为1073741813。

4.1.2 参数

  前一章中已对参数作了介绍。参数类似于常量,并且使用参数声明进行说明。下面是参数说明实例。

parameter load = 4'd12, store = 4'd10;
load 和store为参数的例子,值分别被声明为12和10。

4.1.3 线网

  可在表达式中使用标量线网(1位)和向量线网(多位)。下面是线网说明实例。

wire [0:3] prt; //prt 为4位向量线网。
wire bdq; //bbq 是标量线网。

  线网中的值被解释为无符号数。在连续赋值语句中,

assign prt = -3;
prt被赋于位向量1101,实际上为十进制的13。在下面的连续赋值中,
assign prt = 4'ha;
prt被赋于位向量1010,即为十进制的10。

4.1.4 寄存器

  标量和向量寄存器可在表达式中使用。寄存器变量使用寄存器声明进行说明。例如:

integer tema, temb;
reg [1:5] state;
time que [1:5];

  整型寄存器中的值被解释为有符号的二进制补码数,而reg寄存器或时间寄存器中的值被解释为无符号数。实数和实数时间类型寄存器中的值被解释为有符号浮点数。

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] //寄存器位选择。
prt [0] 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]

例如:
reg [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)
/*$time是系统函数,并且sumofevents是在别处定义的用户自定义函数。*/


操作数可以是以下类型中的一种:
  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值存储。

  表达式中的整数值可被解释为有符号数或无符号数。如果表达式中是十进制整数,例如,12被解释为有符号数。如果整数是基数型整数(定长或非定长),那么该整数作为无符号数对待。下面举例说明。

12是01100的5位向量形式(有符号)
-12是10100的5位向量形式(有符号)
5'b01100是十进制数12(无符号)
5'b10100是十进制数20(无符号)
4'd12是十进制数12(无符号)

  更为重要的是对基数表示或非基数表示的负整数处理方式不同。非基数表示形式的负整数作为有符号数处理,而基数表示形式的负整数值作为无符号数。因此-44和-6'o54 (十进制的44等于八进制的54)在下例中处理不同。

integer cone;
. . .
cone = -44/4
cone = -6'o54/ 4;

  注意-44和-6'o54以相同的位模式求值;但是-44作为有符号数处理,而-6'o54作为无符号数处理。因此第一个字符中cone的值为-11,而在第二个赋值中cone的值为1073741813。

4.1.2 参数

  前一章中已对参数作了介绍。参数类似于常量,并且使用参数声明进行说明。下面是参数说明实例。

parameter load = 4'd12, store = 4'd10;
load 和store为参数的例子,值分别被声明为12和10。

4.1.3 线网

  可在表达式中使用标量线网(1位)和向量线网(多位)。下面是线网说明实例。

wire [0:3] prt; //prt 为4位向量线网。
wire bdq; //bbq 是标量线网。

  线网中的值被解释为无符号数。在连续赋值语句中,

assign prt = -3;
prt被赋于位向量1101,实际上为十进制的13。在下面的连续赋值中,
assign prt = 4'ha;
prt被赋于位向量1010,即为十进制的10。

4.1.4 寄存器

  标量和向量寄存器可在表达式中使用。寄存器变量使用寄存器声明进行说明。例如:

integer tema, temb;
reg [1:5] state;
time que [1:5];

  整型寄存器中的值被解释为有符号的二进制补码数,而reg寄存器或时间寄存器中的值被解释为无符号数。实数和实数时间类型寄存器中的值被解释为有符号浮点数。

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] //寄存器位选择。
prt [0] 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]

例如:
reg [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)
/*$time是系统函数,并且sumofevents是在别处定义的用户自定义函数。*/


相关IC型号

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!