for-loop - 显示错误输出的凿子代码
问题描述
这是字节选择器的代码
class Comp extends Module {
val io = IO(new Bundle {
val in = Input(UInt(25.W))
val out = Output(UInt(25.W))
val i = Input(UInt(4.W))
val out0 = Output(UInt(5.W))
val out1 = Output(UInt(5.W))
})
val r8 = Wire(UInt(5.W))
io.out := Reverse(io.in)
for (i <- 0 to 20 by 5)
{
io.out0 := io.out (i+4, i)
when(io.out0 === 31.U) {
r8 := 0.U
}.elsewhen(io.out0 === 0.U) {
r8 := 31.U
}.elsewhen(io.out0 === 17.U) {
r8 := 14.U
}.elsewhen(io.out0 === 14.U) {
r8 := 17.U
}.otherwise {
r8 := 27.U
}
io.out1 := r8
}
这仅选择字节,20 to 24
即何时i = 20
而不是其余字节。每次我得到输出为 27 时,for 循环选择最重要的 5 位。有人可以帮忙吗?
解决方案
scala for 循环类似于 VHDL 中的 GENERATE,您必须将其视为以下的多重声明:
io.out0 := io.out (i+4, i)
您可以将其视为以下代码:
io.out0 := io.out (4, 0)
io.out0 := io.out (8, 5)
io.out0 := io.out (14, 10)
io.out0 := io.out (18, 15)
io.out0 := io.out (24, 20)
符号':='是信号之间的连接。上述代码的每一行都被视为擦除旧连接的新连接。
那么只有最后一个连接会被真正使用。
要根据需要进行连接,您必须更改(我认为)io.out的声明并使用如下索引:
for ( i <- 0 to 20 by 5)
{
io.out(i) := io.out (i+4, i)
}
将 io.out 声明为向量 (Vec())
推荐阅读
- java - 如何通过端口获取tomcat进程ID并结束该进程
- php - 无法显示 ajax 结果 WordPress
- c++ - Bazel 使用 soname 创建 C++ 共享库
- javascript - AngularJS ng-repeat 在地图(对象)上不实时更新 DOM
- azure - CosmosDB 表 API - 此 API 不支持 CORS 规则
- jquery - 查找包含相同文本的每组 div 的第一个实例
- gradle - 使用 Gradle 在 Dagger 2 中插入组件模块
- javascript - 请求函数中的 NodeJS 全局变量
- spring - Spring Session 不使用自定义 RedisTemplate bean
- php - 如何让我的会话数据正确存储?