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