【问题标题】:Modify VHDL generic value with ghdl in cocotb在 cocotb 中使用 ghdl 修改 VHDL 通用值
【发布时间】:2017-05-18 06:57:51
【问题描述】:

我设法用 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 作为模拟器?

【问题讨论】:

  • 更改通用值需要对设计进行彻底的重新阐述(完整的编译和链接)。因此,如果不完全重新启动,您将无法更改该值。为什么要更改运行设计中的通用值?
  • 事实上,我不想在«running design»中更改值,而是在python测试函数中更改值。目标是在 test_module.py 中配置所有测试参数,而不是修改一些 VHDL。
  • 您可以使用configuration 构造更改编译后generic 的值(但不能在运行时)。我不知道 cocotb 或 GHDL 是否支持它,但在 VHDL 中是可能的。
  • ghdl 支持配置声明,您可以详细说明和模拟配置。 目标是在 test_module.py 中配置所有测试参数,而不是修改一些 VHDL。 您可以想象测试参数适用于被测试的硬件,而不是相反。否则 C_M00_AXI_BURST_LEN 不会是(通用)常量。

标签: python vhdl ghdl cocotb


【解决方案1】:

事实上,user1155120、Paebbels 和可怕的杰夫回答了这个问题:不可能。 但是可以使用不同的配置来解决这个问题。

【讨论】:

  • 您能详细说明一下吗?我在这里遇到了同样的问题。一个例子可能吗? ://
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
相关资源
最近更新 更多