2

Cocotb を検証環境としてセットアップしようとしています。便利な例を見てきましたが、進むべき方向がわかりません。

私のブロックは次のように見ることができます:

  • 入力に ​​4 つのバス
  • 入力として 1 つのクロックと 1 つのリセット
  • 出力に 2 つのバス

出力は、入力信号の組み合わせおよび順次処理の結果です。

さらに先に進むのに欠けている部分は、(私が理解している限り) AvalonST に準拠していない入力バスと出力バスのモニターを正しく定義する方法です。

Cocotb で提供されている例を見ましたが、インスピレーションを得るのを妨げているのは、次のいずれかが提供されていることです。

  • モニターがない (加算器など)
  • AvalonST ドライバーを使用する (endianswapper など)

現時点での質問は次のとおりです。

  • 平均的な例を見ると、その人が独自の を定義しているStreamBusMonitorことがわかります。私の理解では、同じことを行う必要があります (参照モデルにフィードするために 4 つの入力を監視するため)。私は正しいですか?
  • StreamBusMonitor信号の名前が次の行でどのように一致するか
    dut_out = StreamBusMonitor(dut, "o", dut.clk)
    わかりません。しかし、「o」の目的と、StreamBusMonitor のどこで使用されているかがわかりません。誰かが私を助けることができますか?
  • Cocotb の公式フォーラムは見つかりませんでした。Cocotb について、StackOverflow よりも公式に質問できる場所はありますか?

ご協力ありがとうございます。

4

1 に答える 1

1

は、で定義されているクラスにStreamBusMonitor基づいています。BusMonitorcocotb/monitors/__init__.py

クラス定義の冒頭は次のようになります。

class BusMonitor(Monitor):
    """
    Wrapper providing common functionality for monitoring busses
    """
    _signals = []
    _optional_signals = []

    def __init__(self, entity, name, clock, reset=None, reset_n=None,
                 callback=None, event=None):
        self.log = SimLog("cocotb.%s.%s" % (entity._name, name))
        self.entity = entity
        self.name = name
        self.clock = clock
        self.bus = Bus(self.entity, self.name, self._signals,
                       optional_signals=self._optional_signals)
        self._reset = reset
        self._reset_n = reset_n
        Monitor.__init__(self, callback=callback, event=event)

コンストラクターの は引数"o"です。これは、コンストラクターに渡されるときにシグナルの完全な名前を決定するために使用されます。StreamBusMonitornameBus

かなり賢明で一般的なバス命名スキームは、バス プロトコルの信号名に一意の識別子を追加または前置することであることにおそらくお気付きでしょう。などなど、まさにcocotbが想定していることです。

のシグナルが宣言され、との値StreamBusMonitorをオーバーライドします。したがって、ここで定義されているシグナルは次のとおりです。BusMonitor_signals_optional_signals

class StreamBusMonitor(BusMonitor):
    """
    streaming bus monitor
    """
    _signals = ["valid", "data"]

基本的に、デザイン内のバス信号名を決定する"o"ために、名前に が付加され (_信号を結合するとバス名がデフォルトの動作になりますcocotb/bus.py)、デザイン階層内の正しいオブジェクトへのハンドルがentity引数になります。

宣言された信号は上記のものであり、VHDL の信号は次のとおりであるため、これは理にかなっています。

  i_valid  : in  std_logic;
  i_data   : in  t_data_array(0 to BUS_WIDTH-1);
  o_valid  : out std_logic;
  o_data   : out t_data

通信チャネルに関しては、gitter チャネルが追加されました。

https://gitter.im/cocotb

LibreCores によって設定されたメーリング リスト:

https://lists.librecores.org/listinfo/cocotb

于 2017-05-19T04:38:37.837 に答える