2、Verilog语言之行为级建模

行为级建模

目录

行为级建模

    2.1、数据流描述

    2.2、结构化过程语句

(1)initial语句

(2)always语句

(3)时序控制

(4)过程赋值语句块

(5)顺序语句块与并行语句块

    2.3、条件语句

    2.4、分支语句

(1)case

(2)casex和casez

(3)使用注意

    2.5、循环语句

(1)repeat  循环执行语句或语句块确定的次数,目前不可综合,多用于验证代码。

(2)forever  无穷循环

(3)while  通过控制某个变量的取值来控制循环次数

(4)for  可以实现所有的循环结构(可综合)


    2.1、数据流描述

(在数字电路中,信号经过组合逻辑时类似信号的流动,信号从输入流向输出,不会再其中存储,且出入变化时,会在一定的时间后引起输出的变化)

连续赋值语句(使用assign关键字)

使用语法:

< assign > [strength][#delay] <net_name> = <expression>;

其中[strength][#delay]是可选项,<net_name>为定义的网线名,<expression>是赋值表达式。

注意:

  • 只有线网型变量才能在assign语句中被赋值;
  • 并行性
  • 连续赋值语句可以是显性或隐性
  • 表达式<expression>中可使用条件操作符或函数返回值
  • 定义延时(wire out; assign #5 out = in1 && in2;)
  • 定义线网变量强度

   

    2.2、结构化过程语句

(1)initial语句

initial语句在仿真一开始(0时刻)就立即开始执行,每个initial语句只执行一次。(initial语句常用于验证模块,是不可综合的)

  • “begin…end”中的语句是“串行”执行的;
  • “fork… jion”中的语句是“并行”执行的。

 

(2)always语句

Always语句从仿真0时刻开始顺序执行语句块中行为语句,执行完最后一条语句后,又开始执行该语句中的第一条语句,如此循环往复,直到整个仿真结束。(always语句往往只有和一定的时序(或事件)控制结合在一起才有用,即在整个仿真过程中,只要满足触发条件就可重复执行。)

注意:

  • 在always中被赋值的变量只能是寄存器型变量;
  • 没有加时序控制的always语句是没有意义的。

延时触发描述的always语句不可综合,即always #delay <描述语句>是不可综合描述,一般用在测试平台;而基于事件的时序(边沿触发、或电平触发)则是可综合描述。

 

(3)时序控制

Verilog提供了三种过程时序控制方法:简单延迟(“#”)、基于事件(“@”)的时序控制和等待语句(wait)

①简单延迟赋值用于initial或always语句块中,不可综合

基于延迟的时序控制一般用 # delay_time,非0延迟放于赋值语句的左边,即:

< # delay_time > LHS = RHS ;

或将其嵌入赋值语句之中,即:

LHS = < # delay_time > RHS ;

②基于事件的时序控制,其中的时间是指某个寄存器或线网型变量的值发生了变化,用来触发后面申明的语句或语句块的执行。基于事件的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值