Ограничения myhdl, связывающие несколько контактов с переменной
Я буду использовать iCE40HX8K
учитывая файл ограничений оценочных плат
set_io LED3 A2
set_io LED7 B3
...
etc
Каков наилучший способ объединить все 8 светодиодов в одну переменную? У меня возникли проблемы с привязкой вещей к файлу ограничений, и в итоге получилось что-то вроде этого
#main module
def ledcount(LED1, LED2, LED3, LED4, LED5, LED6, LED7, LED8, clk):
при записи регистра на светодиоды мне приходится прибегать к этому
op.next = op + 1
LED1 = op[0]
...
LED8 = op[7]
Я генерирую Verilog, как это... (у меня были отдельные биты из одного сигнала здесь, но это, казалось, вызывало проблемы - то есть LED3 в ограничениях, не назначая ничего)
clock = Signal(bool(0))
l1 = Signal(bool(0))
...
l8 = Signal(bool(0))
toVerilog(ledcount, l1, l2, l3, l4, l5, l6, l7, l8, clock)
достаточно плохо, но он станет громоздким с параллельным адресом и шиной данных...
Я замечаю в сгенерированном verilog LED1-8 указаны так
input LED1;
...
input LED8;
перед пунктом всегда и внутри всегда
reg LED1;
...
reg LED8;
Хотя все это компилируется (аппаратное обеспечение должно прибыть завтра!), И оно может (?) Даже работать... Я уверен, что это можно сделать лучше!
Я был бы очень рад обрабатывать светодиоды вместе как один байт, используя битовые манипуляции...
1 ответ
Самое простое - это изменить ограничения
set_io LED[2] A2
а затем использовать один светодиодный порт
def ledcount(leds, clk)
и это может быть преобразовано в
clk = Signal(bool(0))
leds = Signal(intbv(0)[8:])
myhdl.toVerilog(ledcount, leds, clk)