借鉴bilibili:https://space.bilibili.com/2051721341/?spm_id_from=333.788.upinfo.detail.clickhttps://space.bilibili.com/2051721341/?spm_id_from=333.788.upinfo.detail.clickhttps://space.bilibili.com/2051721341/?spm_id_from=333.788.upinfo.detail.click
就像连接硬件电路,用 EDA 去画板子,FPGA 要用 Verilog 语言实现电路连接,用代码实现硬件电路搭建。
Verilog 基本单位:module;“,”隔开端口。
Verilog 语言:
module and_gate(
input a,
input b,
output c
);
assign c = a & b;
endmodule
and_gate:模块名
a,b,c:端口名
标识符规则:
以字母或下划线开头;
由字母、数字、下划线、$组成
区分大小写
禁止使用关键字(module、always)
wire表示物理连线,用assign驱动
=:阻塞赋值,主要用于组合逻辑
<=:非阻塞赋值,主要用于时序逻辑,也有用于组合逻辑
左高右低:wire [7:0] a;
reg [7:0] b; 8个寄存器的 第j个寄存器:b[j];
阻塞赋值与非阻塞赋值:
阻塞赋值逐条执行
非阻塞赋值同时进行
算术运算:
位运算符:
| 运算符 | 名称 | 作用 | 示例 |
|---|---|---|---|
& | 按位与 | 两位都为1才为1 | 5 & 3 = 1 |
| | 按位或 | 有一个为1就是1 | 5 | 3 = 7 |
^ | 按位异或 | 不同为1,相同为0 | 5 ^ 3 = 6 |
~ | 按位取反 | 0变1,1变0 | ~5 |
<< | 左移 | 整体向左移动 | 5 << 1 = 10 |
>> | 右移 | 整体向右移动 | 5 >> 1 = 2 |
组合逻辑与时序逻辑:
assign配合阻塞赋值,always配合非阻塞赋值;
possdge含义:上升沿变化
negedge含义:下降沿的变化
#(:定义式子
定义调用
#(
gebvar与generate需要一起:
generate...if