ALTERAのFPGA開発環境 QuartusII 12.1、Verilog HDLでバレルシフタを記述し、組み合わせ回路の動作速度をQuartusIIの機能であるTimeQuestで計ってみた。ターゲットはCycloneIII EP3C16F484C6(Terasic DE0)。I/Oのアサインはせずコンパイルのみ。

 バレルシフタは組み合わせ回路なので、最初はI/Oから入出力をとってそのまま接続していた。しかしこれではTimeQuestで評価されない。前後をFFではさむとfmaxが計算された。
 
sll64_rtl

 これに気づいたのはTimeQuestによるタイミング解析を学ぶ (1/3) 、FPGAの動作スピードを改善するポイントとは? (1/2)を読んでから。ディレイ計算はゲートの出力側から入力側に向けて積算して求めるものと思っていた。

ソースはこちら:https://gist.github.com/houmei/5510474 

 コンパイル後、[Tools]→[Netlist Viewers]以下のツールで回路を見ることができる。
→[RTL Viewer]でRTLの、→[Technology Map Viewer(Post-Fitting)]で配置配線後の回路を表示する。

[RTL Viewer]
sll4_rtl 

[Technology Map Viewer(Post-Fitting)]
76MHz

 Compilation ReportのTimeQuest Timing Analyzerの項目に最大動作周波数が載っている。ここのSlow 1200mV 85C Modelを開く(電圧が低く、温度が高い方が厳しい条件となる)。 ここのFmax Summaryを見ると712.76MHzとあり、これが最大動作周波数。