timescale使用


1.timescale的介紹
    timescale包含時間單位和時間精度兩部分。設定格式為`timescale timeunit / timeprecision
    timeunit和timeprecision由值1、10、和100以及單位s、ms、us、ns、ps和fs組成。
2.timescale對相對時間的影響
    如果設定`timescale 1ns/1ps,#100是相對時間,等價於#100ns,而#100.1111會被認為是#100.111ns,因為它的精度高於timescaled的時間精度,而被四舍五入。
3.timescale的作用范圍
    在編譯過程中,`timescale指令影響這一編譯器指令后面所有模塊中的時延值,直至遇到另一個`timescale指令或`resetall指令。
    SystemVerilog可以聲明一個時間單位和精度,這與Verilog-2001中的`timescale編譯器指令具有等價的功能。這些聲明消除了使用編譯器指令時對文件順序的依賴性問題。時間單位和精度可以分別使用timeunit和timeprecision關鍵字來聲明,但這個時間文本值必須是10的冪。
    對於任何模塊、程序、包或接口,或者在任意編譯單元作用域內,最多只能有一個時間單位和一個時間精度。這就會定義一個時間作用域。如果指定了timeunit和timeprecision的話,那么它們應該在任何當前時間作用域內其它條目之前聲明。timeunit和timeprecision聲明可以作為后續條目重復,但必須與當前時間作用域內之前的聲明匹配。
    如下例子中:module A的時間單位/精度是100ps/ 1ps,module B的時間單位/精度是1ns/ 10ps,module C的時間單位/精度是1ps/ 1ps,module D的時間單位/精度是1s/1s
    `timescale 1ns / 10ps
    module A (...);
  timeunit 100ps;
  timeprecision 1ps;
    endmodule
    module B (...);
    endmodule
    `timescale 1ps/1ps
    module C (...);
    `timescale 1s/1s
    endmodule
    module D (...);
    endmodule

    再看一個例子
    `timescale 1ns/1ps
    module add(input clk,input a,input b,output bit[1:0] sum);
        always@(posedge clk)begin
            #3;
            sum = a+b;
            $display("1:time:%t",$realtime);//3300;3.300
            $display("2:time:%f",$realtime);//3.300000;3.300000            
        end
    endmodule
    `timescale 100ps/10ps
    module test();
        wire[1:0] get_sum;
        reg       input_a = 1;
        reg       input_b = 1;
        bit       clk;
        initial begin
            //$timeformat(-9,3,"",5);/*mark1*/
            #1;
            $display("3:time:%t",$realtime);//100;0.100
            $display("4:time:%f",$realtime);//1.000000;1.000000    
            #2 clk = ~clk;        
        end        
        add ADD(.clk(clk),.a(input_a),.b(input_b),.sum(get_sum));
    endmodule
4.使用$timeformat和%t統一時間單位/精度
    timeformat_task ::= $timeformat[(units_number,precision_number,suffix_string,minimum_field_width)];
    上述例子中mark1處注釋掉后,打印結果為分號前結果,打開注釋后,打印結果為分號后結果。
    如果$timeformat沒有被調用過,這時%t打印的時間單位是所有`timescale中的最小time precision

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM