2

cocotb v1.0 と ghdl 0.35-dev (llvm と gcc バックエンド) を使用しています。

最上位には、単純な for generate ステートメントが含まれています。

gen_pe : for i in 1 to 4 generate
    ...
end generate gen_pe;

「dut.gen_pe[1]」を使用して、cocotb テストベンチで最初に生成されたモジュールにアクセスしようとしました。次のエラーが発生します。

10000.00ns WARNING  Failed to find a hdl at index 1 via any registered implementation
10000.00ns ERROR    Send raised exception: gen_pe contains no object at index 1

dut をループすると、generate ステートメントから次のサブモジュールが検出されます。

10000.00ns INFO     Found something: (1)(GPI_MODULE)
10000.00ns INFO     Found something: (2)(GPI_MODULE)
10000.00ns INFO     Found something: (3)(GPI_MODULE)
10000.00ns INFO     Found something: (4)(GPI_MODULE)

残念ながら、有効な Python 構文ではないため、"dut.(1)" でそれらにアクセスすることはできません。

次に、cocotb/tests/test_cases/test_array からテスト配列 testcase を実行しようとしました:

make -s SIM=ghdl TOPLEVEL_LANG=vhdl

ほとんどすべてのテストが失敗しています。

*************************************************************************************************                   
** TEST                                      PASS/FAIL  SIM TIME(NS)  REAL TIME(S)  RATIO(NS/S) **                   
**************************************************************************************************                   
** test_array.test_direct_constant_indexing    FAIL         2001.00          0.00   1640180.24  **                   
** test_array.test_direct_signal_indexing      FAIL         2001.00          0.00   1048707.02  **                   
** test_array.test_discover_all                FAIL         1001.00          0.01    145412.61  **                   
** test_array.test_extended_identifiers        PASS         2001.00          0.00   5155283.97  **                   
** test_array.test_gen_loop                    FAIL         1001.00          0.00   1166573.58  **                   
** test_array.test_read_write                  FAIL         1000.00          0.00    860546.57  **                   
**************************************************************************************************
9005.00ns INFO     cocotb.regression                         regression.py:358  in _log_sim_summary
*************************************************************************************
**                                 ERRORS : 5                                      **
*************************************************************************************
**                               SIM TIME : 9005.00 NS                             **
**                              REAL TIME : 0.05 S                                 **
**                        SIM / REAL TIME : 173326.30 NS/S                         **

test_gen_loop の出力は次のとおりです。

7004.00ns INFO     cocotb.regression                         regression.py:287  in execute                         Running test 5/6: test_gen_loop
7004.00ns INFO     ..tine.test_gen_loop.0x7fa35db6d4d0       decorators.py:191  in send                            Starting test: "test_gen_loop"                                                                                       
                                                                                                               Description: Test accessing Generate Loops                                                                           
8004.00ns WARNING  cocotb.gpi                                GpiCommon.cpp:353  in gpi_get_handle_by_index         Failed to find a hdl at index 20 via any registered implementation                                                   
8004.00ns ERROR    ..tine.test_gen_loop.0x7fa35db6d4d0           result.py:51   in raise_error                     Send raised exception: asc_gen contains no object at index 20                                                        
                                                                                                                 File "/home/Programme/cocotb/cocotb/decorators.py", line 197, in send                                              
                                                                                                                   return self._coro.send(value)                                                                                    
                                                                                                                 File "/home/Programme/cocotb/tests/test_cases/test_array/test_array.py", line 189, in test_gen_loop                
                                                                                                                   asc_gen_20  = dut.asc_gen[20]                                                                                    
                                                                                                                 File "/home/Programme/cocotb/cocotb/handle.py", line 342, in __getitem__                                           
                                                                                                                   raise IndexError("%s contains no object at index %d" % (self._name, index))                                      

8005.00ns ERROR    cocotb.regression                         regression.py:263  in handle_result                   Test Failed: test_gen_loop (result was TestError)

それは私の設計でのエラーに似ています。したがって、モジュールの命名に問題があると思います。

有効なモジュール名を取得する方法、またはエラーを完全に修正する方法はありますか?

編集:最小限の例

フォルダ:/home/Programme/cocotb/examples/generate

/home/Programme/cocotb/examples/generate/hdl/top.vhd:

library ieee;
    use ieee.std_logic_1164.all;

entity top is
    port ( 
        clk : in std_logic;
        A : in std_logic_vector(4 downto 1);
        B : out std_logic_vector(4 downto 1)
    );
end top;

architecture rtl of top is
begin
    gen_pe : for i in 1 to 4 generate
        test : process (clk) is
        begin
            if (rising_edge(clk)) then 
                B(i) <= A(i);
            end if;
        end process test;
    end generate gen_pe;
end rtl;

/home/Programme/cocotb/examples/generate/tests/top_cocotb.py:

import cocotb
from cocotb.clock import Clock
from cocotb.triggers import Timer

@cocotb.test()
def test_gen(dut):
    cocotb.fork(Clock(dut.clk, 1000).start())

    yield Timer(1000)

    for i in dut:       
        print i._log.info("Found something: %s" % i._fullname)

/home/Programme/cocotb/examples/generate/tests/Makefile:

CWD = $(shell pwd)
COCOTB = $(CWD)/../../..

TOPLEVEL_LANG = vhdl

VHDL_SOURCES = $(CWD)/../hdl/top.vhd

SIM = ghdl
CMD_BIN = ghdl

TOPLEVEL=top
MODULE=$(TOPLEVEL)_cocotb

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

sim: $(MODULE).py

で実行した後、代わりにmakegpi-module 名がコンソールに出力されます。(1) ... (4)gen_pe(1) ... gen_pe(4)

アップデート:

gpi モジュール名は、最新バージョンの ghdl で修正されています。ただし、cocotb テスト配列のテストケースはまだ失敗しています。

4

0 に答える 0