我想使用2个静态内存区域的Vexriscv SoC使用SpinalHdl。
我几乎没有使用SpinalHdl和Scala的经验,所以我可能遗漏了一个小细节。
- 我尝试这样示例化2个StaticMemoyTranslatorPlugins:
plugins ++= List(
new StaticMemoryTranslatorPlugin(
ioRange = _.msb
),
new StaticMemoryTranslatorPlugin(
ioRange = _(31 downto 16) === 0x0001
))
这会在CPU生成过程中产生异常。
[error] Exception in thread "main" java.lang.AssertionError: assertion failed: ??? vexriscv.MemoryTranslator
[error] at scala.Predef$.assert(Predef.scala:170)
[error] at spinal.core.package$.assert(core.scala:467) .....
- 我尝试的另一种方法是组合逻辑表达式,如下所示:
new StaticMemoryTranslatorPlugin(
ioRange = ( _.msb ) || ( _(31 downto 16) === 0x0001 )
)
这给了我一个关于扩展函数的刻度误差:
[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)
[error] ioRange = ( _.msb ) || ( _(31 downto 16) === 0x0001 )
[error] ^
[error] one error found
有谁能给我指个方向吗?
1条答案
按热度按时间um6iljoc1#
正如我所想的那样,这是因为我对Scala语法本身缺乏了解。
我必须完全指定函数,以便在irange函数上做一些额外的逻辑表达式!
不是只使用:ioRange=(.msb)||((31向下到16)=0x0001)
祝你有愉快的一天;)