私は、新しい機能とロジックをデータパスに実装した Z-Scale RISCV プロセッサに取り組んでいます。一連の if ループを使用せずに、コードの特定の部分を「電源オフ」する簡単な方法が存在するかどうか疑問に思っています。Zスケールプロセッサの通常実装と拡張実装の切り替えを簡単にしたい。
私が実装した新しいロジックは、データパスの主要コンポーネントを置き換えるものではなく、機能を拡張するものです。
私は、新しい機能とロジックをデータパスに実装した Z-Scale RISCV プロセッサに取り組んでいます。一連の if ループを使用せずに、コードの特定の部分を「電源オフ」する簡単な方法が存在するかどうか疑問に思っています。Zスケールプロセッサの通常実装と拡張実装の切り替えを簡単にしたい。
私が実装した新しいロジックは、データパスの主要コンポーネントを置き換えるものではなく、機能を拡張するものです。
コードは次のようになります。
val a = Wire(UInt())
if (extension)
a := 1.U
else
a := 2.U
できることは、2 つの設計の違いを含む特性を実装する Z スケール クラスと Z スケール拡張クラスを作成することです。
trait RISC_V_Processor {
def do_a : UInt
}
class Z_Scale with RISC_V_Processor {
def do_a : UInt = 2.U
}
class Z_Scale_extended with RISC_V_Processor {
def do_a : UInt = 1.U
}
val processor = new Z_Scale_extended()
val a = processor.do_a()
これは基本的に、条件をポリモーフィズムに置き換えています。 https://sourcemaking.com/refactoring/replace-conditional-with-polymorphism