Я делаю дизайн в vhdl для FPGA. У меня есть дизайн верхнего уровня, который состоит из 3 компонентов: делителя часов, Module_1 и Module_2. Сущность верхнего уровня имеет порт ввода часов. Эти часы делятся делителем часов, чтобы получить два других часа: часы_1 и часы_2. Они подаются на тактовые порты Module_1 и Module_2 соответственно.
Я хочу ограничить все эти часы. Итак, как решить, нужно ли использовать get_ports, get_pins, get_nets или get_registers? Я использовал get_ports для основных часов. А как насчет двух других? Я вижу эти сгенерированные часы в get_pins, get_nets и get_registers в анализаторе времени Quartus II. Кроме того, имена часов выглядят по-другому с некоторыми суффиксами, такими как '_var', '~clk' и т. д. Существуют ли какие-либо особые правила для get_pins, get_nets и get_registers?
Вводы/выводы блока верхнего уровня называются port , вводы/выводы подблоков называются pin . Таким образом, get_ports
и get_pins
команды должны использоваться соответственно.
Если основные часы являются входом блока верхнего уровня, get_ports
это соответствующая команда. Например:
create_clock -name CLK [get_ports clock_main] ...
Так как clock_1
и clock_2
являются входами подблоков, get_pins
в этом случае необходимо использовать.
create_clock -name CLK1 [get_pins Module_1/clock_1] ...
create_clock -name CLK2 [get_pins Module_2/clock_2] ...
Сигналы, отличные от входов/выходов, называются net . Сети могут быть собраны и ограничены с помощью get_nets
команды, однако большинство инструментов синтеза оптимизируют их или меняют имена. Лучше избегать использования, get_nets
если это не обязательно. В противном случае большинству инструментов синтеза требуется dont_touch
атрибут или что-то подобное, чтобы сохранить сеть.
Обычно я не использую get_registers
команду, потому что она не поддерживается компилятором Synopsys Design Compiler, я использую get_cells
вместо нее. Наоборот, Quartus II поддерживает get_registers
в соответствии с руководством Altera SDC .
Его также можно использовать для ограничения часов. В инструкции есть следующий пример:
create_generated_clock -divide_by 2 -source [get_ports clk] -name clkdiv \
[get_registers clkdiv]
В качестве альтернативы вы можете использовать get_pins
команду. Тебе решать.
create_generated_clock -divide_by 2 -source [get_ports clk] -name clkdiv \
[get_pins clkdiv/Q]
Если в вашей конструкции есть такой делитель тактовых импульсов, лучше ограничить его регистром или выводом Q, чем тактовым входом подблока (например, Module_1
). В противном случае инструмент синтеза не знает, несет ли путь тактовый сигнал между регистром и выводом clock_1
. Задержка пути не включается в временной анализ и т.д.
Инструменты синтеза обычно добавляют суффиксы к именам сигналов и ячеек. Каждый инструмент имеет свои собственные правила именования. Например, мой инструмент добавляет _reg
суффикс к флоп-сигналам.
Миту Радж
пользователь154136
Миту Радж