Отсутствует порт вывода в сгенерированном коде Verilog из MyHDL

Я пытаюсь создать модуль Verilog из следующего модуля MyHDL:

top.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)

а также,

counter.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)

top.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] не хватает. Хотя эти светодиоды не используются, они нужны мне для моего синтезатора, чтобы назначить их соответствующим выводам на плате разработки. Почему MyHDL опускает их? и как я могу сделать так, чтобы они включали их?

2 ответа

Решение

+ Изменить leds = intbv(0)[8:0] в leds = Signal(intbv(0)[8:0]), Порты модуля (выхода) должны быть объявлены как Signal,

В верхнем дизайне вашего модуля вы не объявляли светодиоды выходными данными. На clkIn определяется и это вход. Большинство синтезаторов проверяют, что логика управляет выходами или какой-либо другой видимой или сохраняемой логикой. Если синтезатор определяет, что вы не можете сказать, что светодиоды присутствуют в дизайне извне, он может просто оптимизировать его, а также любую специальную логику, которая его прогонит.

Если это Altera, существует назначение qsf, называемое виртуальными выводами, которые можно назначить для светодиодов, чтобы сохранить его. Но самое простое - добавить светодиоды в определение верхнего вывода модуля и назначить его как выход.

Согласно комментарию от Alper, вы никому не назначаете Count. Это должно быть исправлено.

Кроме того, вы не инициализируете счетчик в определении счетчика. Это может работать в синтезе, потому что логика будет либо начинать с нуля, либо с каким-то другим определенным значением, но при моделировании значение может (вероятно / будет) оставаться неизвестным. Получите сигнал сброса, если можете.

Другие вопросы по тегам