Verilog HDL常用的行为仿真描述语句

一、循环语句

1、forever语句

forever语句必须写在initial模块中,主要用于产生周期性波形。

2、利用for、while循环语句完成遍历

for、while语句常用于完成遍历测试。当设计代码包含了多个工作模式,那么就需要对各个模式都进行遍历测试。其典型的应用模板如下:

[c-sharp] view plaincopy

  1. parameter mode_num = 5;
  2. initial begin
  3. // 各种不同模式的参数配置部分
  4. for(i=0; i<mode_num-1; i=i+1) begin
  5. case (i)
  6. 0: begin
  7. .
  8. .
  9. end
  10. 1: begin
  11. .
  12. .
  13. end
  14. .
  15. .
  16. endcase
  17. end
  18. // 各种模式共同的测试参数
  19. .
  20. .
  21. end

3、利用repeat语句来实现有次数控制的事件,其典型示例如下:

[c-sharp] view plaincopy

  1. initial begin
  2. // 初始化
  3. in_data = 0;
  4. wr = 0;
  5. // 利用repeat语句将下面的代码执行10次
  6. repeat(10) begin
  7. wr = 1;
  8. in_data = in_data + 1;
  9. #10;
  10. wr = 0;
  11. #200;
  12. end
  13. end

4、用disable实现循环语句的异常处理,其典型示例如下:

[c-sharp] view plaincopy

  1. begin : one_branch
  2. for(i=0; i<n; i=i+1) begin : two_branch
  3. if (a==0)
  4. disable one_branch;
  5. if (a==b)
  6. disable two_branch;
  7. end
  8. end

二、force和release语句

force/release语句用来跨越进程对一个寄存器或一个电路网络进行赋值。

force语句可为寄存器类型和线网类型变量强制赋值。

当应用于寄存器变量时,寄存器当前值被force覆盖;当release语句应用于寄存器变量时,寄存器当前值将保持不变,知道重新赋值。

当force语句应用于线网变量时,数值立即被force覆盖;当release语句应用于线网变量时,线网数值立即恢复到原来的驱动值。

三、wait语句

wait语句是一种不可综合的电平触发事件控制语句,有如下两种形式:

    1. wait(条件表达式) 语句/语句块;
    2. wait(条件表达式);

对于第一种形式,语句块可以是串行块(begin…end)或并行块(fork…join)。当逻辑表达式为“真”时,语句块立即得到执行;否则,暂停进程并等待,直到逻辑表达式变为“真”,再开始执行。

对于第二种形式,当仿真执行到wait语句时,如果条件表达式为真,那么立即结束该语句的执行,仿真程序继续往下执行;否则,仿真程序进入等待状态,直到条件表达式为真。

四、事件控制语句

在仿真程序中,可以通过“@(事件表达式)”来完成单次事件的触发。分电平触发和信号跳变沿(posedge上升沿和negedge下降沿)触发两大类。

五、task和function语句

task语句和function语句可以将固定操作封装起来,配合延时控制语句,可精确模拟大多数常用的功能模块。

例:

[c-sharp] view plaincopy

  1. ‘timescale 1ns / 1ps
  2. module tb_tri;
  3. parameter bsize = 8;
  4. parameter clk_period = 2;
  5. parameter cac_delay = 6;
  6. reg [(bsize-1):0] din;
  7. reg [(3*bsize-1):0] dout;
  8. // 定义完成3次方运算的task
  9. task tri_demo;
  10. input [(bsize-1):0] din;
  11. output [(3*bsize-1):0] dout;
  12. #cac_delay dout = din*din*din;
  13. endtask
  14. // 在串行语句块中调用task
  15. initial begin
  16. din = 0;
  17. end
  18. always #clk_period begin
  19. din = din + 10;
  20. // 任务调用语句
  21. tri_demo(din, dout);
  22. end
  23. endmodule

六、串行激励与并行激励语句

begin…end语句用于启动串行激励,fork…join语句用于启动并行激励。

fork…join语句语法格式如下:

fork : <>

时间控制1 行为语句1;

时间控制n 行为语句n;

join

其中,fork…join块内被赋值的语句必须为寄存器型变量。其主要特点如下:

  1. 并行块内语句是同时开始执行的。
  2. 并行块语句中指定的延时控制都是相对于程序流程进入并行块时刻的延时。
  3. 当并行块中所有语句都执行完之后,仿真程序才跳出并行块。整个并行块的执行时间等于块中执行时间最长的那条语句的执行时间。
  4. 并行块和串行块可以混合嵌套使用。
