Verilog 入门 笔记3

数据类型

主要有两类:

  • 线网类(net类)
  • 变量类(variable类)

net:连续赋值目标(不需要分配内存)

variable:过程赋值

Net

主要是Wire

image-20260728201006524

Variable

主要是reg

image-20260728201025468


决定

  1. 连续赋值或门原语赋值:net型

    过程赋值:variable

  2. input和inout:net

    output可以是net,也可以是variable(取决于如何赋值)

image-20260728201140772

赋值方法

image-20260728201226361

  1. 连续赋值
1
2
assign d = a & b; 
assign c = d | c;

image-20260728201310588

image-20260728201315204

数字表示格式

无符号:

1
<位宽>' <进制><数字>

例:

image-20260728201418923

有符号:

1
<位宽>' <sb><数字>

image-20260728201509933

逻辑值

1:高电平

0:低电平

x:不确定

z:高组态

if语句

和其他语言没区别

例:

image-20260728201722493

保证条件完整:

image-20260728201740716

case语句

也差不多

1
2
3
4
5
case()
1:1;
2:;
default:abc;
endcase

语言描述分割

  • 结构化描述
  • 数据流级描述(全部assign)
  • 行为级描述(全部always,配合if、case)
  • RTL级(数据流级+行为级,可综合)

例(门级描述):

image-20260728204206224

上面这个例子非常好

数据流的描述是这样子的:

image-20260728204345017

多路选择器描述:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module mux4_to_1(out, i0, i1, i2, i3, s1, s0); 
output out;
input i0, i1, i2, i3;
input s1, s0;
reg out;
always @(s1 or s0 or i0 or i1 or i2 or i3)
begin
case ({s1, s0})
2'b00: out = i0;
2'b01: out = i1;
2'b10: out = i2;
2'b11: out = i3;
default: out = 1'bx;
endcase
end
endmodule

其他规定

文件拓展名.v