Определить регистры, которые не сбрасываются

8

При написании 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

Как мне сделать так, чтобы мои инструменты автоматически определяли регистры, которые не сбрасываются?

Randomblue
источник
2
«регистры, которые не сбрасываются», не обязательно являются плохой вещью (по крайней мере, в кремниевой конструкции), поэтому они могут не являться предупреждениями в инструментах с линтами. В общем случае вы хотите сбросить только те регистры, которые должны быть сброшены, поскольку добавление сброса в триггеры увеличивает их площадь и нагрузку в сети сброса. Если у вас есть 256-битная шина данных и однобитный «действительный» сигнал, нет необходимости сбрасывать данные, если вы сбрасываете действительный.
Тим
Synplicity (инструмент синтеза) дает предупреждения о таких вещах. Раздражает, потому что они часто являются преднамеренными ... но могут помочь в вашей ситуации (предполагая, что Synplicity делает Verilog, я никогда не пробовал)
Брайан Драммонд
В вопросе говорится, что используются различные линтеры, ModelSim, Quartus II и Verilator. Эти инструменты имеют ограниченные возможности линтинга, и типы проблем, которые они проверяют, довольно узки.
Travisbartley

Ответы:

3

Ни один из упомянутых вами инструментов не является настоящим инструментом для рисования. Эти инструменты не должны давать вам хорошее покрытие.

Я видел два коммерческих инструмента для линтинга, и у обоих были правила для определения флопов без сброса.

Я вижу три варианта:

  1. Если ответ Дэвида Кесснера работает для вас - путь.
  2. Получить приличный инструмент для ворса, который сделает работу.
  3. Напишите скрипт, который будет обнаруживать флопы без сброса.

Теперь №2 может быть не так просто. Я не знаю, есть ли хорошие бесплатные линтеры, а профессиональные стоят дорого и займут много времени на настройку.

№ 3 - это подход, который я бы использовал. Если вы знаете какой-либо язык сценариев (Perl, Python, ...), вам понадобится не более одного дня, чтобы написать сценарий, который ищет флопы без сброса. Если вы не знаете ни одного языка сценариев, есть StackOverflow, куда вы можете обратиться за помощью - несколько дней, и все готово. Это также добавит еще один инструмент в ваш личный набор инструментов, который очень ценится среди дизайнеров внешнего интерфейса - написание сценариев обработки текста.

Удачи!

Василий
источник
4

Когда я запускаю Modelsim на моих проектах VHDL, он дает мне предупреждения при Time = 0ps о логике с входными сигналами типа 'X' или 'U'. Я забыл точное предупреждение. Проходя через эти предупреждения, можно сказать, что я не инициализировал.


источник
1

Я полагаюсь на функциональные тесты, а не на инструменты для раскрутки, я склонен переключать настройки сброса и переигрывать части тестового стенда. Если после сброса устройство работает правильно, значит, вы либо достаточно сбросили пространство состояний, либо ваш тестовый стенд не годится!

shuckc
источник
0

Иногда инструменты дизайна выводят серию отчетов, которые предоставляют вам всевозможную интересную информацию. Например, Xilinx может называть это Отчетом о карте, который сообщает вам, какие логические компоненты были сопоставлены с какими физическими компонентами.

В приведенном выше примере reg a будет отображаться в FDCE (триггер, D, с асинхронной очисткой и включением часов), тогда как reg b будет отображаться в FDE (триггер, D и включением часов). Это скажет вам, что рег б не имеет сброса.

ajs410
источник