python - 在cocotb中用ghdl修改VHDL泛型值

标签 python vhdl ghdl cocotb

我成功地使用 cocotb 读取了通用模块值,没有问题。但是如果我写不出来。

我的 VHDL 泛型是:

...
generic (
    ... 
    C_M00_AXI_BURST_LEN : integer   := 16;
    ...
)

我可以在 cocotb 中读取它:

 self.dut.log.info("C_M00_AXI_BURST_LEN 0x{:x}".format(
                   int(self.dut.c_m00_axi_burst_len)))

但是如果我尝试改变它:

self.dut.c_m00_axi_burst_len = 32

我得到这个 python 错误:

  Send raised exception: Not permissible to set values on object c_m00_axi_burst_len
File "/opt/cocotb/cocotb/decorators.py", line 197, in send
  return self._coro.send(value)
File "/usr/local/projects/axi_pattern_tester/vivado_ip/axi_pattern_tester_1.0/cocotb/test_axi_pattern_tester_v1_0.py", line 165, in axi4_master_test
  dutest.print_master_generics()
File "/usr/local/projects/axi_pattern_tester/vivado_ip/axi_pattern_tester_1.0/cocotb/test_axi_pattern_tester_v1_0.py", line 86, in print_master_generics
  self.dut.c_m00_axi_burst_len = 32
File "/opt/cocotb/cocotb/handle.py", line 239, in __setattr__
  return getattr(self, name)._setcachedvalue(value)
File "/opt/cocotb/cocotb/handle.py", line 378, in _setcachedvalue
  raise TypeError("Not permissible to set values on object %s" % (self._name))

有没有办法使用 GHDL 作为模拟器来做到这一点?

最佳答案

事实上,user1155120、Paebbels 和 scary_jeff 回答了这个问题:这是不可能的。

但是可以使用不同的配置来解决这个问题。可以在 Makefile 中配置 VHDL 通用值,向 SIM_ARGS 参数添加“-g”选项:

SIM_ARGS+=-gC_M00_AXI_BURST_LEN=16

然后可以像任何其他信号一样在 cocotb“dut”对象下读取此值并将其用作模拟参数:

C_M00_AXI_BURST_LEN = int(dut.C_M00_AXI_BURST_LEN.value)

关于python - 在cocotb中用ghdl修改VHDL泛型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44040693/

相关文章:

vhdl - 枚举中的字 rune 字别名的正确语法是什么?

vhdl - 使用 VHDL 代码生成纯正弦波作为 FPGA 的输出

comparison - 有人有关于 VHDL 与 Verilog 使用的定量数据吗?

compiler-errors - GHDL编译问题

c# - Visual Studio 2017 中的 Pythonnet

vhdl - 为什么IEEE vhdl标准库不是STL?

python - 在 plotly 中旋转标记

python - 使用 zip() 函数的 Python 列表理解的复杂度为 O(n)

python - 在Python中使用 "|"和 "'\n'"执行linux命令