【发布时间】:2016-06-28 17:58:15
【问题描述】:
我正在尝试使用 myHDL 1.0dev
使用 pySerial 创建一个 python 库,用于在 PC 和 FPGA 之间动态创建 UART 接口它获取数据类型及其属性的名称,并实例化一个 RAM 块,并允许访问 PC 上的读/写命令。但是,我在动态连接 RAM 时遇到了问题。
对于一个最小的工作示例,我有这两个类。
class RamBus(object):
def __init__(self):
self.clk = Signal(bool(0))
class UartBus(object):
def __init__(self):
self.interfaces = dict()
def add(self, name, bus):
self.interfaces[name] = bus
setattr(self,name,bus)
UartBus 用于容纳许多 RamBus。现在我将尝试将它们与arbiter 块动态连接。
@block
def arbiter(clk,uartbus):
modules = []
for key in uartbus.interfaces:
print key
@block
def electrician(rambus=uartbus.interfaces[key]):
@always_comb
def wiring():
rambus.clk.next = clk
return wiring
f = electrician
modules.append(electrician())
return modules
如果我用这段代码转换它,我得到一个不正确的转换
uartbus = UartBus()
uartbus.add('power',RamBus())
uartbus.add('freq',RamBus())
#attempt conversion
clk = Signal(bool(0))
arbiter(clk,uartbus).convert()
这是不正确的verilog。
`timescale 1ns/10ps
module arbiter (
clk
);
input clk;
wire electrician_0_rambus_clk;
wire electrician_0_rambus_clk;
assign electrician_0_rambus_clk = clk;
assign electrician_0_rambus_clk = clk;
endmodule
而且两条线的名称相同!在 @always_comb 中使用字典不起作用,因为到目前为止,任何版本的 myHDL 都不支持字典进行转换。如何正确实现动态布线?
【问题讨论】: