zoukankan      html  css  js  c++  java
  • testbench——信号的产生

    在写testbench时候,需要对各种信号根据时间进行设置。

    注意所有需要输入被测试模块的信号均为reg型。

    module test();
    
    reg clk;
    reg sig1, sig2, sig3, sig4, sig5;
    
    常见信号设置方式

    时钟信号一般通过forever语句设置,产生连续时钟。

    initial begin
    	clk = 1'b0;
    	forever #5 clk = ~clk;
    end
    信号设置方式1:相对时间

    initial begin
    	sig1 = 1'b0;
    	#5 sig1 = 1'b1;
    	#25 sig1 = 1'b0;
    	#50 sig1 = 1'b1;
    end
    这样赋值后,初始值为0,5ns时置为1,30ns时置为0,80ns时置为1:时间是相对时间,连续累加的。

    信号设置方式2:绝对时间

    initial fork
    	sig2 = 1'b1;
    	#5 sig2 = 1'b0;
    	#30 sig2 = 1'b1;
    	#42 sig2 = 1'b0;
    join
    这样赋值后,初始值为1,5ns时置为0,30ns时置为1,42ns时置为0:时间即信号变动的绝对时间。

    信号设置方式3:混合时间

    initial fork
    	begin
    		sig3 = 1'b0;
    		#16 sig3 = 1'b1;
    		#35 sig3 = 1'b0;
    	end
    	begin
    		#56 sig3 = 1'b1;
    	end
    join
    在每个begin-end中,时间为相对时间;多个begin-end块之间为绝对时间。该信号初始值为0,16ns置1,(16+35=)51ns置0,56ns置1。

    信号设置方式4

    若给信号与其他信号相关,可加入@

    initial begin
    	sig4 = 1'b0;
    	@(posedge sig3);
    		sig4 = 1'b1;
    end

    在sig3由0置1时,sig4发生变化。

    信号设置方式5

    信号需要重复一定次数,可采用repeat语句

    initial begin
    	sig5 = 1'b0;
    	@(posedge sig3);
    		repeat(4) @(negedge clk) sig5 = ~sig5;
    end

    仿真终止时间设定

    initial #100 $finish;

    总代码
    module test();
    
    reg clk;
    reg sig1, sig2, sig3, sig4, sig5;
    
    initial begin
    	clk = 1'b0;
    	forever #5 clk = ~clk;
    end
    
    initial begin
    	sig1 = 1'b0;
    	#5 sig1 = 1'b1;
    	#25 sig1 = 1'b0;
    	#50 sig1 = 1'b1;
    end
    
    initial fork
    	sig2 = 1'b1;
    	#5 sig2 = 1'b0;
    	#30 sig2 = 1'b1;
    	#42 sig2 = 1'b0;
    join
    
    initial fork
    	begin
    		sig3 = 1'b0;
    		#16 sig3 = 1'b1;
    		#35 sig3 = 1'b0;
    	end
    	begin
    		#56 sig3 = 1'b1;
    	end
    join
    
    initial begin
    	sig4 = 1'b0;
    	@(posedge sig3);
    		sig4 = 1'b1;
    end
    
    initial begin
    	sig5 = 1'b0;
    	@(posedge sig3);
    		repeat(4) @(negedge clk) sig5 = ~sig5;
    end
    
    initial #100 $finish;
    endmodule

    波形图验证
















  • 相关阅读:
    将字符数组写到字符串
    两种比较不错的密码修改方案
    数组的应用 结构类型 使用深复制和浅复制 显示员工信息
    字符串处理技巧
    uva 1339
    11039
    uva 11636
    Uva401Palindromes
    poj2524-Ubiquitous Religions
    Poj1611The Suspects
  • 原文地址:https://www.cnblogs.com/mingmingruyue99/p/7202013.html
Copyright © 2011-2022 走看看