从仿真波形到电路测试

第1关:组合逻辑电路的测试(1)

本关任务:采用硬件描述语言编写测试程序(testbenc)以生成如下所示的组合逻辑电路的波形图

`timescale 1ns/1ns

module tb_comb1();

	// 请在下面添加代码,根据所给出的波形图完成测试程序的编写
    // 本关卡不需要例化任何模块,根据波形图直接给出激励信号即可
    // 代码量预计10行
	/****** Begin ******/
    logic a;
    logic b;
    initial begin
        a = 0;b = 0; #10
        a = 1;b = 0; #5
        a = 1;b = 1; #10
        a = 0;b = 1; #20
        a = 0;b = 0;
        $finish;
    end
    /****** End ******/

	initial begin
    
        $timeformat(-9, 0, "ns", 5);
        $monitor("At time %t: a = %b, b = %b", $time, a, b);
    
    end

    initial begin

		$dumpfile("waveform.vcd");  // 系统任务“$dumfile”用于生成波形文件“waveform.vcd”
		$dumpvars(1, a);            // 系统任务“$dumpvars”用于控制将哪些信号变量放入波形文件
        $dumpvars(1, b);

    end

endmodule // tb_comb1

第2关 组合逻辑电路的测试(2)

`timescale 1ns/1ns

module tb_comb2();

    // 请在下面添加代码,根据所给出的波形图完成测试程序的编写
    // 本关卡不需要例化任何模块,根据波形图直接给出激励信号即可
    // 代码量预计10行
	/****** Begin ******/
    logic [3:0] a;
    logic [3:0] b;
    initial begin
        a = 4'b0000;b = 4'b0000;#10
        a = 4'b0001;b = 4'b0010;#5
        a = 4'b0010;b = 4'b0100;#5
        a = 4'b0011;b = 4'b0110;#5
        a = 4'b0100;b = 4'b1000;#5
        a = 4'b0101;b = 4'b1010;#5
        a = 4'b0110;b = 4'b1100;#5
        a = 4'b0111;b = 4'b1110;
        $finish;
    end
    /****** End ******/

	initial begin
    
        $timeformat(-9, 0, "ns", 5);
        $monitor("At time %t: a = %b, b = %b", $time, a, b);
    
    end

    initial begin

		$dumpfile("waveform.vcd");
		$dumpvars(1, a);
        $dumpvars(1, b);

    end

endmodule // tb_comb2

第3关 组合逻辑电路的测试(3)

`timescale 1ns/1ns
`include "src/step3/andgate.v"

module tb_andgate();

    // 请在下面添加代码,根据所给出的波形图完成测试程序的编写
    // 本关卡需要例化与门模块,并根据波形图给出激励信号
    // 代码量预计9行
	/****** Begin ******/
    logic a = 0;
    logic b = 0;
    andgate U0(.a(a),.b(b),.out(out));
    initial begin
        a = 0;b = 0;#10
        a = 0;b = 1;#5
        a = 1;b = 0;#20
        a = 1;b = 1;
        $finish;
    end
    /****** End ******/

	initial begin
    
        $timeformat(-9, 0, "ns", 5);

        // 根据“预期输出”中的格式,打印相应信号变量
        // 代码量预计1行
	    /****** Begin ******/
        $monitor("At time %t: a = %b, b = %b, out = %b",$time,a,b,out);
        /****** End ******/
    
    end

    initial begin

		$dumpfile("waveform.vcd");
		$dumpvars(1, tb_andgate.U0.a);
        $dumpvars(1, tb_andgate.U0.b);
        $dumpvars(1, tb_andgate.U0.out);

    end

endmodule // tb_andgate

第4关 组合逻辑电路的测试(4)​​​​​​

`timescale 1ns/1ns

module tb_comb4();

    // 请在下面添加代码,根据所给出的波形图完成测试程序的编写
    // 本关卡不需要例化任何模块,根据波形图直接给出激励信号
    // 代码量预计20行
	/****** Begin ******/
    logic [3:0] a;
    logic b;
    logic c;
    initial begin
        a = 4'b0000; b = 1; c =0; #5;  
        a = 4'b0010; b = 1; c =0; #5; 
        a = 4'b0011; b = 0; c =1; #5; 
        a = 4'b0100; b = 1; c =1; #5; 
        a = 4'b0101; b = 1; c =1; #5; 
        a = 4'b0110; b = 1; c =1; #5; 
        a = 4'b0111; b = 1; c =1; #5; 
        a = 4'b1000; b = 0; c =0; #5; 
        a = 4'b1001; b = 0; c =0; #5; 
        $finish;
    end

    /****** End ******/

	initial begin
    
        $timeformat(-9, 0, "ns", 5);
        // 根据“预期输出”中的格式,打印相应信号变量
        // 代码量预计1行
	    /****** Begin ******/
        $monitor("At time %t: a = %b, b = %b, c = %b", $time, a, b, c); 

        /****** End ******/
    
    end

    initial begin

		$dumpfile("waveform.vcd");
		$dumpvars(1, a);
        $dumpvars(1, b);
        $dumpvars(1, c);

    end

endmodule // tb_comb2

第5关 时序逻辑电路的测试(1) 

`timescale 1ns/1ns

