FPGA学习笔记:面向验证和仿真的行为描述语句(1)

面向验证和仿真的行为描述语句:
1、延时控制语句
(1)语法格式:#<延迟时间> 行为语句 OR #<延迟时间>
其中“#”是延时控制的关键字符,“<延迟时间>”以多个仿真时间单位的形式给出。
使用编译指令将时间单位与物理时间相关联,编译指令需要在模块描述前定义:timescale 1ns /100ps(延迟时间为1ns,时间精度为0.1ns)
(2)实际的仿真中,延时控制语句可以出现在任何赋值语句中,主要有三类:
#<延迟时间常量> 行为语句
仿真进程遇到这条语句后,并不会立即执行行为语句制定的操作,而是要等到<延迟时间值>所指定的时间过去后,才开始执行行为语句的操作。比如:

'timescale 1ns /1ps
module delay_demo1(q0_out,q1_out,q2_out);
output [7:0] q0_out,q1_out,q2_out;
reg [7:0] q0_out,q1_out,q2_out;
initial
   begin
      q0_out=0;    
      //循环体
      repeat(100)
         begin
             #5 q0_out=1;//延迟语句1
             #5 q0_out=2;//延迟语句2
         end
   end
initial
   fork
       //循环体2
       repeat(100)
         begin
            # 5 q1_out=3;//延迟语句3
            # 5 q1_out=4;//延迟语句4
         end
       //循环体3
       repeat(100)
         begin
            # 5 q2_out=5;//延迟语句5
            # 5 q2_out=6;//延迟语句6
         end
   join
endmodule     

注:三个循环体同时并行执行。
#<延迟时间常量> 行为语句
仿真进程遇到该语句后,也不进行任何操作,而是进入等待状态,等过了延迟时间后,再继续执行后续语句。并行fork…join语句块和串行begin…end语句块进入仿真等待状态的影响是不同的,因此各自产生的作用也不同。比如:

'timescale 1ns/1ps
module delay_demo2(q0_out,q1_out);
output [7:0] q0_out,q1_out;
reg [7:0] q0_out,q1_out;
initial
   begin
      q0_out=0;  
      #100 q0_out=1;
      #100;
      #100 q0_out=10;
      #300 q0_out=20;
   end
initial
   fork
      q1_out=0;
      #100 q1_out=1;
      #100;
      #200 q1_out=10;
      #300 q1_out=20;
   join
endmodule 

注:注意串/并行执行的区别。
#<延迟表达式> 行为语句
延迟时间是一个变量或者表达式,极大地增强了仿真程序的可移植性。如果对应的值出现负值或者“x”、“z”等,将其按照0来处理。比如:

'timescale 1ns/1ps
module delay_demo3(q0_out,q1_out);
output [7:0] q0_out,q1_out;
reg [7:0] q0_out,q1_out;
parameter delay_time=100;
initial
   begin
      q0_out=0;
      #delay_time q0_out=1;
      #(delay_time/2);
      #(delay_time*2) q0_out=10;
      #300 q0_out=20;
   end
initial
   begin
      q1_out=0;
      #100;
      #(delay_time-5'bxxxxx) q1_out=1;
      #100;
      #100 q1_out=10;
      #50;
      #(delay_time-200) q1_out=20;
   end
endmodule

注:仿真验证通过ModelSim仿真工具。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值