数字系统设计实验五:verilog的延时仿真

1.问题描述:
如下图所示电路,若其延迟时间设定如表所示,试写Verilog HDL程序设计该电路。
在这里插入图片描述
在这里插入图片描述

2.问题分析:
本题希望进行的是基于门延时的verilog仿真,在代码中定义的延时是无法通过综合编译为实际电路的,即无法综合,但实际的电路中总是会存在延时,这对我们进行仿真后,门级网表的功能能否正常实现存在着一定的影响,因此,在仿真中加入延时信息,可以帮助我们使仿真更接近实际电路。
在这题中,我们可以通过specify块来定义从a,b,c到y分别的延时,但是,s->y有两个通路,即有两个延时,在specify中无法实现两条通路的延时。针对这个问题,可以将s分为s和s0两个输入,由数据比较可知,s经过的反相器的延时为4(固定值),只用通过固定的反相器延时将s转变为~s即可。
延时的数据分为最小值,典型值,最大值,这个数据是工艺、温度、电源电压波动等因素引起的,在代码中,这三种延时可以用冒号间隔的方式表示。

3.代码:
由于specify语句中的参数必须是输入输出端口,所以需要用两个模块来描述,delay模块描述了specify端口延时,用delay_test模块将其例化。
主模块和例化模块:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: jeffery
module delay_test(a,b,s,y);
input a,b,s;
output y;
wire s0;
not #4 not1(s0,s);//定义not反相器延时为4

delay my_delay(.a(a),.b(b),.s(s),.s0(s0),.y(y));

endmodule

module delay(a,b,s0,s,y);

input a,b,s,s0;
output y;
wire sa,sb;
//首先进行组合逻辑模块的逻辑定义

and and0(sa,a,s0),
    and1(sb,b,s);
or or1(y,sa,sb);

//然后进行延时的定义
    specify
        (a=>y)=(10:12:14);
        (s=>y)=(11:13:15);
        (b=>y)=(10:12:14);
    endspecify

endmodule

Tb文件:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: jeffery
//
module tb();
reg a,b,s;//需要在下面的过程语句中进行赋值
wire y;
delay_test my_delay_test(.y(y),.a(a),.b(b),.s(s));

initial begin
        //a
        a=0;b=0;s=0; //初始化信号,这时y=0;
        #20 a=1;b=0;s=0; //a变,y上升
        #20 a=0;b=0;s=0; //a变,y下降
        //b
        #20 a=0;s=1;b=0;//初始化信号,这时y=0
        #20 a=0;s=1;b=1;//b变,y上升
        #20 a=0;s=1;b=0;//b变,y下降
        //s
        #20 a=0;b=1;s=0;//初始化信号,这时y=0
        #20 a=0;b=1;s=1;//s变,y上升
        #20 a=0;b=1;s=0;//s变,y下降
        //~s
        #20 a=1;b=0;s=1;//初始化信号,这时y=0
        #20 a=1;b=0;s=0;//s到s非变,y上升
        #20 a=1;b=0;s=1;//s到s非变,y下降
        end


endmodule

4.测试结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面两张图展示了如何用waveform工具中的curse进行延时测量,最后一张图是测试信号和结果的整体波形,y的初始值没有赋予,默认为x。具体的测量图片不再多余展示。测试结果如下:
a——>y 延时为12ns;
b——>y 延时为12ns;
s——>y 延时为13ns;
s——>s0——>y延时为17ns;
可知,通过仿真得到的结果都是典型值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值