При написании Verilog я использую различные «линтеры», которые выдают ошибки и предупреждения. Это мой симулятор (ModelSim), мой компилятор (Quartus II) вместе с линтером (Verilator). Вместе у меня есть хорошее покрытие для распространенных ошибок, таких как несоответствие размеров автобусов и предполагаемые защелки.
К сожалению, ни один из трех инструментов не обнаруживает регистры, которые не сбрасываются. Чтобы понять, что я имею в виду, подумайте о следующем.
reg a;
reg b;
always @(posedge clk_i or posedge rst_i) begin
if(rst_i) begin
a <= 1'b0; // Reset a
// Ooops, forgot to reset b
end else begin
// Do stuff with a and b
end
end
Как мне сделать так, чтобы мои инструменты автоматически определяли регистры, которые не сбрасываются?
Ответы:
Ни один из упомянутых вами инструментов не является настоящим инструментом для рисования. Эти инструменты не должны давать вам хорошее покрытие.
Я видел два коммерческих инструмента для линтинга, и у обоих были правила для определения флопов без сброса.
Я вижу три варианта:
Теперь №2 может быть не так просто. Я не знаю, есть ли хорошие бесплатные линтеры, а профессиональные стоят дорого и займут много времени на настройку.
№ 3 - это подход, который я бы использовал. Если вы знаете какой-либо язык сценариев (Perl, Python, ...), вам понадобится не более одного дня, чтобы написать сценарий, который ищет флопы без сброса. Если вы не знаете ни одного языка сценариев, есть StackOverflow, куда вы можете обратиться за помощью - несколько дней, и все готово. Это также добавит еще один инструмент в ваш личный набор инструментов, который очень ценится среди дизайнеров внешнего интерфейса - написание сценариев обработки текста.
Удачи!
источник
Когда я запускаю Modelsim на моих проектах VHDL, он дает мне предупреждения при Time = 0ps о логике с входными сигналами типа 'X' или 'U'. Я забыл точное предупреждение. Проходя через эти предупреждения, можно сказать, что я не инициализировал.
источник
Я полагаюсь на функциональные тесты, а не на инструменты для раскрутки, я склонен переключать настройки сброса и переигрывать части тестового стенда. Если после сброса устройство работает правильно, значит, вы либо достаточно сбросили пространство состояний, либо ваш тестовый стенд не годится!
источник
Иногда инструменты дизайна выводят серию отчетов, которые предоставляют вам всевозможную интересную информацию. Например, Xilinx может называть это Отчетом о карте, который сообщает вам, какие логические компоненты были сопоставлены с какими физическими компонентами.
В приведенном выше примере reg a будет отображаться в FDCE (триггер, D, с асинхронной очисткой и включением часов), тогда как reg b будет отображаться в FDE (триггер, D и включением часов). Это скажет вам, что рег б не имеет сброса.
источник