Verilog 语句

可综合语句

Module ... endmodule

Module(clk,a,b,c,d);

    input clk;
    input [2:0] a,b;
    output b;
    inout e;

endmodule
  1. module 括号声明所有输入和输出信号。不要忘记 ;
  2. 模块里要声明所有输入和输出:
    • input [2:0] a; 表示端口 a 是 2bit 的 wire 型
    • output b 表示 1bit 的 wire 型
    • inout 是双向端口

parameter

parameter 声明常量。eg,parameter a = 3'b101;

wire, reg

  • inputoutput 只能是 wire型 。
  • inout 可以是 wire 也可以是 reg 型。

reg 是寄存器,定义的信号通常会综合成一个寄存器。 wire`则是两个 reg 之间的连线。

wire 型赋值有:

  1. wire a; 定义一个 wire 信号
  2. wire b = c; 给 b 连续赋值
  3. wire b = 2'b11; 赋值给 b 一个多bit的 wire 信号
  4. wire [3:0] c; 定义一个 4bit 的 wire 信号

reg 型赋值有:

  1. reg a; 定义一个 reg 信号
  2. reg b = 2'b01; 定义 b 并赋初值
  3. reg [3:0] c; 定义一个 4bit 的 reg 信号。可以赋初值, reg [3:0] c = 4'b0110;
  4. 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 上升沿/下降沿,电平信号触发,可以是多个条件,用 andor

()?():()

用的很多。

判断条件 : 判断为真执行此语句 : 判断为加执行此语句

function ... endfunction

  • 不能包含有时间控制语句,# @ wait 等。

  • 函数定义只能在模块( module )中,不能在过程块( always initial )中

  • 函数中不能出现过程块语句

  • 函数内部可以调用函数,不能调用任务

  1. 函数的定义
founction [3:0] fc; //函数返回值位宽不指定时为1, fc 是函数名

input [3:0] A, B;   //定义输入变量,指定位宽和类型。至少要有一个输入端。可以是双向端口

reg S, Cout;    //用到了 S 和 Cout 寄存器变量

begin
    //函数体
end

endfounction
  1. 函数的调用

fc(A, B)

函数名(输入端口) 调用的参数只有输入端口

task ... endtask

  • 任务可以调佣任务(包括本身),也可以调用函数

  • 可以包含时间语句,比如用定时,repeat(8) @(posedge clock); 等待8个上升沿

  • 可以没有输入,输出等端口,与函数不同(至少一个输入端口)

  • 内部不能有过程块(always initial)

  1. 任务的定义
task t0;
input a, b;
inout c;
output d, e;

begin
执行语句;
end

endtask
  1. 任务的调用

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
  1. a 取初值
  2. 判断 a>10 ,逻辑为 1 执行下方语句
  3. 再执行 a=a+1 ,判断是否执行,不断循环。

generate

repeat

repeat(循环次数) 执行语句; 或者 repeat(判断语句) begin ... end

循环次数可以是常量、变量、表达式。

while

while(表达式) begin ... end

表达式成立则执行循环语句

不可综合语句

initial

forever

forever 语句; 或者 forever begin ... end 常用来产生周期性波形。必须写在 initial 块中

fork

time

wait

delays

posted @ 2023-03-02 22:27  accumulagain  阅读(349)  评论(0)    收藏  举报