Verilog HDL 语法学习(一)模块结构,数据类型&变量,基本运算符号

时间啊,人最宝贵的就是时间,年轻不是资本,学习才是永远的资本。

数据类型&变量:

数据类型: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是操作数

运算符用法

  1. 算术运算符:+,-,*,/ ,%(表示取模,即余数).
  2. 赋值运算符:=,<=.
  3. 关系运算符:<,>,<=,>=.
  4. 逻辑运算符:&&,||,!.
  5. 条件运算符:?:
  6. 位运算符:~(取反),|(按位或),&(按位与),^(按位异或),^~(按位同或
  7. 移位运算符:<<,>>
  8. 拼接运算符:({})

 

 

你可能感兴趣的:(FPGA学习)