【计算机系统设计】Verilog语法概览
基操
-
标识符区分大小写,逻辑值不区分
-
首字符必须为字母/下划线
1. 模块
Module
有I/O功能的黑盒
2.逻辑块
always
-
构建 组合 and 时序 逻辑块:if, case, for...
-
always @(...)
begin
……
end -
上升沿posedge
-
下降沿negedge
generate
-
主要结合for:
-
对向量多个位重复操作
-
对同一模块多次重复实例化
initial
-
初始化
-
不可综合,不出现在RTL代码中
-
除了仿真,没太多用途
3.赋值方式
assign
-
连续
-
两信号间真实的物理连接
-
不可在always块中使用
=
-
阻塞赋值
-
always中使用
-
顺序执行
<=
-
非阻塞赋值
-
always中使用
-
并行执行
基础语法
1.逻辑值与逻辑运算
逻辑值
-
0
-
1
-
x:未知状态
-
z:高阻状态
(x/z不区分大小写
逻辑运算
-
逻辑运算符:&&、== 、|、!=
-
按位运算符:&、|、、~、^、
-
归约运算符:&、|、、~、^、
2.常量
-
十进制整数
-
基数法
-
32 ' b(可每四位一下划线,增添可读性
-
32 ' o
-
32 '
-
32 ' h
-
32位,二/八/十/十六进制
-
-
字符串:“ ”
3.注释
-
//:行注释
-
/* */:块注释
-
同CPP
4.变量
wire
线网型:
-
电路间的物理连接
-
其定义的变量可看作信号端口
-
两wire被assign(连续赋值)时,在逻辑块中会被映射成真实的物理连线
-
assign b = a ;
reg
寄存器型:
-
抽象的数据存储单元
-
对某一时间点状态进行保持
-
always、initial中左值均为reg
-
仅assign中左值为wire
5.向量
//格式:
input/output wire/reg [upper:lower] vector_name
//输入输出型
input [7:0] a,b,
output reg [7:0] out
// 模块中间向量
wire [7:0] c, e;
reg [7:0] d;
6.分支语句
if-else:
-
if
-
else if
-
else
case:
-
case
-
... :
-
default :
-
endcase
模块中的参数传递
定义可传递参数的模块:
module counter
// 参数传递
#(
parameter COUNT_MAX = 25'd24_999_999,
parameter STATE = 1'b0 // 多个参数用逗号隔开
)
(
input wire sys_clk,
output reg led_out
);
// 代码主体
endmodule
带参数模块的实例化:
// 参数传递
#(
.COUNT_NUM( 25'd24_999_999), // 传入参数
.STATE(1'b0)
)
counter1_init // 实例化模块的名称位置
(
.sys_clk (sys_clk),
.led_out(led_out)
);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人