Verilog简易教程

Verilog简易教程

Verilog是一款硬件描述语言,整体和C语言的算法逻辑相近,但是各种代码语言描述却不尽相同。

本教程是面向小白的简易教程,但是需要有一定的编程语言和算法基础,最好是C语言。

1.模块

Verilog的代码在模块(module)内编写,自上而下读取模块,每个程序编写时都需要先指定模块,确认模块端口,并确定端口是输入端口(input)还是输出端口(output)。

1
2
3
4
5
module add1(in1,in2,out);
input in1,in2;
output out;
//代码
endmodule

其中 moduleendmodule 内是模块执行内容,add1 为模块名,括号内的为端口。

2.变量

Verilog中的变量一般有两种,一种是连接型(net)线网(wire),一种是储存型(variable)寄存器(reg)

线网类型的变量没有储存作用,只是跟随其上游连接的内容改变而改变,起到一个传输信号的作用。
可以在定义时设置该变量的位数。

1
2
wire out_1;
wire [3:0] out_2;

寄存器类型的变量可以储存数据,它会保持数据原有的值,直到被改写。
可以在定义时设置该变量的位数。

1
2
reg sum1;
reg [3:0] sum2;

3.运算符

3.1 位运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
~ :按位取反
a=1001 ~a=0110

& :按位与
a=1001 b=0001 a&b=0001

| :按位或
a=1001 b=0001 a|b=1001

^ :按位异或
a=1001 b=0001 a^b=1000

^~ :按位同或(异或非)
a=1001 b=0001 a^~b=0111

3.2 算术运算符(同C语言)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a=7,b=5;

+:加法运算
a+b==12;

-:减法运算
a-b==2;

*:乘法运算
a*b==35;

/:除法运算
a/b==1;

%:取余运算
a&b==2;

4.赋值语句

4.1 assign赋值

assign用于给线网(wire)类型变量赋值。

1
2
wire a,b;
assign a=7,b=5;
1
2
3
4
5
6
7
module add1(in1,in2,out);
input in1,in2;
output out;

assign out = in1 + in2;

endmodule

4.2 always赋值

always用于给寄存器(reg)类型变量赋值。

1
2
3
4
5
6
7
8
input a,b;
output x;

reg [1:0] sum;
always@(*)
begin
sum=a+b;
end

5.条件语句

5.1 if-else条件语句

1
2
3
4
5
6
7
8
9
10
if(表达式) 语句序列1;

if(表达式) 语句序列1;
else 语句序列2;

if(表达式1) 语句序列1;
else if(表达式2) 语句序列2;
else if(表达式3) 语句序列3;
...
else 语句序列n;

5.2 case条件语句

1
2
3
4
5
6
7
case(敏感表达式)
1:语句序列1;
2:语句序列2;
...
值n:语句序列n;
default:语句序列n+1;
endcase

6.循环语句

6.1 for语句

1
2
for(循环变量初始化;循环条件;修改循环变量)
执行语句序列;

6.2 forever语句

1
2
3
forever begin
执行语句序列;
end

6.3 repeat语句

1
2
3
repeat(循环次数表达式) begin
执行语句序列
end

6.4 while语句

1
2
3
while(循环条件) begin
语句序列
end

Verilog简易教程
https://blog.ijune.cn/posts/4111329731/
作者
LYOfficial
发布于
2025年3月26日
许可协议