2016-03-30 19 views
2

Endian Swapper VHDLのCocotbの例とQuestaSimを使ったVerilogのモードをシミュレートするときのクロック周期が変わります。クロックはprovided example codeで両方のモードで同じように生成されます。Cocotbで時間解像度を指定するにはどうすればよいですか?

@cocotb.coroutine 
def clock_gen(signal): 
    while True: 
     signal <= 0 
     yield Timer(5000) 
     signal <= 1 
     yield Timer(5000) 


@cocotb.coroutine 
def run_test(dut): # stripped un 

    cocotb.fork(clock_gen(dut.clk)) 

とVerilogのモードで実行する場合:

make SIM=questa GUI=1 

クロック周期が1000ナノ秒(000ナノ秒であります)、したがって、時間分解能は100psである。

とVHDLモードで実行する場合:

make SIM=questa GUI=1 TOPLEVEL_LANG=vhdl 

クロック周期が10000のNS(000ナノ秒)であり、したがって、時間分解能が1ナノ秒です。

他の2つのVHDLプロジェクトで同じクロック生成を使用しています。 1つには、クロック周期も10000 ns(1 ns分解能)です。しかし、もう1つでは、クロック周期はわずか10nsで、1psの分解能が得られます。

これらのすべての実行モードとプロジェクトで時間の解像度が異なるのはなぜですか?

時間の解像度を一貫して指定するにはどうすればよいですか?

+0

便宜上、 'cocotb.clock.Clock'クラスがあり、' clock_gen'コルーチンを繰り返し定義する必要がありません。 – Chiggs

答えて

2

Makefilesによって生成されたrunsim.doファイル内のvsimコマンドに時間の解像度が指定されていません。したがって、modelsim.iniに指定されているように、シミュレータのデフォルトの時間分解能が使用されます。他のVHDLプロジェクトの1つにプライベートmodelsim.iniがあり、デフォルトの1ns(Resolution = ns)ではなく1ps(Resolution = ps)に設定されています。

追加のvsim引数は、CocotbビルドシステムのMakefile変数VSIM_ARGSで指定できます。しかし、コマンドラインでこの変数を設定する:予想通り、他の必要なvsim引数は今を剥奪されているので、

make SIM=questa GUI=1 "VSIM_ARGS=-t 1ps" 

することはできません。

一つではなく、プロジェクト固有のMakefileでこの変数を設定する必要があり、例えば、単にシステム全体のMakefileを含む前に:

VSIM_ARGS=-t 1ps 

include $(COCOTB)/makefiles/Makefile.inc 
include $(COCOTB)/makefiles/Makefile.sim 

この方法で、1は、VHDLおよびVerilogの間で一貫性の時間分解能を取得します。それに応じて、プロジェクトごとにパラメータを設定する必要があります。

+0

[Issue 115](https://github.com/potentialventures/cocotb/issues/115)も参照してください。ここでは絶対単位で時間を定義します。これはPythonレベルでこれを解決します。 [#383](https://github.com/potentialventures/cocotb/pull/383)がマージされた後、ユニットの単位でタイマーを定義することがそれほど困難ではないように、絶対時間精度がわかっています。 – Chiggs

+0

@Chiggs Issue#383に関しては、 'vhpi_get_phys(vhpiResolutionLimitP、NULL)'を呼び出すためのPython関数が既に存在しますか?私は情報源の中で1つを見つけなかった。 –

関連する問題