可综合语句
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
块中。