学习目标

  • 掌握 Verilog 基本语法
  • 理解硬件描述语言
  • 学会编写简单模块

4.1 思考:Verilog 是编程语言吗?

不完全是!Verilog 是硬件描述语言(HDL)。

C 语言:

int a = b + c;  // 顺序执行

Verilog:

assign a = b + c;  // 并行执行!

关键区别:硬件是并行的!

4.2 模块定义

module adder(
    input  [31:0] a,
    input  [31:0] b,
    output [31:0] sum
);
    assign sum = a + b;
endmodule

问题:为什么用 [31:0] 而不是 int?

因为硬件需要明确位宽!

4.3 两种赋值

// 组合逻辑:assign
assign y = a & b;

// 时序逻辑:always
always @(posedge clk) begin
    q <= d;
end

问题:= 和 <= 有什么区别?

  • =:阻塞赋值(立即)
  • <=:非阻塞赋值(时钟沿)

下一步

第 5 章:模块与层次化设计

更新时间: