Verilog学习----模块的结构、数据类型、变量和基本的运算符号
1.模块的结构组成
(1)描述接口
接口的定义格式
Module 模块名(口1,口2,等等 );
在引用模块时端口可以有两种方法连接:
1.引用时严格按照定义的接口顺序来连接,不用标出原模块定义时的规定端口
模块名(连接端口1信号名,连接端口2信号名,连接端口3信号名,等等);
2.引用时用“.”表明原模块在定义时规定的端口名
模块名(.端口1(连接信号1),.端口2(连接信号2),等等)
Input
Output
Inout
Reg
Wire
(2)描述逻辑功能
三种方法可以在模块中产生逻辑。
1.用“assign”声明语句:
2用事例原件
3用“always”块。
要点
(1)在Verilog模块中所有过程块(initial块、always块)、连续赋值语句、事例引用都是并行的;
(2)它们表示的是一种通过变量名互相连接的关系;
(3)在统一模块中这三者出现的先后次序没有关系;
(4)只有连续赋值语句assign和事例引用语句可以独立于过程块而存在于模块的功能定义部分。
2.数据类型与常量和变量
(1)常量
1三种数字表达方式
(1)<位宽><进制><数字>这是全面的描述方式。
(2)<进制><数字>这种描述方式数字的采用的默认位宽(32位)。
(3)<数字>这种的描述方式才用默认进制(十进制)。
z x
负数 在位宽前加减号;
下划线 只能用在数字与数字之间;
(2)参数型(parameter)
用parameter来定义常量,可提高程序的可读性和可维护性。
格式
Parameter 参数名1=表达式,参数名2=表达式, ;
右边必须是常数表达式。
参数的改变?????
(3)变量
1.wire型
wire型数据常用来表示用以assign关键字指定的组合逻辑信号。
Verilog程序模块中输入、输出信号类型默认时自动定义为wire型。
wire型信号可以用作任何方程式的输入,也可以用作“assign”语句或事例原件的输出。
格式
Wire【 n-1:0】数据名1,数据名2, 数据名i;//共有i条总线,每条总线内有n条线路。
2.reg型
reg型数据常用来表示“always”模块内的指定信号,常代表触发器。
通常,在设计中要由“always”模块通过使用行为描述语句来表达逻辑关系。
在“always”模块内赋值的每一个信号都必须定义成reg型。
格式
Reg【n-1:0】数据名1,数据名2, 数据名i;
reg型数据的默认初值是不定值。
reg型数据可以赋正值,也可以赋负值。
但当一个reg型数据是一个表达式中的操作数时,它的值被当作无符号值,即正值。
3.memory型
memory型数据是通过扩展reg型数据的地址范围来生成的。
格式
Reg【n-1:0】存储器名【m-1:0】;
对memory中的存储单元进行读写操作,必须指定该单元在存储器中的地址。
进行寻址的地址索引可以是表达式,可以对存储器中的不同单元进行操作。
4.运算符表达式
1.算数运算符(+、-、*、/、%);
2.赋值运算符(=、<=);
3.关系运算符(>、<、>=、<=);
4逻辑运算符(&&、||、!);
5.条件运算符(?:);
6.位运算符(~、&、|、^、^~);
7.移位运算符(《、》);
8.拼接运算符({});
9.其他
(1)基本的算数运算符
+、-、*、/、%
在进行整数除法运算时,结果值要略去小数部分,只取整数部分;
而进行取模运算时结果值的符号位采用模运算式里第一个操作数的符号位。
(2)位运算符
~//取反、&//按位与、|//按位或、^//按位异或、^~//按位同或(异或非)
除了~是单目运算符以外,均为双目运算符。
为运算符中的双目运算符要求对两个操作数的相应位进行运算操作。
两个不同长度的数据进行位运算系统会自动的将两者右端对齐,在位数少的操作数的相应高位用0填满,再进行运算。
。。。