module tb_clock();

	reg clk;
    
    initial begin
            clk <= 1'b0;
        #30 $finish;;
    end
    
    // 请在下面添加代码,根据所给出的波形图生成周期为10ns的时钟信号
    // 本关卡不需要例化任何模块
    // 代码量预计1行
	/****** Begin ******/

    `define CLK_PERIOD 10 

    always #(`CLK_PERIOD / 2) clk = ~clk;  // 每隔5ns,时钟翻转1次



    /****** End ******/

	initial begin
    
        $timeformat(-9, 0, "ns", 5);
        $monitor("At time %t: clk = %b", $time, clk);
    
    end

    initial begin

		$dumpfile("waveform.vcd");
		$dumpvars(1, clk);

    end

endmodule // tb_clock

第6关 时序逻辑电路的测试(2) 

`timescale 1ns/1ns
`include "src/step6/seq1.v"

module tb_seq1();

    // 代码量预计21行
	reg            clk, in;
    reg     [2:0]  s;
    wire           out;
    
    seq1 U0(.clk(clk), .in(in), .s(s), .out(out));
    
   // 请在下面添加代码,根据所给出的波形图完成测试程序的编写
    // 本关卡不需要例化任何模块,根据波形图直接给出激励信号即可
    // 代码量预计20行
	/****** Begin ******/
    initial begin   //初始化
        clk <= 1'b0;
        in <= 1'b0;
        s <= 3'd2;
        #80 $finish;;
    end

    initial begin    
        clk <=0;in <= 0;s<= 2;
        #5
        clk <=1;in <= 0;s<= 2;
        #5
        clk <=0;in <= 0;s<= 6;//10
        #5
        clk <=1;in <= 0;s<= 6;
        #5
        clk <=0;in <= 1;s<= 2;
        #5
        clk <=1;in <= 1;s<= 2;
        #5
        clk <=0;in <= 0;s<= 7;
        #5
        clk <=1;in <= 0;s<= 7;//35
        #5
        clk <=0;in <= 1;s<= 0;
        #5
        clk <=1;in <= 1;s<= 0;
        #5
        clk <=0;in <= 1;s<= 0;
        #5
        clk <=1;in <= 1;s<= 0;
        #5
        clk <=0;in <= 1;s<= 0;
        #5
        clk <=1;in <= 1;s<= 0;//65
        #5
        clk <=0;in <= 0;s<= 0;
        #5
        clk <=1;in <= 0;s<= 0;
        #5
        clk <=0;in <= 0;s<= 0;
    end
    /****** End ******/
    
    always #5 clk = ~clk;

	initial begin
    
        $timeformat(-9, 0, "ns", 5);
        $monitor("At time %t: clk = %b, in = %b, s = 0x%0x", $time, clk, in, s);
    
    end

    initial begin

		$dumpfile("waveform.vcd");
		$dumpvars(1, tb_seq1.U0.clk);
        $dumpvars(1, tb_seq1.U0.in);
        $dumpvars(1, tb_seq1.U0.s);

    end

endmodule // tb_seq1

 

第7关 时序逻辑电路的测试(3)

`timescale 1ns/1ns
`include "src/step7/tff.v"

module tb_tff();

    // 请在下面添加代码,根据所给出的波形图完成测试程序的编写
    // 本关卡需要例化tff模块,并根据波形图给出激励信号
    // 代码量预计20行
	/****** Begin ******/
    reg sys_clk, sys_rst_n, t;
    wire q; 
    tff U0(.sys_clk(sys_clk),.sys_rst_n(sys_rst_n),.t(t),.q(q));

    initial begin
        sys_clk <= 0;
        sys_rst_n <= 0;
        t <=0;
        #65 $finish;
    end

    initial begin 
        @(posedge sys_clk)
          
        @(posedge sys_clk)
            @(negedge sys_clk)
                sys_rst_n <= 1;
        @(posedge sys_clk)
            t <= 1;
        @(posedge sys_clk)
            t <= 0;
        @(posedge sys_clk)
            t <= 1;
        @(posedge sys_clk)
            t <= 0;
    end
    /****** End ******/

    
    always #5 sys_clk = ~sys_clk;

	initial begin
    
        $timeformat(-9, 0, "ns", 5);
        // 根据“预期输出”中的格式,打印相应信号变量
        // 代码量预计1行
	    /****** Begin ******/
$monitor("At time %t: sys_clk = %b, sys_rst_n = %b, t = %b, q = %b", $time, sys_clk, sys_rst_n, t, q);

        /****** End ******/
    
    end

    initial begin

		$dumpfile("waveform.vcd");
		$dumpvars(1, tb_tff.U0.sys_clk);
        $dumpvars(1, tb_tff.U0.sys_rst_n);
        $dumpvars(1, tb_tff.U0.t);
        $dumpvars(1, tb_tff.U0.q);

    end

endmodule // tb_tff

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值