自学Verilog(二)

Verilog基本概念

了解Verilog HDL程序的框架

刷题推荐

链接: Verilog刷题

常用Verilog语法(1)

模块的结构

module block(a,b,c,d);
	input a,b;
	output c,d;
	
	assign c = a|b;
	assign d = a&b;
endmodule

从这个例子中可以看出Verilog结构位于在module和endmodule声明语句之间,包括四个主要部分:端口定义、I/O说明、内部信号声明和功能定义

模块的端口定义

模块的端口声明了模块的输入输出口

module 模块名(1,2,3...);
模块内容

内容包括I/O说明、内部信号声明和功能定义

1,I/O说明的格式
输入口:		input [信号位宽-1:0] 端口名1;
			input [信号位宽-1:0] 端口名2;
输出口:		output [信号位宽-1:0] 端口名1;
			output [信号位宽-1:0] 端口名2;
输入/输出口:
			inout [信号位宽-1:0] 端口名1;
			inout [信号位宽-1:0] 端口名2;
2,内部信号说明

在模块内使用到与端口有关的wire和reg类型变量的声明。

reg [width-1:0] R变量1,R变量2...;
wire[width-1:0] R变量1,R变量2...;
3,功能定义

模块中最重要的逻辑功能定义部分,有三种方法可以在模块中产生逻辑。
1)用“assign”声明语句
2)用实例元件

如:and #2 u1(q,a,b);

设计中用到一个跟与门(and)一样的名为u1的与门,输入端为a,b,输出端为q,输出延迟为2个单位时间,注意每个具体化后的实例元件的名字必须是唯一的。
3)用“always”块

如:always @(posedge clk or posedge clr)
	begin
			if(clr) q <= 0;
				else if(en) q <= d;
	end

用“always”块既可用于描述组合逻辑也可描述时序逻辑。注意 ‘<=’不是小于等于,而是一种赋值运算符,这里只当做‘=’来思考

数据类型及其常量和变量

Verilog HDL总共有19种数据类型。分别是reg型、wire型、integer型、parameter型、large型、medium型、scalared型、time型、small型、tri型、trio型、tril型、triand型、trior型、trieg型、vectored型、wand型和wor型

1,数字

A、整型常量有4种进制表示形式:
1)二进制整数(b或B);
2)十进制整数(d或D);
3)十六进制整数(h或H);
4)八进制整数(o或O);
B、数字表达式:

8'b10101100		//位宽为8的二进制表示,'b表示二进制
8'ha2			//位宽为8的十六进制表示,'h表示二进制

C、x 和 z 在数字电路中分别表示不定值和高阻值,x可以定义十六进制的4位二进制数状态,八进制数的3位,二进制数的1位。z还有一种表达方式可以写字‘?’,

4'b10x0			//位宽为4的二进制数,从低位数起,第2位为不定值
4'b101z			//位宽为4的二进制数,从低位数起,第1位为高阻值
12'dz			//位宽为12的十进制数,其值为高阻值(第一种表达方式)
12'd?			//位宽为12的十进制数,其值为高阻值(第二种表达方式)
8'h4x			//位宽为8的十六进制数,其低4位值为不定值 

D、负数

-8'b10101100	//代表5的补数(用八位二进制数表示)
8'h-a2			//非法格式

E、下划线

16'b1010_1011_1111_1010		//合法格式
8'b_0010_1010				//非法格式

当常量不说明位数时,默认是32位,每个字母用8位ASCLL值表示

10 = 32'd10 = 32'b1010
"AB" = 16'B01000001_010000010
2,参数(parameter)型

用parameter来定义常量,参数型数据经常用于定义延迟时间和变量宽度。

parameter size = 8;
3,变量

A、wire型
wire型数据常用来表示以assign关键字指定的组合逻辑信号,可以用作任何方程式的输入,也可用作“assign”语句或实例元件的输出

wire a;			//定义了一个1位的wire型数据
wire [7:0] b;	//定义了一个8位的wire型数据
wire [4:1] c,d;	//定义了两个4位的wire型数据

B、reg型
寄存器数据类型的关键字是reg。reg型数据常用来表示“always”模块内指定信号,常代表触发器。在“always”块内被赋值的每一个信号都必须定义成reg型。

reg a;			//定义了一个1位的reg型数据
reg[7:0] b;	//定义了一个8位的reg型数据
reg[4:1] c,d;	//定义了两个4位的reg型数据

运算符

1)算术运算符(+,-,*,/,%)
2)赋值运算符(=,<=)
3)关系运算符(>,<,>=,<=)
4)逻辑运算符(&&,||,!)
5)条件运算符(?:)
6)位运算符 (~,|,^,&)
7)移位运算符(<<,>>)
8)拼接运算符({})
9)其他
自学Verilog(三)链接: 常用Verilog语法(2)

这里是引用《Verilog数字系统设计教程》——夏宇闻

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值