Verilog基本语法及应用

一 基础数据类型

1.常量

在程序运行中,其值不能改变的量称为常量。

  • Verilog HDL中常用 parameter 定义一个常量。其使用格式如下:
parameter 参数名1=表达式,参数名2=表达式;
parameter Xiao=789,Ming=456;
parameter Xi=1.2;
parameter Gua=Xiao-Ming;

2.变量

与常量相反,在程序运行中可以改变其值的量---------
Verilog HDL中有许多中的变量数据类型,这里只对常用的几种进行介绍

  • 网络数据类型 wire型
  • 网络的数据类型表示了在实体结构中的物理连接(导线的意思)。
  • 该数据类型的变量 不能存储值,且必须受到驱动器的或门的连续赋值语句,如 assign 的驱动
  • 如果没有驱动器连接该网络类型变量,其值为高阻(z)。
wire	Xi;	//定义了一个一位的wire型
wire	[7:0]Xi;	//定义了一个八位的wire型
wire	[4:0]Xi,Wie;	//定义二个四位的wire型
  • 寄存器数据型 reg型
  • reg 型数据常用在 always 模块内的指定信号,常代表触发器。
  • 在 always 模块内的每一个信号需定义为 reg 型。
  • 初始的默认值为不定值 x。
reg[3:0]		rret;//定义了一个四位的reg
reg[4:1]		Xi,Wie;//定义了两个四位的reg
  • reg 的扩展 memory 型
  • 通关该扩展可对 reg 进行存储器建模,仿照一个数组类型。
  • 格式如下 :通过该格式,我们建立了一个名为Xi的256个8位存储器
reg[7:0] 	Xi[255:0];	//定义了256个8位存储器
reg[255:0]	Wie[7:0];	//定义了8个256位存储器
Xi[127]=1;	//对memory中的第127个存储器赋值位1

二 运算符与表达式

1.基础运算符

基础的算术运算符又称二进制运算符,共有一下几种

  • ( + )运算,加法运算。( - )运算,减法运算
  • ( * )运算,乘法运算。( / )运算,除法运算
  • ( % )运算,模运算,求余运算,两侧均为整数运算
    以上的运算类型与其他的语种类似,没有很多的区别。