时间: 2024-10-28 21:24:30

Verilog HDL常用的行为仿真描述语句的相关文章

Verilog HDL的程序结构及其描述

这篇博文是写给要入门Verilog HDL及其初学者的,也算是我对Verilog  HDL学习的一个总结,主要是Verilog HDL的程序结构及其描述,如果有错,欢迎评论指出. 一.Verilog HDL的程序结构 首先我们不开始讲Verilog HDL的语法,我们从Verilog HDL的程序结构出发.相信大家都看过芯片吧,它有个名字,有个外壳,外壳向外伸出有引脚(BGA封装的那种请不要乱搅和...),然后芯片它可以实现一定的功能. Ok,知道这些之后,我们就来看看Verilog HDL的描

Verilog HDL常用综合语法

前面已经记录了一些组成Verilog的基本组成,可以用这些基本组成来构成表达式.这一节,就来记录一下把这些表达式构成一个文件的各种行为描述语句. ①这里用Verilog基本要素进行的行为描述主要是针对综合来的,也就是可以设计出实际电路来的(行为描述语句有两大子集,一个是面向综合,一个是面向仿真).②行为描述语句一般指放在always语句中.内容提纲如下所示: ·触发事件控制 ·条件语句(if与case语句) ·循环语句 ·任务和函数 ·编译预处理 一.触发事件控制 ①电平敏感事件是指 指定信号的

FPGA编程基础(二)--常用行为仿真描述

1.常用的行为仿真描述语句 利用循环完成遍历 for.while语句常用于完成遍历测试.当设计代码包含了多个工作模式,那么就需要对各种模式都机型遍历测试,如果手动完成每种模式的测试,则将造成非常大的工作量.利用for循环,通过循环下标来传递各种模式的配置,不仅可以有效减少工作量,还能保证验证的完备性,不会漏掉任何一种模式. (1) for循环仿真 可综合文件: module signedMul( input clk, input rstn, input [7:0] a, input [7:0]

Sublime Text 2 和 Verilog HDL

Sublime Text 2 和 Verilog HDL Date  Fri 04 July 2014 Tags Sublime Text / Vivado Sublime Text 代码编辑器之于程序员,就如同剑之于战士.程序员关于代码编辑器的争论从来就没有停止过,每个程序员都有自己熟悉的编辑器,他们热爱自己的 "武器",甚至可以形成 "宗教",比如 Vim 和 Emac 的战争. 如今,这个无休止的争论中要加入一个新成员了,她就是 Sublime Text .其

自己动手写处理器之第二阶段(3)——Verilog HDL行为语句

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第七篇,我尽量每周四篇 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包括有过程语句,过程语句有两种:initial.always.其中initial常用于仿真中的初始化,其中的语句只执行一次,而always中语句则是不断重复执行的.此外,always过程语句是可综合的,initial过程语句是不可综合的.       1.always过程语句 always过程语句的格式如图2-10所示.

基于Verilog HDL整数乘法器设计与仿真验证

基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为0表示为正数),取值范围为-127~127. 负数的表示方法为正值的求反又加1.例如: 8’b0000_0100; //表示值:4,正值求反为:8’b1111_1011:再加1表示为:8’b1111_1100,这样便得到了-4的表示方法为:8’b1111_1100. 同理,负值变成正值的方法为:负值

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

Verilog HDL设计进阶:有限状态机的设计原理及其代码风格_zt

http://www.21ic.com/app/eda/201308/189781_1.htm 由于Verilog HDL和 VHDL 行为描述用于综合的历史还只有短短的几年,可综合风格的Verilog HDL 和VHDL的语法只是它们各自语言的一个子集.又由于HDL的可综合性研究近年来非常活跃,可综合子集的国际标准目前尚未最后形成,因此各厂商的综合器所支持的HDL子集也略有所不同. 本书中有关可综合风格的Verilog HDL的内容,我们只着重介绍RTL级.算法级和门级逻辑结构的描述,而系统级

自己动手写处理器之第二阶段(2)——Verilog HDL简介

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第六篇,我尽量每周四篇 2.3 Verilog HDL简介 本书实现的OpenMIPS处理器是使用Verilog HDL编写的,所以本章接下来的几节将介绍Verilog HDL的一些基本知识,包括语法.结构等.因为本书并不是一本讲授Verilog HDL的专门书籍,所以此处介绍的内容并不是Verilog HDL的全部,只是一些基础知识,以及在OpenMIPS处理器实现过程中会使用到的知识.读者如果对Verilog HDL有进一步了解