14.記述ガイドライン

記述上重要なのは、

がありますが、ここでは、論理合成対象としての注意点を列挙しておきます。

回路分割 合成単位としては、moduleになる。数千ゲート以下になるように分割したましょう。moduleの出力はFFの出力とするとタイミング制約を与えやすくなります。
FFの記述 always @(posedge clock or negedge reset)begin
    if (!reset) a<=xx;
    else    a<=xx;

<=のみ使用しましょう。は使用してはいけません。
また、 a<=#10 3'b000等書いても、論理合成では、Delayは合成できません。

一つのregを二つのalwaysで記述してはいけません。
Continous Assignment
(継続代入文)
wire a,b;
reg[3:0] c;
assign a=c[3];
assign b=c[3] & c[2];
簡単な組み合わせ回路の記述に有用。この例では、
aはC[3]信号の参照であって、HWは生成されない。(Cは生成される。)bは、組み合わせ回路となります。
alwaysを使用した組み合わせ回路 always @(a、b) begin
=> @の項(Sensibity List)には入力されるすべての項を列挙します。これが漏れていると組み合わせ回路ではなくラッチが生成されてしまうのは有名。また、左辺で定義した信号を右辺でも使うのは慎重にしましょう。
(ラッチの生成可能性がある。)記述は、<=使用せず、全て=だけとした方がよい。
非同期入力を複数のFFで受けない LSI設計の基本です。IFの仕様チェックは、LINT系ツールでも発見してくれません。一旦一つのFFで受けてから分配しましょう。
非同期回路 合成ツールでは全て同期設計としましょう。
Initial文 合成ツールではサポートされません。テストベンチだけの記述としてください。
初期化は、HWの仕事です。
Function文 組み合わせ回路の記述に有用。入力と出力が明確に分離されるため、意図しない回路を生成する可能性は低くくなります。