Ich mache ein Design in vhdl für FPGA. Ich habe ein Top-Level-Design, das aus 3 Komponenten besteht: Taktteiler, Module_1 und Module_2. Die Entität der obersten Ebene hat einen Takteingangsport. Diese Uhr wird durch den Taktteiler geteilt, um zwei andere Uhren zu erhalten: Uhr_1 und Uhr_2. Sie werden den Taktports von Module_1 bzw. Module_2 zugeführt.
Ich möchte alle diese Uhren einschränken. Wie also entscheiden, ob get_ports oder get_pins oder get_nets oder get_registers verwendet werden müssen? Ich habe get_ports für die Hauptuhr verwendet. Was ist mit den anderen beiden? Ich kann diese generierten Takte unter get_pins und get_nets und get_registers im Timing Analyzer von Quartus II sehen. Auch die Uhrnamen sehen dort anders aus mit einigen Suffixen wie '_var' , '~clk' etc. Gibt es spezielle Regeln für get_pins und get_nets und get_registers ?
I/Os des Top-Level-Blocks werden als Port bezeichnet , I/Os der Unterblöcke werden als Pin bezeichnet . So get_ports
und get_pins
Befehle müssen entsprechend verwendet werden.
Wenn der Haupttakt ein Eingang des Blocks der obersten Ebene ist, get_ports
ist der entsprechende Befehl. Zum Beispiel:
create_clock -name CLK [get_ports clock_main] ...
Da clock_1
und clock_2
die Eingänge der Unterblöcke sind, get_pins
müssen in diesem Fall verwendet werden.
create_clock -name CLK1 [get_pins Module_1/clock_1] ...
create_clock -name CLK2 [get_pins Module_2/clock_2] ...
Die Signale außer den I/Os heißen net . Die Netze können mithilfe von get_nets
Befehlen gesammelt und eingeschränkt werden, die meisten Synthesewerkzeuge optimieren sie jedoch oder ändern die Namen. Es ist besser, die Verwendung zu vermeiden, get_nets
wenn dies nicht obligatorisch ist. Ansonsten benötigen die meisten Synthesewerkzeuge dont_touch
Attribute oder ähnliches, um das Netz zu halten.
Normalerweise verwende ich command nicht get_registers
, da es vom Synopsys Design Compiler nicht unterstützt wird, verwende ich get_cells
stattdessen. Im Gegenteil, Quartus II unterstützt get_registers
laut Alteras SDC-Handbuch .
Es kann auch verwendet werden, um die Uhr einzuschränken. Das Handbuch enthält das folgende Beispiel:
create_generated_clock -divide_by 2 -source [get_ports clk] -name clkdiv \
[get_registers clkdiv]
Alternativ können Sie get_pins
den Befehl verwenden. Es liegt an Ihnen.
create_generated_clock -divide_by 2 -source [get_ports clk] -name clkdiv \
[get_pins clkdiv/Q]
Wenn Sie einen solchen Taktteiler in Ihrem Design haben, ist es besser, ihn auf das Register oder den Q-Pin zu beschränken als auf den Takteingang eines Unterblocks (z. B. Module_1
). Andernfalls weiß das Synthesetool nicht, ob der Pfad ein Taktsignal zwischen dem Register und dem clock_1
Pin führt. Die Verzögerung des Pfades wird nicht in die Timing-Analyse usw. einbezogen.
Synthesewerkzeuge fügen üblicherweise Suffixe zu den Signal- und Zellnamen hinzu. Jedes Tool hat seine eigenen Benennungsregeln. Zum Beispiel fügt mein Tool _reg
den gefloppten Signalen ein Suffix hinzu.
Mitu Raj
Benutzer154136
Mitu Raj