verilog表达式的数据类型 verilog模块中各个变量的类型怎么确定

verilog hdl\u4e2d\u6709\u54ea\u4e9b\u6570\u636e\u7c7b\u578b

Verilog HDL\u662f\u4e00\u79cd\u7528\u4e8e\u6570\u5b57\u903b\u8f91\u7535\u8def\u8bbe\u8ba1\u7684\u8bed\u8a00\u3002

\u670b\u53cb,\u6211\u6765\u544a\u8bc9\u4f60\u7b54\u6848!\u8fd9\u662f\u6211\u521a\u624d\u641c\u5230\u7684\u3001\u611f\u89c9\u8bf4\u7684\u633a\u4e0d\u9519\u7684\uff1a
\u6574\u6570\u3001\u5b9e\u6570\u548c\u65f6\u95f4\u5bc4\u5b58\u5668\u7c7b\u578b
\u6574\u6570\u662f\u4e00\u79cd\u901a\u7528\u7684\u5bc4\u5b58\u5668\u6570\u636e\u7c7b\u578b\uff0c\u7528\u4e8e\u5bf9\u6570\u91cf\u8fdb\u884c\u64cd\u4f5c\uff0c\u4f7f\u7528integer\u8fdb\u884c\u58f0\u660e\u3002
integercounter;//\u4e00\u822c\u7528\u9014\u7684\u53d8\u91cf\u7528\u4f5c\u8ba1\u6570\u5668
initial
counter=-1;//\u628a-1\u5b58\u50a8\u5230\u5bc4\u5b58\u5668\u4e2d
\u5b9e\u6570\uff1a\u5b9e\u5e38\u91cf\u548c\u5b9e\u6570\u5bc4\u5b58\u5668\u6570\u636e\u7c7b\u578b\u4f7f\u7528\u5173\u952e\u5b57real\u6765\u58f0\u660e\uff0c\u53ef\u4ee5\u7528\u5341\u8fdb\u5236\u6216\u79d1\u5b66\u8ba1\u6570\u6cd5\u6765\u8868\u793a\u3002\u5b9e\u6570\u58f0\u660e\u4e0d\u80fd\u5e26\u6709\u8303\u56f4\uff0c\u5176\u9ed8\u8ba4\u503c\u4e3a0.\u5982\u679c\u5c06\u4e00\u4e2a\u5b9e\u6570\u8d4b\u4e88\u4e00\u4e2a\u6574\u6570\uff0c\u90a3\u4e48\u5b9e\u6570\u5c06\u4f1a\u88ab\u53d6\u4e3a\u6700\u63a5\u8fd1\u7684\u6574\u6570\u3002
realdelta;//\u5b9a\u4e49\u4e00\u4e2a\u540d\u4e3adelta\u7684\u5b9e\u578b\u53d8\u91cf
\u65f6\u95f4\u5bc4\u5b58\u5668\uff1a\u4eff\u771f\u662f\u6309\u7167\u4eff\u771f\u65f6\u95f4\u8fdb\u884c\u7684\uff0cverilog\u4f7f\u7528\u4e00\u4e2a\u7279\u6b8a\u7684\u65f6\u95f4\u5bc4\u5b58\u5668\u6570\u636e\u7c7b\u578b\u6765\u4fdd\u5b58\u4eff\u771f\u65f6\u95f4\u3002\u65f6\u95f4\u53d8\u91cf\u901a\u8fc7\u4f7f\u7528\u5173\u952e\u5b57time\u6765\u58f0\u660e\uff0c\u5176\u5bbd\u5ea6\u4e0e\u5177\u4f53\u5b9e\u73b0\u65e0\u5173\uff0c\u6700\u5c0f\u4e3a64\u4f4d\u3002\u901a\u8fc7\u8c03\u7528\u7cfb\u7edf\u51fd\u6570$time\u53ef\u4ee5\u53d6\u5f97\u5f53\u524d\u7684\u4eff\u771f\u65f6\u95f4\u3002
\u6570\u7ec4
Verilog\u4e2d\u5141\u8bb8\u58f0\u660ereg\u3001integer\u3001time\u3001real\u3001realtime\u53ca\u5176\u5411\u91cf\u7c7b\u578b\u7684\u6570\u7ec4\uff0c\u5bf9\u6570\u7ec4\u7684\u7ef4\u6570\u6ca1\u6709\u9650\u5236\uff0c\u5373\u53ef\u58f0\u660e\u4efb\u610f\u7ef4\u6570\u7684\u6570\u7ec4\u3002\u7ebf\u7f51\u6570\u7ec4\u4e5f\u53ef\u7528\u4e8e\u8fde\u63a5\u5b9e\u4f8b\u7684\u7aef\u53e3\uff0c\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e2a\u5143\u7d20\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u6807\u91cf\u6216\u8005\u5411\u91cf\uff0c\u4ee5\u540c\u6837\u7684\u65b9\u5f0f\u6765\u4f7f\u7528\uff0c\u5f62\u5982[]\u3002
Integercount[0:7];//\u7531\u516b\u4f4d\u8ba1\u6570\u53d8\u91cf\u7ec4\u6210\u7684\u6570\u7ec4
regbool[31:0];//\u753132\u4e2a1\u4f4d\u7684\u5e03\u5c14\u5bc4\u5b58\u5668\u53d8\u91cf\u7ec4\u6210\u7684\u6570\u7ec4
wire[7:0]w_array2[5:0];//\u58f0\u660e8\u4f4d\u5411\u91cf\u7684\u6570\u7ec4
\u6ce8\u610f\uff1a\u4e0d\u8981\u628a\u6570\u7ec4\u548c\u7ebf\u7f51\u6216\u5bc4\u5b58\u5668\u5411\u91cf\u6df7\u6dc6\u8d77\u6765\u3002\u5411\u91cf\u662f\u4e00\u4e2a\u5355\u72ec\u7684\u5143\u4ef6\uff0c\u5b83\u7684\u4f4d\u5bbd\u662fn\uff0c\u6570\u7ec4\u7531\u591a\u4e2a\u5143\u4ef6\u7ec4\u6210\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5143\u4ef6\u7684\u4f4d\u5bbd\u4e3an\u62161.
\u5b58\u50a8\u5668
Verilog\u4e2d\u4f7f\u7528\u5bc4\u5b58\u5668\u4e00\u7ef4\u6570\u7ec4\u6765\u8868\u793a\u5b58\u50a8\u5668\u3002\u6570\u5b57\u7684\u6bcf\u4e2a\u5143\u7d20\u6210\u4e3a\u4e00\u4e2a\u5143\u7d20\u6216\u4e00\u4e2a\u5b57\uff08word\uff09\uff0c\u7531\u4e00\u4e2a\u6570\u7ec4\u7d22\u5f15\u6765\u6307\u5b9a\u3002\u6bcf\u4e2a\u5b57\u7684\u4f4d\u5bbd\u4e3a1\u4f4d\u6216\u8005\u591a\u4f4d\u3002\u6ce8\u610fn\u4e2a1\u4f4d\u5bc4\u5b58\u5668\u548c\u4e00\u4e2an\u4f4d\u5bc4\u5b58\u5668\u662f\u4e0d\u540c\u7684\u3002\u5982\u679c\u9700\u8981\u8bbf\u95ee\u5b58\u50a8\u5668\u4e2d\u7684\u4e00\u4e2a\u7279\u5b9a\u7684\u5b57\uff0c\u5219\u53ef\u901a\u8fc7\u5b50\u7684\u5730\u5740\u4f5c\u4e3a\u6570\u7ec4\u7684\u4e0b\u6807\u6765\u5b8c\u6210\u3002
regmem1bit[0:1023];//1k\u76841\u4f4d\u5b58\u50a8\u5668
reg[7:0]membyte[0:1023];//1k\u7684\u5b57\u8282\uff088\u4f4d\uff09\u5b58\u50a8\u5668membyte
membyet[511]//\u53d6\u51famembyte\u4e2d\u5730\u5740511\u6240\u5904\u7684\u5b57\u8282
\u53c2\u6570
Verilog\u4f7f\u7528\u5173\u952e\u5b57parameter\u5728\u6a21\u5757\u5185\u5b9a\u4e49\u5e38\u6570\u3002\u53c2\u6570\u4ee3\u8868\u5e38\u6570\uff0c\u4e0d\u80fd\u50cf\u53d8\u91cf\u90a3\u6837\u8d4b\u503c\uff0c\u4f46\u662f\u6bcf\u4e2a\u6a21\u5757\u5b9e\u4f8b\u7684\u53c2\u6570\u503c\u53ef\u4ee5\u5728\u7f16\u8bd1\u9636\u6bb5\u88ab\u91cd\u8f7d\u3002\u901a\u8fc7\u53c2\u6570\u91cd\u8f7d\u4f7f\u5f97\u7528\u6237\u53ef\u4ee5\u5bf9\u6a21\u5757\u5b9e\u4f8b\u8fdb\u884c\u5b9a\u5236\u3002\u9664\u6b64\u4e4b\u5916\u8fd8\u53ef\u4ee5\u5bf9\u53c2\u6570\u7684\u7c7b\u578b\u548c\u8303\u56f4\u8fdb\u884c\u5b9a\u4e49\u3002
parameterport_id=5;//\u5b9a\u4e49\u5e38\u6570port_id\u4e3a5
\u5b57\u7b26\u4e32
\u5b57\u7b26\u4e32\u4fdd\u5b58\u5728reg\u7c7b\u578b\u7684\u53d8\u91cf\u4e2d\uff0c\u6bcf\u4e2a\u5b57\u7b26\u5360\u75288\u4f4d\uff08\u4e00\u4e2a\u5b57\u8282\uff09\uff0c\u56e0\u6b64\u5bc4\u5b58\u5668\u53d8\u91cf\u7684\u5bbd\u5ea6\u5e94\u8db3\u591f\u5927\uff0c\u4ee5\u4fdd\u8bc1\u5bb9\u7eb3\u5168\u90e8\u5b57\u7b26\u3002\u5982\u679c\u5bc4\u5b58\u5668\u53d8\u91cf\u7684\u5bbd\u5ea6\u5927\u4e8e\u5b57\u7b26\u4e32\u7684\u5927\u5c0f\uff0c\u5219verilog\u75280\u6765\u586b\u5145\u5de6\u8fb9\u7684\u7a7a\u4f59\u4f4d\u3002\u5982\u679c\u5bc4\u5b58\u5668\u53d8\u6765\u90a3\u4e2a\u7684\u5bbd\u5ea6\u5c0f\u4e8e\u5b57\u7b26\u4e32\u7684\u5927\u5c0f\uff0c\u5219verilog\u622a\u53bb\u5b57\u7b26\u4e32\u6700\u5de6\u8fb9\u7684\u4f4d\u3002
\u7ebf\u7f51
\u7ebf\u7f51\uff08net\uff09\u8868\u793a\u786c\u4ef6\u5355\u5143\u4e4b\u95f4\u7684\u8fde\u63a5\u3002\u7ebf\u7f51\u4e00\u822c\u4f7f\u7528\u5173\u952e\u5b57wire\u8fdb\u884c\u58f0\u660e\u3002\u5982\u679c\u6ca1\u6709\u663e\u5f0f\u7684\u8bf4\u660e\u4e3a\u5411\u91cf\uff0c\u5219\u9ed8\u8ba4\u7ebf\u7f51\u7684\u4f4d\u5bbd\u4e3a1\u3002\u7ebf\u7f51\u7684\u9ed8\u8ba4\u503c\u4e3aZ\uff0c\uff08trireg\u7c7b\u578b\u7ebf\u7f51\u4f8b\u5916\uff0c\u5176\u9ed8\u8ba4\u503c\u4e3aX\uff09\u3002\u5176\u503c\u7531\u9a71\u52a8\u6e90\u786e\u5b9a\uff0c\u5982\u679c\u6ca1\u6709\u9a71\u52a8\u6e90\u5219\u7ebf\u7f51\u7684\u503c\u4e3aZ
Net\u5e76\u4e0d\u662f\u4e00\u4e2a\u5173\u952e\u5b57\uff0c\u5b83\u4ee3\u8868\u4e86\u4e00\u7ec4\u6570\u636e\u7c7b\u578b\uff0c\u5305\u62ecwire\uff0cwand\uff0cwor\uff0ctri\uff0ctriand\uff0ctrior\u4ee5\u53catrireg\u7b49\u3002
\u5bc4\u5b58\u5668
\u5bc4\u5b58\u5668\u7528\u6765\u8868\u793a\u5b58\u50a8\u5143\u4ef6\uff0c\u5b83\u4fdd\u6301\u539f\u6709\u7684\u6570\u503c\uff0c\u76f4\u5230\u88ab\u6539\u5199\u3002\u6ce8\u610f\uff1a\u4e0d\u8981\u5c06\u8fd9\u91cc\u7684\u5bc4\u5b58\u5668\u548c\u5b9e\u9645\u7535\u8def\u4e2d\u7531\u8fb9\u6cbf\u89e6\u53d1\u5668\u6784\u6210\u7684\u786c\u4ef6\u5bc4\u5b58\u5668\u6df7\u6dc6\u3002\u5728Verilog\u4e2d\uff0c\u672f\u8bedregister\u4ec5\u610f\u5473\u7740\u4e00\u4e2a\u4fdd\u6301\u6570\u503c\u7684\u53d8\u91cf\u3002\u4e0e\u7ebf\u7f51\u4e0d\u540c\uff0c\u5bc4\u5b58\u5668\u4e0d\u9700\u8981\u9a71\u52a8\u6e90\uff0c\u800c\u4e14\u4e5f\u4e0d\u50cf\u786c\u4ef6\u5bc4\u5b58\u5668\u90a3\u6837\u9700\u8981\u65f6\u949f\u4fe1\u53f7\u3002\u5728\u4eff\u771f\u8fc7\u7a0b\u4e2d\u7684\u4efb\u610f\u65f6\u523b\uff0c\u5bc4\u5b58\u5668\u7684\u503c\u90fd\u53ef\u4ee5\u901a\u8fc7\u8d4b\u503c\u6765\u6539\u53d8\u3002
\u5bc4\u5b58\u5668\u7684\u6570\u636e\u7c7b\u578b\u901a\u8fc7\u5173\u952e\u5b57reg\u6765\u58f0\u660e\uff0c\u9ed8\u8ba4\u503c\u4e3aX\u3002
\u5411\u91cf
\u7ebf\u7f51\u548c\u5bc4\u5b58\u5668\u7c7b\u578b\u7684\u6570\u636e\u5747\u53ef\u58f0\u660e\u4e3a\u5411\u91cf\uff08\u4f4d\u5bbd\u5927\u4e8e1\uff09\u3002\u5982\u679c\u5728\u58f0\u660e\u4e2d\u6ca1\u6709\u6307\u5b9a\u4f4d\u5bbd\uff0c\u5219\u9ed8\u8ba4\u4e3a\u6807\u91cf\uff081\u4f4d\uff09
wirea;//\u6807\u91cf\u7ebf\u7f51\u53d8\u91cf\uff0c\u9ed8\u8ba4
wire[7:0]bus;//8\u4f4d\u7684\u603b\u7ebf
regclock;//\u6807\u91cf\u5bc4\u5b58\u5668\uff0c\u9ed8\u8ba4
reg[0:40]virtual_addr;//\u5411\u91cf\u5bc4\u5b58\u5668\uff0c41\u4f4d\u5bbd\u7684\u865a\u62df\u5730\u5740
\u5411\u91cf\u901a\u8fc7[high#:low#]\u8fdb\u884c\u8bf4\u660e\uff0c\u65b9\u62ec\u53f7\u4e2d\u5de6\u8fb9\u7684\u6570\u603b\u662f\u4ee3\u8868\u5411\u91cf\u7684\u6700\u9ad8\u6709\u6548\u4f4d\u3002
\u5411\u91cf\u57df\u9009\u62e9
\u5bf9\u4e8e\u4e0a\u9762\u4f8b\u5b50\u4e2d\u58f0\u660e\u7684\u5411\u91cf\uff0c\u6211\u4eec\u53ef\u4ee5\u6307\u5b9a\u5b83\u7684\u67d0\u4e00\u4f4d\u6216\u8005\u82e5\u5e72\u4e2a\u76f8\u90bb\u4f4d\u3002
\u671b\u697c\u4e3b\u91c7\u7eb3~~

1. 常量

verilog有四种基本值:

·0表示逻辑0或“假”;

·1表示逻辑1或“真”;

·x表示未知;

·z表示高阻。

x和z在这里是不分大小写的。也就是说,0x1z和0X1Z是相同的。

1.1 整型常量

整形常量即整数,Verilog的整数有两种书写格式:

·十进制数格式和基数格式。

(1)十进制数格式是一个可以带正负号的数字序列,代表一个有符号数。

(2)基数格式的数通常都是无符号数。形式如下:

[size]'base value

size定义常量的位数(长度),这是可选项;base是基数,规定数据的进制,可以是o(八进制)、B、H和D。value是一个数字序列,其形式应与base定义的形式相符。

7'Hx //7位x(扩展的x),即xxxxxxx

4'HZ //4位Z,即ZZZZ

如果size定义的长度大于数字的实际长度,通常在数据序列的高位补0.但是如果这个数字序列最左边一位是x或z,就用x或z在左边补位。如果定义的长度小于数字序列的实际长度,这个数字序列最左边超出的位将被截断。

1.2 实数型常量

在verilog中,实数就是浮点数,实数的定义方式有两种:

(1)十进制格式,由数字和小数点组成。

(2)指数格式,由数字和字符e(E)组成,e(E)的前面必须要有数字而且后面必须为整数:

23_5.1e2 //其值为23510.0,忽略下划线

3.6E2 //其值为360.0

这里的e可以理解为10。

1.3 字符串型常量

字符串常量是由一对双引号括起来的字符序列。

2 变量

2.1 线网型变量

线网表示元件之间的物理连线,它 不能存储数据。线网是被驱动的,可以用连续赋值或把元件的输出连接到线网等方式给线网提供驱动,给线网提供驱动的赋值元件就是“驱动源”,线网的值由驱动源决定。如果没有驱动源连接到线网,线网的缺省值为Z。

verilog共有11种线网类型:wire tri wor trior wand triand trireg tril tri0 supply0 supply1。

线网的声明语法形式:net_kind[msb:lsb]net1, net2, .........,netN;

net_kind是线网类型;[msb:lsb]定义线网宽度????????的最高位和最低位,这一项是可选的,默认为一位;netN是线网变量的名称。线网可以有多个驱动源,每个驱动源都会给线网赋值,出现这种情况时,线网的取值由线网类型决定。

关于位宽的一点补充:

最高有效位(MSB)
指二进制中最高值的比特。在16比特的数字音频中,其第1个比特便对16bit的字的数值有最大的影响。例如,在十进制的15,389这一数字中,相当于万数那1行(1)的数字便对数值的影响最大。比较与之相反的“最低有效位”(LSB)。汇编中,比如8位2进制数10000001,其中第一个1是MSB,第二个1是LSB。在计算机计算的时候用于判断的比如如果是整数那么小数点(实际上是没有小数点的,但就把那一位和下一位之间看作有)在LSB后面,如果是小数小数点在MSB后面,其中MSB在有符号数中又是符号位。

在这11种线网中,经常用到的是前六种,下面给出其详细的用法举例。

(1)wire和tri线网

有些问题,先跳过!

(2)wor和trior线网

·wor线或 ·trior三态线或

(3)wand和triand线网

·wand线与 ·triand线与

(4)trireg线网(三态寄存器)

这种线网可以存储数值,可用于电容节点的建模。当没有驱动源时,三态寄存器线网的缺省初始值为x。当它的所有驱动源都处于高组态时,三态寄存器保存的值是作用在该线网上的最后一个值。

(5)tri0和tri1线网

·tri0 三态0 ·tri1 三态1

这两个的特征是,若无驱动源(z可视为无驱动源),它的值为0(tri0)或1(tri1)。

(6)supply0 supply1线网

·supply0用于对“地”建模,即低电平。

·supply1用于对电源建模,即高电平1。

2.2 寄存器型变量

寄存器表示一个抽象的数据存储单元,可以通过赋值语句改变寄存器内存储的值。寄存器只能在always语句和initial语句中赋值,always语句和initial语句是verilog提供的功能强大的结构语句。在未被赋值时,寄存器的缺省值为x。

verilog共有五种寄存器类型:reg integer time real realtime。

2.2.1 reg寄存器

(1)reg寄存器的类型

reg寄存器是最常用的寄存器类型,这种寄存器中只能存放无符号数。如果给reg中存入一个负数,通常会被视为正数。

(2)用reg声明存储器

在verilog中不能直接声明存储器,存储器是通过寄存器数组声明的,即用reg声明。可以说,存储器是由若干个寄存器组成的,通过定义单个寄存器的位宽和寄存器的个数可以决定存储器的大小。

存储器声明如下:

reg [msb:lsb] memory1 [upper1:lower1], memory2 [upper2:lower2], ...............

其中msb、lsb定义了存储器单个寄存器的位宽,memory1和memory2是存储器名;upper和lower分别定义了这两个存储器的大小。

2.2.2 integer寄存器类型

integer是整数寄存器,也是verilog中最常用的变量类型,这种寄存器中存储有符号整数值。integer即可以定义单个寄存器,也可以用来定义一个寄存器组。整数寄存器中最少可以容纳32位的数,但是不能作为位向量访问。

2.2.3 time寄存器类型

time类型寄存器用于存储和处理时间,通常用在系统函数$time中。其声明形式如下:

time time_id1, time_id2, ..........,time_idN[msb:lsb];

msb lsb是规定范围界限的常量,这个范围将决定寄存器内能存储时间值的个数,如果未定义界限,默认值为1,那么每个寄存器只能存储一个至少64位的时间值。time类型的寄存器只存储无符号数。

2.2.4 real和realtime寄存器类型

real(实数型寄存器)和realtime(实数型时间寄存器)一般用于在测试模块中存储仿真时间,二者声明形式完全相同。real变量的缺省值为0,当将值x和z赋给real型寄存器时,这些值被当作0。

3. 表达式

3.1 操作数

操作数即运算对象,位于操作符左右两侧。操作数有以下8种类型:常数、参数、线网、寄存器、位选择、部分选择、存储器单元、函数调用。

(1)常数:表达式中经常出现常数,一般是做运算或赋值。表达式中的整数值可以是有符号数或无符号数。如果表达式中的整数形式是十进制整数,就会被当作有符号数,如果整数形式是基数型整数,那么该整数会被当作无符号数对待。

(2)参数:参数类似于常量,表达式中出现的参数都作为常数对待。参数是用某标识符代表某个数字的,所以定义它时要给它赋值。

(3)线网

(4)寄存器:寄存器是在表达式中出现次数最多的操作数,许多程序语句都是通过对寄存器中存储的值进行转换和传输实现设计目的的。注意:整型寄存器中的值被视为有符号的二进制补码数;实数和实数时间类型寄存器中的值被视为有符号浮点数;而reg寄存器或时间寄存器中的值被视为无符号数。

(5)位选择

(6)部分选择

(7)存储器单元:存储器建模是使用reg声明寄存器组,不能在一条语句内就完成对存储器内所有寄存器单元的赋值,必须对其中的存储单元进行赋值。形式如下:

memory[word_address]

其中,memory是存储器名,word_address是要选择单元的编号。不允许对存储器单元做位选择或部分选择。

(8)函数调用:verilog中的函数和C语言中的函数没什么大的区别,都用来实现某个计算过程或完成某个事件处理。函数可以被随意调用,函数调用也可以作为表达式中的操作数。调用的函数可以是系统函数(以字符$开始)或用户定义的函数。

3.2 操作符

verilog的操作符有如下九种类型:

·算术操作符

·关系操作符

·相等操作符

·逻辑操作符

·按位操作符

·归约操作符

·移位操作符

·条件操作符

·连接和复制操作符

(1)算术操作符

+ - * 、 %

·整数除法截断所有小数部分。

·模操作符求出与第一个操作数符号相同的余数,如-7/4结果为-3。

·如果算术操作符的操作数中出现x或z,那么整个算术操作的运算结果为x。

·算术操作结果的长度

进行算术操作时,表达式中操作数的长度可能不一致,这时运算结果的长度由最长的操作数决定。在赋值语句中,算术操作符结果的长度由操作符左端的赋值目标长度决定。

reg [0:3] Arc, Bar, Crt;

reg [0:5] Frx;

Arc = Bar + Crt;

Frx = Bar + Crt;

在第一个赋值中,加法操作的溢出部分被丢弃,而在第二个赋值中,任何溢出的为存储在位Frx[1]中。在较大的表达式中,中间结果的长度应取最大操作数的长度(在赋值时此规则也包括左端赋值目标)。

·无符号数和有符号数

执行算术操作和赋值时,要注意哪些操作数时无符号数、哪些操作数是有符号数。无符号数存储在线网、一般寄存器和基数格式表示形式的整数中。有符号数存储在整数寄存器和十进制形式的整数中。

·关系操作符

关系操作符是对两个操作数进行比较,如果比较结果为真则结果为1,如果比较结果为假则结果为0,关系操作符多用与条件判断。 > < >= <=

如果操作数中有x或z出现,那么结果为x。

·相等操作符

四种:== != === !== 其中==和!=是比较逻辑值,由于操作数中某些位可能是x,所以比较结果也有可能是x。===和!==是按位比较,所以不会出现结果为x的情况。

·逻辑操作符

&& || !

如果操作数是向量,那么非0向量被当作逻辑1。

·位操作符

位操作符是对操作数按位进行与、或、非等逻辑操作。

~:一元非 &:二元与 | : 二元或 ^~,~^二元异或或非

·规约操作符

规约操作符的操作数只有一个,并只产生一位结果。共有如下6种:

(1)& 规约与 将操作数的各位进行与操作的结果。

(2)~& 规约与非 与规约与相反。

(3)| 规约或 将操作数的各位进行或操作的结果。

(4)~| 规约或非

(5)^ 规约异或:某个位有x或z,结果为x,操作数有偶数个1,那么结果为0;否则为1。

·移位操作符

<< >>

·条件操作符

条件操作符是根据条件表达式的值来选择执行表达式,形式如下:

cond_expr?expr1:expr2

其中,con_expr是条件表达式,他的结果是真或假,expr1和expr2是待选的执行表达式。con_expr为真,选择执行1,否则选择执行2。如果con_expr为x或z,两个都要计算,然后对计算结果按位运算,某一位都为1,则结果为1,都为0,结果为0,否则为x。

·连接操作符

连接操作符是把位于大括号{}中的两个或以上用“,”分隔的小表达式按位连接在一起,形成一个大表达式。

·赋值操作符

  • verilog琛ㄨ揪寮忕殑鏁版嵁绫诲瀷
    绛旓細verilog鍏辨湁11绉嶇嚎缃绫诲瀷:wire tri wor trior wand triand trireg tril tri0 supply0 supply1銆 绾跨綉鐨勫0鏄庤娉曞舰寮:net_kind[msb:lsb]net1, net2, ...,netN;net_kind鏄嚎缃戠被鍨;[msb:lsb]瀹氫箟绾跨綉瀹藉害???鐨勬渶楂樹綅鍜屾渶浣庝綅,杩欎竴椤规槸鍙夌殑,榛樿涓轰竴浣;netN鏄嚎缃戝彉閲忕殑鍚嶇О銆傜嚎缃戝彲浠ユ湁澶氫釜椹...
  • verilog涓湁鍝嚑绉绫诲瀷鐨勮祴鍊艰鍙,璇存槑瀹冧滑鐨勫尯鍒,骞朵妇渚
    绛旓細鍦Verilog涓湁涓ょ绫诲瀷鐨勮祴鍊艰鍙 杩炵画璧嬪煎拰杩囩▼璧嬪 璧嬪琛ㄨ揪寮鐢变笁涓儴鍒嗙粍鎴 宸 鍊艰祴鍊艰繍绠楃=鎴<= 鍜屽彸鍊煎彸鍊煎彲浠ユ槸浠讳綍绫诲瀷鐨勬暟鎹鍖呮嫭net鍨嬪拰register鍨嬩絾瀵硅繛缁 璧嬪 宸﹀煎繀椤绘槸net绫诲瀷鐨勬暟鎹 鑰岃繃绋嬭祴鍊 宸﹀煎繀椤绘槸register绫诲瀷鐨勬暟鎹 涓嬮潰灏嗕綔璇︾粏鎻 杩 1杩炵画璧嬪 鍦╥nitial鎴朼lways澶栫殑assign璧嬪...
  • verilog涓璻eg鍜寃ire绫诲瀷鐨勫尯鍒拰鐢ㄦ硶
    绛旓細Verilog 涓彉閲忕殑鐗╃悊鏁版嵁鍒嗕负绾垮瀷鍜屽瘎瀛樺櫒鍨銆傝繖涓ょ绫诲瀷鐨勫彉閲忓湪瀹氫箟鏃惰璁剧疆浣嶅锛岀己鐪佷负1浣嶃傚彉閲忕殑姣忎竴浣嶅彲浠ユ槸0锛1锛孹锛孼銆傚叾涓瓁浠h〃涓涓湭琚缃垵濮嬬姸鎬佺殑鍙橀噺鎴栬呮槸鐢变簬鐢变袱涓垨澶氫釜椹卞姩瑁呯疆璇曞浘灏嗕箣璁惧畾涓轰笉鍚岀殑鍊艰屽紩璧风殑鍐茬獊鍨嬬嚎鍨嬪彉閲忋倆浠h〃楂橀樆鐘舵佹垨娴┖閲忋傜嚎鍨嬫暟鎹寘鎷瑆ire,wand,wo...
  • verilog涓璦琛ㄧず浠涔?
    绛旓細褰揵=0鐨勬椂鍊檃鐨勫间负0锛屽綋b=1鏃讹紝a鐨勫煎彇鍐充簬c锛宒鐨勫硷紝褰揷=1锛宒=1鏃禷鐨勫肩瓑浜1锛屽綋c=1锛宒=0鎴栬卌=0锛宒=1鎴栬卌=0锛宒=0鏃禷鐨勫间负0銆傞鍏堜細鍒ゆ柇b鐨勫兼槸鍚︾瓑浜1锛岀瓑浜0锛屽垯鐩存帴瀵筧杩涜璧嬪间负0锛屽鏋渂鐨勫间负1锛岄偅涔堜細鎵ц(c && d) ? 1'b1:1'b0锛岀劧鍚庢牴鎹甤&&d鐨勭粨鏋滃垽鏂祴...
  • verilog 涓殑10'd0浠涔堟剰鎬?
    绛旓細鏁板瓧琛ㄨ揪寮锛<浣嶅><杩涘埗><鏁板瓧> b:浜岃繘鍒 //eg.4'b1110 琛ㄧず4浣嶄簩杩涘埗鏁1110 h:鍗佸叚杩涘埗 //eg 8'hef銆4鈥檋a绛 d:鍗佽繘鍒 //eg 2'd3銆4鈥榙15(涓嶈兘鍐16锛4浣嶅鏈澶15)绛 鎵浠10鈥檇0琛ㄧず10浣嶅鐨勬暟鍊0锛0000000000 鍔犲叆10鈥榙15,鍒欒〃绀哄崄杩涘埗15, 0000001111銆
  • Verilog璇█ if 璇彞
    绛旓細1锛塱f锛琛ㄨ揪寮锛夎鍙ャ傚 if(a>b)out1 = int1;2锛塱f锛堣〃杈惧紡锛夎鍙ワ紱else 璇彞锛涘 if(a>b)out1 = int1;else out1 = int2;3锛塱f锛堣〃杈惧紡1锛夎鍙1锛沞lse if锛堣〃杈惧紡2锛 璇彞2锛沞lse if锛堣〃杈惧紡3锛 璇彞3锛涒︹︹...else if锛堣〃杈惧紡m锛 璇彞m锛沞lse 璇彞n锛涙潯浠惰鍙ュ繀椤诲湪杩囩▼鍧楄...
  • verilog涓璻eg鍜寃ire鐨勫尯鍒
    绛旓細棣栧厛瑕佸厛娓呮涓鐐癸紝verilog鏄‖浠舵弿杩拌瑷锛屽叾鏈缁堟槸涓轰簡鐢熸垚涓涓數璺紝鎵浠ュ畠鐨勫彉閲绫诲瀷鏄牴鎹疄闄呯數璺潵鍐冲畾鐨勩備粠鍚嶅瓧鐞嗚В锛歸ire锛岀嚎鍨嬶紝瀹為檯涓婂湪鐢佃矾涓殑浣滅敤灏辨槸涓鏍硅繛绾匡紱reg锛屽瘎瀛樺櫒鍨嬶紝鍦ㄧ數璺腑灏变綔涓哄瘎瀛樺櫒瀛樺湪銆傝繛绾垮拰瀵勫瓨鍣ㄦ槸鏋勬垚鏁板瓧鐢佃矾鐨勫熀鏈粨鏋勶紝杩欎篃鏄痸erilog杩欎袱绉嶅彉閲忕被鍨嬬殑鏉ユ簮銆傚綋鐒讹紝鍦...
  • verilog璇█涓璦ssign鎬庝箞鐢
    绛旓細A,B,SEL,L;//澹版槑4涓嚎鍨嬪彉閲 assign L=(A&~SEL)|(B&SEL);//杩炵画璧嬪 鍦╝ssign璇彞涓紝宸﹁竟鍙橀噺鐨勬暟鎹被鍨蹇呴』鏄痺ire鍨嬨俰nput鍜宱utput濡傛灉涓嶇壒鍒0鏄庣被鍨嬶紝榛樿鏄痺ire绫诲瀷銆備妇渚2閫1鐨勬暟鎹夋嫨鍣細module mux2x1_df(A,B,SEL,L);input A,B,SEL;output L;assign L=SEL?A:B;endmodule ...
  • Verilog寰幆璇彞
    绛旓細鍦Verilog HDL涓瓨鍦ㄧ潃鍥涚绫诲瀷鐨勫惊鐜鍙ワ紝鐢ㄦ潵鎺у埗鎵ц璇彞鐨勬墽琛屾鏁般傚叾璇硶鍜岀敤閫斾笌C璇█寰堢被浼 forever璇彞鐨勬牸寮忓涓嬶細forever寰幆璇彞甯哥敤浜庝骇鐢熷懆鏈熸х殑娉㈠舰锛岀敤鏉ヤ綔涓轰豢鐪熸祴璇曚俊鍙枫傚畠涓巃lways璇彞涓嶅悓澶勫湪浜庝笉鑳界嫭绔嬪啓鍦ㄧ▼搴忎腑锛岃屽繀椤诲啓鍦╥nitial鍧椾腑銆俧orever寰幆鐨勫簲鐢ㄧず渚嬪涓嬶細repeat璇彞鐨勬牸寮...
  • 璇锋暀verilog涓殑涓嬮潰涓夌琛ㄨ揪寮忕殑鎰忔: ! 4鈥榖0101 is 1鈥檅0; zero=...
    绛旓細锛佹槸閫昏緫杩愮畻绗︼紝濡傛灉鎿嶄綔浣嶄笉鍙槸涓浣嶆暟锛屽簲灏嗘搷浣滄暟浣滀负涓涓暣浣撴潵瀵瑰緟锛屽嵆濡傛灉鎿嶄綔鏁版槸鍏0.灏辩浉褰撲簬閫昏緫0锛屽彧瑕佹湁涓浣嶆槸1锛屽氨鐩稿綋浜庨昏緫1.杩欓噷4鈥榖0101 鐩稿綋浜庨昏緫1锛屽彇鍙嶈嚜鐒朵负0.寤鸿浣犵湅涓涓嬬帇閲戞槑鐗堢殑鏁板瓧绯荤粺璁捐涓verilogHDL锛堢涓夌増锛...
  • 扩展阅读:verilog assign if ... verilog四种逻辑值 ... verilog 对某一位赋值 ... verilog实现或非表达式 ... verilog教程 ... verilog三目运算符写法 ... verilog中符号大全 ... verilog中与或怎么表示 ... verilog数据选择器代码 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网