基础知识
基础知识
逻辑值
-
0
-
1
-
X 未知电平
-
Z 高阻抗
数字进制格式
-
二进制 4’b0101
-
十进制 4’d2
-
十六进制 4’ha
前面的位宽是二进制位宽,若不加前面位宽,默认是32位
若不写进制,默认是10进制
标识符
模块名、端口名、信号名
数据类型
寄存器类型
reg [31:0] delay_cnt
reg类型数据只能在always和initial语句中被赋值,若未赋值,则为X
如果该语句为时序逻辑,即always语句中有时钟信号,该寄存器变量对应为触发器
如果该语句为组合逻辑,即always语句中无时钟信号,该寄存器变量对应为硬件连线
线网类型
线网类型数据不能存储值,他的值由驱动他的元件决定,若没有驱动元件,则其为Z
-
wire
wire key_flag
-
tri
参数类型
参数类型类似于C的define
- parameter
parameter H_SYNC = 11’d41
运算符
运算值后面再学一遍
条件运算法 ?:
a?b:c
result = (a>b)? a:b;
Verilog程序框架
verilog的基本单元是模块
一个模块由“接口”和“功能”组成
模块的编写:
接口包括:
端口定义、IO说明
功能包括:
参数定义(局部变量)、主要功能
其中,主要功能有always和assign两种,还能够例化实例元件
-
always 是时序逻辑+组合逻辑
-
assign 是组合逻辑
module flow_led(a,b,c,d); //端口定义 a,b,c,d默认是wire类型
input a,b; //IO说明
output c,d;
//功能定义
assign c = a | b; //assign 给 wire 变量复制
assign d = a & b;
endmodule
module flow_led(
input sys_clk, //默认是wire
input sys_rst_n,
output reg [1:0] led //使用寄存器类型要单独说明
); // 该种端口定义方法将端口定义和IO说明放在一起了
//信号定义
reg [26:0] cnt;
//功能定义
always
end
always
end
endmodule
模块的调用
模块的调用再学一下https://www.bilibili.com/video/BV1TJ411R7YY?p=12&spm_id_from=pageDriver