2.特殊运算符

  • ( ~ )运算,取反运算。( & )运算,按位与运算
  • ( | )运算,按位或运算。( ^ )运算,按位异或运算
  • ( ^~ )运算,按位同或运算。
  • ( { } )运算,拼接运算。
{a,b[3.0],w,3'b101}	//该表达式为拼接运算 将a与b[3.0]与w与101拼接为一个数据
{3{Xi}}		//表达为{Xi,Xi,Xi}的拼接

注意:在运算两个不同长度的数据时,系统会自动将数据右端对齐,位少的用零补齐。

3.逻辑运算符

  • ( && )运算,与运算。
  • ( || )运算,或运算。
  • ( ! )运算,非运算。

三.赋值语句

1.阻塞赋值与非阻塞赋值

赋值语句分为:阻塞赋值与非阻塞赋值

  • 非阻塞赋值
  • 使用非阻塞赋值时,赋值的变量不能立即生效。
  • 在当块结束时赋值操作才算完成。
  • 被赋值的对象是取值对象的初始值

在该例中,赋值是在 always 运行完后进行的,所以 A 得到了 B 的初始值,C 得到了 A 的初始值。
相当于:A=B; C=A;

always@(posedge clk)	//非阻塞赋值
		begin
			A<=B;
			C<=A;
		end
		
always@(posedge clk)	//阻塞赋值
		begin
			a=b;
			c=a;
		end
  • 阻塞赋值
  • 使用阻塞赋值时,被赋值变量会立即获取到变化值。

四.块语句的类型

1.顺序块

begin_end 语句,通常用于表示顺序执行的语句。

  • 块内语句按顺序执行。(处于begin·····end 内)。
  • 每一条语句的执行时间,由上一条语句决定。
  • 对于顺序块,延时是用于确定前一语句的运行时间。
  • 直到 end 才退出语句块。
    在该例子中,语句执行完的总时间为15个时间单位(大约)
	begin
		语句one;
		#5	语句two;
		#10	语句three;	//延时10个时间单位后执行语句3
	end

2.并行块

fork 通常用户需要并行运算的场合

  • 在该语句块内,所有语句同时运行。
  • 运行到 jojn 时退出语句。
  • 对于并行块,同时执行的语句,延时只是用于确定运行时序的。
    在该例子中语句的最后执行时间为10个时间单位(大约)。
	fork
		语句one;
		#5	语句two;
		#10	语句three;	//10个时间单位后执行语句3
	jojn

五.条件与循环

1.条件

条件选择的语句类型有 if_else,case_endcase,前者多用户信号类型的判断,后者多用户信号的选择。

  • if 语句的三种类型。
	if(a>b)	
		语句one;
	if(a>b)
		语句two;
	else
		语句three;
	if(a<b)
		语句n;
	else if(a==b)
		语句m;
  • case语句
  • case语句可以快速的进行多支判断。
  • Verilog 提供了三中不同的case方法:case,casex,casez。
  • 判断case(Xi),如果Xi 与列表中有相同即为选中。

case

	reg[3:0] 	Xi;
	reg[3:0]	sum;
	case(Xi)
		4'b0 :	sum=4'b111;
		4'b1 :	sum=4'b110;
		4'b2 :	sum=4'b101;
		4'b3 :	sum=4'b100;
		default: sum=4'b111;	//都未选中的情况下运行该语句
	endcase

casez

  • 该类型应用于不需要考虑的高阻状态
  • " ? "为该项不考虑高阻
	reg[3:0] 	Xi;
	reg[3:0]	sum;
	case(Xi)
		4'b??0 :	sum=4'b111;
		4'b??1:	sum=4'b110;
		4'b?1?:	sum=4'b101;
		4'b?11:	sum=4'b100;
		default: sum=4'b111;	//都未选中的情况下运行该语句
	endcase

casex

  • 该语句类型用户排除无须考虑的项,无论是否高阻
  • 使用该语句时将上方代码案例中 ( ?)改成 ( x )

2.循环

需要连续运行,或者多次运行的语句

  • forever 语句
  • 该语句常用于产生周期性波形,用于仿真信号的测试。
  • 必须写入 initianl 语句块中。
在这里插入代码片
  • repeat 语句
  • repeat 执行的是固定次数的循环次数。
  • 在该条件内参数需要为常量,变量,或信号,如果为变量在循环开始时的数值即为循环次数。
repeat (loop_number) 
begin
    语句n;
end
  • for 语句
  • 表达式:for(初始条件;停止条件;条件控制)
	// for 语句
	integer    J;
	reg [3:0]    number;
	begin
	    number= 'b0 ;
	    for (J=0; J<=10; J=X+1) 
	    begin
	        #10 ;
	        number= number+ 1'b1 ;
	    end
	end

------------更新中----------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Verilog 是一种硬件描述语言,用于设计数字电路和系统。以下是一些基本的 Verilog 语法: 1. 模块声明 模块是 Verilog 的基本单位,用于描述数字电路的功能和接口。模块声明的语法如下: module module_name(input input_list, output output_list); // 模块实现 endmodule 其,input_list 和 output_list 是输入和输出端口的列表。每个端口可以是一个单独的线或一个向量。 2. 线声明 线是 Verilog 的基本数据类型,用于表示数字电路的信号。线的声明语法如下: wire wire_name; // 或者 wire [n-1:0] wire_name; 其,n 是线的位宽。 3. 寄存器声明 寄存器是一种存储器元件,用于在数字电路存储数据。寄存器的声明语法如下: reg reg_name; // 或者 reg [n-1:0] reg_name; 其,n 是寄存器的位宽。 4. 时钟声明 时钟是数字电路的基本信号,用于同步电路的操作。时钟的声明语法如下: input clk; 5. 运算符 Verilog 支持多种运算符,包括算术运算符、逻辑运算符、位运算符等。常用的运算符如下: 算术运算符:+、-、*、/、%(取余数) 逻辑运算符:&&(与)、||(或)、!(非) 位运算符:&(按位与)、|(按位或)、^(按位异或)、~(按位取反) 6. 控制结构 Verilog 支持多种控制结构,包括 if、else、for、while、case 等。常用的控制结构如下: if (condition) begin // 代码块 end else begin // 代码块 end for (initialization; condition; update) begin // 代码块 end while (condition) begin // 代码块 end case (expression) value1: // 代码块 value2: // 代码块 default: // 代码块 endcase 这些是 Verilog基本语法,还有更多高级语法和应用需要深入学习和实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值