Verilog 语句
可综合语句
Module ... endmodule
Module(clk,a,b,c,d); input clk; input [2:0] a,b; output b; inout e; endmodule
module
括号声明所有输入和输出信号。不要忘记;
- 模块里要声明所有输入和输出:
input [2:0] a;
表示端口 a 是 2bit 的 wire 型output b
表示 1bit 的 wire 型inout
是双向端口
parameter
parameter
声明常量。eg,parameter a = 3'b101;
wire
, reg
input
和output
只能是 wire型 。inout
可以是 wire 也可以是 reg 型。
reg 是寄存器,定义的信号通常会综合成一个寄存器。 wire`则是两个 reg 之间的连线。
wire
型赋值有:
wire a;
定义一个 wire 信号wire b = c;
给 b 连续赋值wire b = 2'b11;
赋值给 b 一个多bit的 wire 信号wire [3:0] c;
定义一个 4bit 的 wire 信号
reg
型赋值有:
reg a;
定义一个 reg 信号reg b = 2'b01;
定义 b 并赋初值reg [3:0] c;
定义一个 4bit 的 reg 信号。可以赋初值,reg [3:0] c = 4'b0110;
reg [3:0] d [2:0]
定义一个二维的,3 个 4bit 的reg 信号。
assign
asssign a = b;
连接 a 和 b 信号,或者给 a 赋值
begin ... end
多语句定义,顺序块
begin:a1 //块名 end
begin end
always
always@(*) begin ... end
只要条件满足,循环执行。
敏感表取 posedge
/negedge
上升沿/下降沿,电平信号触发,可以是多个条件,用 and
和 or
()?():()
用的很多。
判断条件 : 判断为真执行此语句 : 判断为加执行此语句
function ... endfunction
-
不能包含有时间控制语句,
#
@
wait
等。 -
函数定义只能在模块(
module
)中,不能在过程块(always
initial
)中 -
函数中不能出现过程块语句
-
函数内部可以调用函数,不能调用任务
- 函数的定义
founction [3:0] fc; //函数返回值位宽不指定时为1, fc 是函数名 input [3:0] A, B; //定义输入变量,指定位宽和类型。至少要有一个输入端。可以是双向端口 reg S, Cout; //用到了 S 和 Cout 寄存器变量 begin //函数体 end endfounction
- 函数的调用
fc(A, B)
函数名(输入端口)
调用的参数只有输入端口
task ... endtask
-
任务可以调佣任务(包括本身),也可以调用函数
-
可以包含时间语句,比如用定时,
repeat(8) @(posedge clock);
等待8个上升沿 -
可以没有输入,输出等端口,与函数不同(至少一个输入端口)
-
内部不能有过程块(
always
initial
)
- 任务的定义
task t0; input a, b; inout c; output d, e; begin 执行语句; end endtask
- 任务的调用
task t0(输入端口, 输出端口, 双向端口)
与上述顺序一致
define
`define NUM 3'd5
定义常量,注意没有分号
if ... else
if(判断语句1) //分支1 else if(判断语句2) //分支2 else(判断语句3) //分支3 begin //多语句 end
case ... endcase
case(a) //a 是要判断的变量 3'b000 :执行语句1; 取值2 :执行语句2; 取值3, 取值4 :执行语句3; defualt:无上执行此语句; endcase
for
for(a=16'b01; a<10; a = a+1) begin end
- a 取初值
- 判断
a>10
,逻辑为 1 执行下方语句 - 再执行
a=a+1
,判断是否执行,不断循环。
generate
repeat
repeat(循环次数) 执行语句;
或者 repeat(判断语句) begin ... end
循环次数可以是常量、变量、表达式。
while
while(表达式) begin ... end
表达式成立则执行循环语句
不可综合语句
initial
forever
forever 语句;
或者 forever begin ... end
常用来产生周期性波形。必须写在 initial
块中。
fork
time
wait
delays
本文作者:accumulagain
本文链接:https://www.cnblogs.com/accumulagain/p/17173825.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通