时间啊,人最宝贵的就是时间,年轻不是资本,学习才是永远的资本。
数据类型&变量:
数据类型:Verilog中一共有19种数据类型,基本的数据类型是四种分别为reg型,wire型,interger型,parameter型。
其余数据类型分别为:large型,medium型,small型,tri型,trio型,tril型,triland型,trilor型,trireg型,scalared型,vectored型,wand型,wor型,time型。
除了time型外基本都与逻辑单元建库有关与系统设计没有很大的关系。
一.常量的表达式
二进制采用(B或b)表示,八进制采用(O或o)表示,十进制采用(D或d)表示,十六进制采用(H或h)表示。
整数的表达方式有以下三种:
1.全面的表达方式 <位宽><进制><数值> ex.1 10'd1024 十位宽度的十进制1024 ex.2 8'b11110000 ex.3 8'hF0
2. 数字为宽采取缺省值 <进制><数值> ex.1 至少为32位取决于系统
3. 默认为10进制 <数值>
X和Z值
4'b10X0 //从低位向高位数,第二位为不定值
4'b101Z //从低位向高位数,第一位为高阻值
12'dZ //从低位向高位数,第一位为高阻值(高阻值的第一种表示法)
12'd? //从低位向高位数,第一位为高阻值(高阻值的第二种表示法,‘?’代替‘Z’)
8'h4X //从低位向高位数,低四位为不定值 此为八位16进制
负数
-8’d100 //一个数字可以被表示成负数,只需要在位宽前面加减号
8'd-100 //!!!!这种表示法错误,“-”必须置于前面
下划线(underscore)
16'b1111_1010_0011_0000 //下划线分隔数的表达提高可读性,只用于具体数字之间
10'b_1110_0000_0100_1111 //!!!!错误的表达方式,在进制和数字之间不可以加下划线
参数型(parameter)
parameter 参数名1=表达式1,参数名2=表达式2,...参数名n=表达式;
parameter T1MS=23'd5_000_000;
二变量的表达
1..网络数据类型表示结构实体之间的物理连接。网络类型的变量不能储存数值,并且必须受到驱动器(门或者 连续赋值语句assign)的驱动。若无驱动器连接到网络类型的变量上,则该变量就是高阻的(其值为Z)。
常用的网络数据类型: wire ,tri。二者具有相通的语法格式和功能。
不同点:wire表示单个门驱动或连续赋值语句驱动的网络型数据。
tri 表示多驱动器驱动的网络型数据。
(1)wire型用法
wire[n-1:0]数据名1,数据名2,...,数据名i;//共i条总线,每条总线内有n条路
wire x; /定义了1位的wire型数据 x
wire [7:0]y; /定义了8位的wire型数据 y
wire [3:0]y,z; /定义了二个4位的wire型数据y,z
(2)reg(寄存器)型用法
reg型数据通常用来表示“always”模块内的指定信号,常代表触发器。在“always”模块内被赋值的每一个信号都必须定义成reg型。
reg[n-1:0]数据名1,数据名2,...,数据名i;//共i个数据,每个数据位宽为n
reg x; //定义了1位名为 x的reg型数据
reg [7:0]y; //定义了8位名为 y的reg型数据
reg[3:0]y,z; //定义了二个4位的reg型数据y,z
(3)memory(存储器)型用法
在Verilog中没有多维数组存在,通过扩展reg型数据的地址来实现的,用法如下
reg[n-1:0]存储器名[m-1:0];//n为存储单元大小,m为存储单元的个数
reg[7:0]mymemory[255:0]; //地址范围0-255,数据位宽为8
reg memory[63:0] //64个位宽为1的存储器
基本运算符:
单目运算符(unaryu operator) | 双目运算符(binary operator) | 三目运算符(ternary operator) |
~,-,etc. | +.-,*,/,% |
?: |
clock=~clock;//单目运算 ~取反,clock是操作数
c=a|b; //双目运算 |或,a,b是操作数
r=s?y:n //三目运算 ?:条件语句 s,y,n是操作数
运算符用法