1

我正在尝试从以下 MyHDL 模块生成一个 verilog 模块:

顶部.py:

from myhdl import *
from counter import Counter

def Top(clkIn, leds):
    counter = Counter(clkIn, leds)
    return counter

clkIn = Signal(bool(0))
leds = intbv(0)[8:0]

toVerilog(Top, clkIn, leds)

和,

计数器.py:

from myhdl import *

def Counter(clk, count):
    c = Signal(modbv(0)[8:0])

    @always(clk.posedge)
    def logic():
        c.next = c + 1

    @always_comb
    def outputs():
        count.next = c

    return logic, outputs

但是,在生成文件的模块定义中,(第 1-3 行)

顶部.v:

module top (
    clkIn
);

input clkIn;
reg [7:0] counter_c;

always @(posedge clkIn) begin: TOP_COUNTER_LOGIC
    counter_c <= (counter_c + 1);
end

assign count = counter_c;

endmodule

leds[7:0]缺失。即使这些 LED 未使用,我也需要将它们用于我的合成器,以将它们分配给开发板上的正确引脚。为什么 MyHDL 省略了它们?我怎样才能让它包括它们?

4

2 回答 2

3

更改leds = intbv(0)[8:0]leds = Signal(intbv(0)[8:0]). 模块(输出)端口需要声明为Signal.

于 2017-01-14T15:46:50.863 回答
0

在您的模块顶部设计中,您没有将 LED 声明为输出。定义了 clkIn 并且它是一个输入。大多数合成器会检查逻辑是否驱动输出或其他一些可见的或保留的逻辑。如果合成器确定您无法判断 LED 是否存在于外部设计中,它可能会优化它以及驱动它的任何专用逻辑。

如果这是 Altera,则有一个称为虚拟引脚的 qsf 分配,可以分配给 LED,以保持它。但最简单的做法是在模块顶部引脚定义中添加 LED 并将其分配为输出。

根据 Alper 的评论,您没有将 Count 分配给任何东西。这需要修复。

此外,您不会在 Counter 定义中初始化 counter。这可能在综合中起作用,因为逻辑将初始化为零或某些其他确定值,但在模拟中,该值可能(可能/将)保持未知。如果可以,请获取复位信号。

于 2017-01-14T08:21:42.423 回答