2.2行为级建模

本文深入介绍了Verilog HDL编程中的各种语句和过程,包括initial、always语句块的使用,串行与并行语句块的区别,过程赋值语句的阻塞与非阻塞特性,以及条件分支语句和循环语句的运用。此外,还阐述了综合的概念,从行为描述到硬件实现的转换过程。
摘要由CSDN通过智能技术生成

类别语句可综合性
过程语句initialX
always
语句块串行语句块begin-endX
并行语句块fork-joinX
赋值语句连续赋值assign
过程赋值=、<=
条件语句if-else
case,casez,casex
循环语句foreverX
repeatX
whileX
for

2.2.1 过程语句

1.initial语句

语法格式:

 initial
     begin
         语句1;
         语句2;
         ...
         语句n;
     end

initial为断电触发模式,对应reset复位触发模式,可能造成不良后果,不常用。

作用为:

  1. 仿真测试

  2. 初始化

2. always语句块

always语句块的触发状态是一直存在的,只要满足always后面的敏感事件列表,就执行语句块

语法格式:

 always@(<敏感事件列表>)
     语句块;
     //例
 @(a)//当信号a的值发生改变
 @(a or b)  = @(a,b)//当信号a或b的值发生改变
 @(posedge clock)//当clock上升沿到来时
 @(negedge clock)//当clock下降沿到来时
 @(posedge clock or negedge reset)//当clock上升沿到来或reset下降沿到来时

3.过程语句使用中需要注意的问题

  1. 信号定义形式,无论是时序逻辑电路还是组合逻辑电路,Verilog要求在过程语句(initial和always)中,被赋值信号定义为reg类型

  2. 敏感事件列表方面。(1)对组合电路进行描述时,全部的输入信号需要列入敏感信号列表。(2)对时序电路进行描述时,把时间信号和部分输入信号列入敏感信号列表。不同的敏感事件列表会产生不同的电路形式。

2.2.2 语句块

1.串行语句块

语句按照串行方式顺序执行,可以用于可综合电路程序和仿真测试程序。

 begin:块名
     块内声明语句;
     语句1;
     语句2;
     ...
     语句n;
 end
  1. 串行语句块中每条语句依据块中排列次序,先后逐条顺序执行。块中每条语句给出的延时都是相对于前一条语句执行结束的相对时间。

  2. 串行语句块的起始执行时间就是串行语句块中第一条语句开始执行的时间。结束时间是块中最后一条语句执行结束的时间。

2.并行语句块

只能用于仿真测试程序,不能用于可综合电路程序。

 fork:块名
     块内声明语句;
     语句1;
     语句2;
     ...
     语句n;
 join
  1. 块内语句是同时执行的。

  2. 块内每条语句的延迟时间是相对于程序流程控制进入到块内的仿真时间。

语句块串行语句块(begin-end)并行语句块(fork-join)
执行顺序按照语句顺序执行同一时刻执行
语句前面延时的意义相对于前一条语句执行结束的相对时间相对于并行语句块启动时的时间
起始时间首句开始执行的时间转入并行语句块的时间
结束时间最后一条语句执行结束时的时间执行时间最长的那条语句执行结束时的时间
行为描述的意义电路中数据在时钟及控制信号作用下,沿数据通道的各级寄存器之间的传送过程电路上电后,各电路模块同时开始工作的过程

2.2.3过程赋值语句

1.阻塞性过程赋值语句

变量 = 表达式;

例:a = b;

  1. 在串行语句块中,阻塞赋值语句按照先后排列顺序依次执行;并行语句块中,阻塞赋值语句同时执行,没有先后顺序之分。

  2. 阻塞赋值语句的顺序,先计算等号右端表达式的值,然后立刻将计算的值赋给左边的变量,与仿真时间无关。

2.非阻塞性过程赋值语句

变量 <= 表达式;

b <= a;

  1. 串行语句块中,各条非阻塞赋值语句执行过程没有先后顺序之分,各条语句并行执行

  2. 执行非阻塞赋值语句的顺序是,先计算右端表达式的值,然后等到延时时间结束时,将计算的值赋给左边的变量。

2.2.4过程连续赋值语句(不可综合语言)

1.赋值、重新赋值语句(assign,deassign)

 assign<寄存器型变量>=<赋值表达式>;
 ​
 deassign<寄存器型变量>;

作用:临时获得一个具有优先级的数据

2.强制、释放语句(force,release)

 force<寄存器型变量>=<赋值表达式>;
 ​
 release<寄存器型变量>;

优先级高于assign-deassign

在大量代码测试时,需要临时改变信号量时使用

2.2.5 条件分支语句

1. if 条件语句

 形式1:if(条件表达式)语句块;
 形式2:if(条件表达式)
         语句块1;
     else
         语句块2;
 形式3:if(条件表达式1)
         语句块1;
     else if(条件表达式2)
         语句块2;
         ...
     else if(条件表达式i)
         语句块i;
     else
         语句块n;
 形式4:if(条件表达式1)
     if(条件表达式2)//内嵌if语句
             语句块1;
             else
             语句块2;
         else

物理意义:生成2选1数据选择器

2.case条件分支语句

case语句是一种可实现多路分支选择控制的语句,多用于多条件译码电路设计

 case(控制表达式)
     值1:语句块1
     值2:语句块2
     ...
     值n:语句块n
     defalt:语句块n+1
 endcase
case01xz
01000
10100
x0010
z0001
casez01xz
01001
10101
x0011
z1111
casex01xz
01011
10111
x1111
z1111
  1. 值1到值n之间必须各不相同,一旦判断到与某值相同并执行语句块后,case语句的执行便结束。

  2. 如果某几个连续排列的值执行的是同一条语句,这几个值之间用逗号隔开,将语句放在这几个值最后一个中。

  3. 若已经列出敏感表达式所有可能值,default可以省略

  4. case语句所有表达式的值位宽必须相等,这样控制表达式和分支表达式才可能进行对应位的比较

  5. 使用case语句时,应包含所有状态,如果没有包含完整,必须写缺省项,否则将会产生锁存器(latch),在同步时序电路中不允许存在。

2.2.6循环语句

1. forever循环语句

永久循环,遇到系统任务$finish为止,或者使用disable语句

forever 语句或语句块;

2. repeat循环语句

执行固定次数的循环

repeat(循环次数表达式)
    语句或语句块(循环体);

3.while循环语句

条件循环

while(条件表达式) 语句或语句块;

4. for循环语句

条件循环

for(循环变量赋初值;循环结束条件;循环变量增值)语句块;

循环语句暂时不要再可综合语句中使用

2.2.7综合的概念

表述:用行为和功能层次表达的电子系统转换为低层次的、便于具体实现的模块组合装配的过程。

  1. 自然语言转换到verilog语言算法表述,即自然语言综合。

  2. 算法表述转换到寄存器传输级(Register Transport Level,RTL)表述,即从行为域到结构域的综合,也称行为综合

  3. 从RTL级表述综合转换到逻辑门表述,即逻辑综合。

  4. 从逻辑门表述转换到版图级表述,或转换到FPGA的配置网表文件,称为版图综合或者结构综合。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值