Я работаю в Intel Quartus Prime Lite 23.1 над проектом шаблона для Arduino MKR Vidor 4000. В частности, он использует Cyclone 10 LP 10CL016YU256C8G.
Прямо сейчас я пытаюсь написать модуль, который на данный момент просто перенаправляет некоторые провода к набору портов, подключенных к светодиодам, для отладки. Сейчас отправляются только старшие разряды 32-битных часов.
Проблемный модуль TestLeds
определяется вместе с объектом модуля верхнего уровня MKRVIDOR4000_top
следующим образом:
module TestLeds(
inout wire [6:0] bMKR_A,
inout wire [14:0] bMKR_D,
inout wire [7:0] bByte
);
assign bByte = '{bMKR_A[5], bMKR_A[6], bMKR_D[0], bMKR_D[1], bMKR_D[2], bMKR_D[3], bMKR_D[4], bMKR_D[5]};
endmodule
module MKRVIDOR4000_top
(
// system signals
input iCLK,
// SAM D21 PINS
inout [6:0] bMKR_A,
inout [14:0] bMKR_D
);
reg [5:0] rRESETCNT;
reg [31:0] hadcounter;
always @(posedge iCLK) begin
if (!rRESETCNT[5]) begin
rRESETCNT <= rRESETCNT+1;
hadcounter <= 0;
end else begin
hadcounter <= hadcounter + 1;
end
end
wire [7:0]bMKR_LED;
TestLeds leds(
.bMKR_A(bMKR_A),
.bMKR_D(bMKR_D),
.bByte(bMKR_LED));
assign bMKR_LED[7:0] = hadcounter[31:31-7];
endmodule
Это урезанная и, надеюсь, эквивалентная версия того, что я на самом деле использую, основанная на приведенном выше шаблоне.
Насколько я понимаю, определения проводов должны обновлять конкретные порты bMKR_A
и bMKR_D
путем прямого подключения к «регистру» hadcounter
, но все это, похоже, игнорируется. То есть Quartus не требует никаких шлюзов для компиляции. Я получаю сообщение об ошибке Warning (12158): Entity "TestLeds" contains only dangling pins
, но не понимаю, как это происходит и как ее решить.
Я также пытался смоделировать этот проект, но Quartus не позволяет мне выбрать какой-либо язык, и я не могу найти, как еще выполнить эту задачу.
Чтобы быть более конкретным о том, для чего я здесь:
@Mikef Спасибо, теперь я обновил код, добавив минимальное представление вместе с используемым устройством FPGA. Я надеюсь, что изменения будут удовлетворительными!
Проблема в том, что у проекта нет выходов.
Похоже, что переменная bMKR_D
предназначена для вывода, но она нигде не используется в проекте.
Одна вещь, вызывающая путаницу, заключается в том, что вы используете режим inout
для своих портов. Нет причин использовать это для имеющегося у вас кода. Используйте input
или output
. Пройдитесь по своему дизайну и внесите изменения; не потребуется много времени, чтобы понять, что у вас нет выходов. Уточните для себя, какие выходные данные вы хотите получить на уровне модуля и на верхнем уровне. Если нужно, нарисуйте от руки. Не использовать режим inout
Без выходных данных (bMKR_D неактивен) синтез удалит весь проект. Одна из задач синтеза — удалить неиспользуемую логику, а при отсутствии выходных данных она не используется.
Порты режима inout используются для вывода драйверов с тремя состояниями, здесь их нет.
Вам не нужен Quartus для моделирования этого небольшого проекта. www.edaplayground.com бесплатен и хорошо подходит для небольших проектов с несколькими файлами. Зарегистрируйтесь по электронной почте организации, и вы сможете запускать почти полные версии всех стандартных отраслевых инструментов моделирования, достаточно всего лишь пару раз вырезать и вставить, а затем нажать большую кнопку запуска.
Есть и другие проблемы с вашим кодом. Конструкции FPGA, в которых используются триггеры, обычно имеют вход сброса для сброса триггеров при включении питания. При моделировании сброс обычно устанавливается в момент t=0 в течение некоторого количества тактов и отпускается. Без сброса флопы не имеют начального значения (на самом деле это x в моделировании), и добавление к ним единицы по-прежнему равно x. Я бы поискал по синхронному счетчику Verilog. Вы можете посмотреть счетчик Википедии или найти свой. В любом случае я предлагаю вам добавить в свой проект сброс и использовать его для инициализации стандартного синхронного счетчика.
Спасибо за подробный ответ и вашу доброту! Теперь мой дизайн работает и кажется более стабильным. Кажется, у меня были некоторые заблуждения, которые благодаря вам прояснились.
Вам необходимо предоставить весь верхний уровень вместе с модулем. Ограничьте его только тем, что необходимо для демонстрации вашей проблемы, если она большая. Нам нужна возможность запускать инструменты для того, что вы публикуете. Это известно как минимально-воспроизводимый пример