scala VexRiscv中使用的StaticMemoryTranslatorPlugin的组合逻辑表达式

yuvru6vn  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(195)

我想使用2个静态内存区域的Vexriscv SoC使用SpinalHdl。
我几乎没有使用SpinalHdlScala的经验,所以我可能遗漏了一个小细节。

  • 我尝试这样示例化2个StaticMemoyTranslatorPlugins:
  1. plugins ++= List(
  2. new StaticMemoryTranslatorPlugin(
  3. ioRange = _.msb
  4. ),
  5. new StaticMemoryTranslatorPlugin(
  6. ioRange = _(31 downto 16) === 0x0001
  7. ))

这会在CPU生成过程中产生异常。

  1. [error] Exception in thread "main" java.lang.AssertionError: assertion failed: ??? vexriscv.MemoryTranslator
  2. [error] at scala.Predef$.assert(Predef.scala:170)
  3. [error] at spinal.core.package$.assert(core.scala:467) .....
  • 我尝试的另一种方法是组合逻辑表达式,如下所示:
  1. new StaticMemoryTranslatorPlugin(
  2. ioRange = ( _.msb ) || ( _(31 downto 16) === 0x0001 )
  3. )

这给了我一个关于扩展函数的刻度误差:

  1. [error] /home/svhb/dev/JifHybrid/cpu/VexRiscv/src/main/scala/vexriscv/demo/VexRiscv_vdw_1.scala:125:36: missing parameter type for expanded function ((x$1) => x$1.msb)
  2. [error] ioRange = ( _.msb ) || ( _(31 downto 16) === 0x0001 )
  3. [error] ^
  4. [error] one error found

有谁能给我指个方向吗?

um6iljoc

um6iljoc1#

正如我所想的那样,这是因为我对Scala语法本身缺乏了解。
我必须完全指定函数,以便在irange函数上做一些额外的逻辑表达式!

  1. new StaticMemoryTranslatorPlugin(
  2. ioRange = a => (a.msb) || (a(31 downto 16) === 0x0001)
  3. )

不是只使用:ioRange=(.msb)||((31向下到16)=0x0001)
祝你有愉快的一天;)

相关问题