Posts Tagged with "BSV"

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.
posted by sakurai on October 9, 2023 #674

Maybeを使用した制御パイプラインをbscで合成し、生成されたverilogコードの一部を示します。

  // submodule ifs                                                                                                                        
  assign ifs$D_IN = { 1'd1, pc } ;
  assign ifs$ENQ = ifs$FULL_N ;
  assign ifs$DEQ = WILL_FIRE_RL_if_stage && !if_wait ;
  assign ifs$CLR = 1'b0 ;

  // rule RL_if_stage                                                                                                                     
  assign WILL_FIRE_RL_if_stage = ids$FULL_N && ifs$EMPTY_N ;

  // submodule ids                                                                                                                        
  assign ids$D_IN = { !if_wait && ifs$D_OUT[32], ifs$D_OUT[31:0] } ;
  assign ids$ENQ = WILL_FIRE_RL_if_stage ;
  assign ids$DEQ = WILL_FIRE_RL_id_stage  && !mc_wait ;
  assign ids$CLR = 1'b0 ;

  // rule RL_id_stage                                                                                                                     
  assign WILL_FIRE_RL_id_stage = exs$FULL_N && ids$EMPTY_N ;

図674.2はこのコードを回路図に変換したものです。ハードウエア設計者はHDLコードよりもstaticな回路図のほうが理解し易いです。

図%%.1
図674.1 制御パイプライン構造

各ステージ中のwait信号で上流方向は止めますが(中段左側のAND)、下流方向は止めずに(下段のAND)さらに下流にinvalidを流す(上段のAND)ところが、より単純な図673.1のデータパイプラインとの違いです。


左矢前のブログ 次のブログ右矢


ページ: