Verilog 基本语句

Verilog HDL语句包括过程语句、块语句、赋值语句、条件语句、循环语句、编译导向语句等。

类别								语句
赋值语句						持续赋值语句:assign
							过程赋值:=,<=
块语句						串行块:begun-end
							并行块:fork-join
过程语句						initial
							always
条件语句						if-else
							case,casez,casex
循环语句						for 
							repeat
							while
							forever
1.连续语句赋值:
用于对线网进行赋值,等价于门级描述。具有以下特点:
	左值必须为一个线网类型的变量或向量,不能是寄存器类型。
	输出值随输入值变化而随时变化。
	操作数可以是线网或寄存器或函数调用。
	必须用“=”阻塞赋值进行赋值。

格式:    
	普通连续赋值:wire OUT;assign OUT=INT1 & INT2;
	缺省连续赋值(在线网声明的同时对其赋值): wire OUT=INT1 & INT2;
	缺省线网声明:信号名被用在连续赋值左侧,则该信号默认为一个缺省声明的线网类型变量:wire INT1;assign OUT=INT1 ;//则OUT默认为线网类型;
  	线网被连接在模块端口,则缺省线网宽度为模块端口的宽度。     
2.单元块语句
①顺序块begin-end:
格式:
  begin:块名     //块名可缺省
    语句1;
    语句2;
      ....
    语句N;
  end
②并行块fork-join:
格式:
  fork:块名     //块名可缺省
    语句1;
    语句2;
      ....
    语句N;
  join
  注意:如果两条语句在同一时刻对同一变量产生影响,则可能出现隐含的竞争。

3.条件语句
①if-else语句
  1)系统对逻辑表达式的值进行判断,若为0,x,z,按“假”处理;若为1,按“真”处理;
  2)ifelse语句中可嵌套多个操作语句;
  3)if-else语句具有优先级,前面的优先级最高。
②case语句
 1)case语句
  case(表达式)
  数值1:
    语句1;
  ....
  数值n:
    语句n;
  default:
    语句n+1;
  endcase
  case语句没有优先级,即case语句的每个分支都是并行的,与位置无关。
  case语句的所有表达式的值的位宽必须相等。
 2)casez与casex语句
	使用条件语句时,为了使程序具有更好的可读性和可维护性,应遵循以下几点要求:
①if-else语句的级联不要超过3层。
②case的级联不要超过2层。
③if语句必须要有elsecase语句必须要有default,否则将产生不必要的锁存器;设计中禁用casez/casex。不能使用casez/casex语句,不是说他们没用,当在仿真实验中,这些是可用的。

4.循环语句
四种循环语句:forever、repeat、whilefor
1)forever语句
  forever语句 是连续的执行语句,格式如下:
    forever
    语句;
  或
    forever
    begin
    多条语句;
    end
  forever语句常用于产生周期性的波形,作为仿真控制信号。forever语句不能独立写在程序中,必须写在initial中。
  forever用来表示永久循环,在永久循环中不包含任何条件表达式,等价于永远为真的while循环,如while1)。如果要从forever循环中退出,可以使用disable语句。
2)repeat语句
  repeat语句可以连续执行一条语句n次,主要特点是可以执行固定次数的循环,其使用格式如下所示:
    repeat(循环次数表达式)
      语句;
  或
    repeat(循环次数表达式)
    begin
      多条语句;
    end
3while语句
  使用格式:
    while(循环执行条件表达式)
      语句;
  或
    while(循环条件表达式)
    begin
      多条语句;
    end
 4for语句
  使用格式:
    for(表示式1;表达式2;表达式3)
    
5.过程语句
过程语句有两种:initial和always
  initial语句常用于仿真中的初始化,initial过程块中的语句仅执行一次;always语句则是不断重复执行的。
  每一条initial语句和always语句都是独立的执行过程,彼此并行执行,执行顺序于在模块内的书写顺序无关,并且,每条initial和always语句过程语句都是在仿真时间0时刻同时开始的。
  initial语句和always语句不可嵌套使用。
1)always语句
  格式如下:
    always @(敏感信号表达式)
    begin
      语句1;
      .....
      语句n;
    end
  敏感信号表达式中应列出影响块内取值的所有信号,多个敏感信号用关键字“or”连接。
  敏感信号可以分为两种类型:电平敏感型、边沿敏感型。边沿敏感主要用来描述组合逻辑电路,而边沿敏感主要用来描述时序逻辑电路。
  每一个always过程最好只有一个类型的敏感信号触发。
    always@(A or B)或always@(posedge CLK or negedge RST_B)//表示时钟的上升沿或者复位的下降沿。
  对于电平敏感型,可用“*”代替所有的输入或条件信号,如:

2)initial语句
  只执行一次,不带触发条件,常用于仿真中的初始化,是面向模拟仿真中的语句,不被逻辑综合工具支持。
    initial 
      语句1;
      .......
      语句n;
    end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值