- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法确定使用新的 ChiselTest 框架将 signed int 转换为 unsigned int 以进行单元测试的正确方法。
这是我一直用来对 ALU 进行单元测试的方法(例如 16 位),问题是它不可扩展:
test(new ALU) { c =>
...
/* Sub */
c.io.ctl.poke(Control.ALU_SUB)
c.io.src0.poke(4321.U)
c.io.src1.poke(1234.U)
c.io.out.expect(3087.U)
c.io.src0.poke(1234.U)
c.io.src1.poke(4321.U)
c.io.out.expect("b_1111_0011_1111_0001".U) /* 2's compliment */
}
此方法的问题是,当我生成一个 32 位 ALU(输出一个无符号整数)时,单元测试将失败,因为使用上面的 hacky 字符串方法,字符串将零扩展到 32 位...
我想像这样重写测试:
test(new ALU) { c =>
/* Sub */
c.io.ctl.poke(Control.ALU_SUB)
c.io.src0.poke(4321.U)
c.io.src1.poke(1234.U)
c.io.out.expect(3087.U)
c.io.src0.poke(1234.U)
c.io.src1.poke(4321.U)
c.io.out.expect(-3087.S.asUInt)
}
但是,尽管设计确实很精细,但我收到以下错误:
[error] (run-main-9) chisel3.internal.ChiselException: Error: Not in a UserModule. Likely cause: Missed Module() wrap, bare chisel API call, or attempting to construct hardware inside a BlackBox.
[error] chisel3.internal.ChiselException: Error: Not in a UserModule. Likely cause: Missed Module() wrap, bare chisel API call, or attempting to construct hardware inside a BlackBox.
[error] at chisel3.internal.throwException$.apply(Error.scala:85)
[error] at chisel3.internal.Builder$.forcedUserModule(Builder.scala:298)
[error] at chisel3.internal.Builder$.pushOp(Builder.scala:336)
[error] at chisel3.SInt.do_asUInt(Bits.scala:925)
[error] at cpu.alu$.$anonfun$new$2(Main.scala:26)
[error] at cpu.alu$.$anonfun$new$2$adapted(Main.scala:18)
[error] at chiseltest.backends.treadle.TreadleBackend.$anonfun$run$1(TreadleBackend.scala:144)
[error] at chiseltest.internal.ThreadedBackend$TesterThread$$anon$1.$anonfun$run$1(ThreadedBackend.scala:453)
[error] at chiseltest.backends.treadle.TreadleBackend.doTimescope(TreadleBackend.scala:103)
[error] at chiseltest.internal.ThreadedBackend$TesterThread$$anon$1.run(ThreadedBackend.scala:453)
[error] at java.lang.Thread.run(Thread.java:748)
[error] stack trace is suppressed; run last Test / bgRunMain for the full output
[error] Nonzero exit code: 1
[error] (Test / runMain) Nonzero exit code: 1
我想不出解决这个问题的正确方法。任何帮助将不胜感激。
作为引用,ALU 非常简单,这是 ALU 类:
class ALU extends Module {
val io = IO(new Bundle {
val ctl = Input(UInt(Control.ALU_BITWIDTH))
val src0 = Input(UInt(Instructions.WORD_SIZE.W))
val src1 = Input(UInt(Instructions.WORD_SIZE.W))
val out = Output(UInt(Instructions.WORD_SIZE.W))
})
val shift = io.src1(3,0).asUInt
/* Lookup the operation to execute */
io.out := MuxLookup(io.ctl, 0.U, Seq(
Control.ALU_ADD -> (io.src0 + io.src1),
Control.ALU_SUB -> (io.src0 - io.src1),
Control.ALU_AND -> (io.src0 & io.src1),
Control.ALU_OR -> (io.src0 | io.src1),
Control.ALU_XOR -> (io.src0 ^ io.src1),
Control.ALU_NOT -> (~io.src0),
Control.ALU_SLL -> (io.src0 << shift),
Control.ALU_SRL -> (io.src0 >> shift),
))
}
最佳答案
这感觉有点恶心,但至少它是可扩展的(也许是一个可能的解决方案?)...我仍然对在测试框架中将 SInt 转换为 UInt 的最佳方式感兴趣。
/* Sub */
c.io.ctl.poke(Control.ALU_SUB)
c.io.src0.poke(4321.U)
c.io.src1.poke(1234.U)
c.io.out.expect(3087.U)
c.io.src0.poke(1234.U)
c.io.src1.poke(4321.U)
def bitwidth = 16 // for example
def max = scala.math.pow(2,bitwidth).toInt
c.io.out.expect((max-3087).U)
关于scala - 凿子测试 : Cast a signed int to unsigned int for an expected value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66294784/
我不知道下面的代码有什么问题,它应该读取数字并将它们的值与位置放在一个成对的 vector 中,然后对它们进行排序并打印出位置。我用 sort 删除了部分 - 我认为问题就在那里,但我再次收到编译错误
我相信当您将两个 unsigned int 值相加时,返回值的数据类型将是 unsigned int。 但是两个 unsigned int 值相加可能会返回一个大于 unsigned int 的值。
我从左移得到的结果我找不到解释。 unsigned char value = 0xff; // 1111 1111 unsigned char = 0x01; // 0000 0001 std::c
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
根据:http://en.wikipedia.org/wiki/C_data_types您可以使用 unsigned short 类型或 unsigned short int 类型。但是它们之间有什么
我正在尝试在 arduino 草图中实现 CRC16。从网上拿到了crc.c文件,想试试看。我创建了其他文件以允许 crc.c 正确运行。这是我的文件。 crc.h: #ifndef CRC_C_ #
我正在尝试实现一个将存储相关索引的列表。但是,我在标题中提到的 for (index_itr = (list_size - numberOfEvents - 1) 处遇到错误。我在做什么错误,以及如何
这不是跨平台代码...所有内容都在同一平台上执行(即字节序是相同的......小字节序)。 我有这个代码: unsigned char array[4] = {'t', 'e', 's', '
我有一个 8 位 unsigned char vector 和一个 16 位 unsigned short vector std::vector eight_bit_array; std::vecto
这个问题在这里已经有了答案: Is subtracting larger unsigned value from smaller in C++ undefined behaviour? (2 个答案
这个问题已经有答案了: Difference between unsigned and unsigned int in C (5 个回答) 已关闭 6 年前。 在 C 语言中,unsigned 之间有
我遇到了一个我不太理解的警告。该警告是通过比较我认为是一个未签名的内容与另一个未签名的内容而生成的。 来源如下: #include #include #include #include int
好吧,这一定很愚蠢。我在移动一些代码时遇到了这个问题,并认为我打错了字或未能正确使用调试器。作为健全性检查,我创建了这个测试用例,但它似乎仍然失败。 unsigned int vtxIdx
我有一个同事不热衷于使用现代 C++ 例如,当我要求他开始使用 r_value 引用时,他不会这样做。当我要求他使用 std::array 而不是 c 数组(char example[8])时,他不会
我有一个无符号字符数组,例如Data[2]。我需要它来与返回 unsigned int 的函数的输出进行比较。 我尝试将 Data[2] 转换为 unsigned int,反之亦然。它没有用。 我想做
我遇到了一个我不太明白的警告。警告是通过将我认为是未签名的与另一个未签名的进行比较而生成的。 这是来源: #include #include #include #include int mai
在下面的程序中,我使用了 unsigned 关键字。 #include int main() { unsigned char i = 'A'; unsigned j
整数值转换为浮点值并再次返回时是否与原始整数值相同? 例如: unsigned x = 42; double y = x; unsigned z = y; 假设编译器没有优化浮点转换,x == z 是
这个问题在这里已经有了答案: Difference between unsigned and unsigned int in C (5 个答案) 关闭 9 年前。 我理解 unsigned 和 un
您好,我遇到了一个关于位运算的小概念问题。请参阅下面的代码,其中我有一个 4 字节的无符号整数。然后我通过将地址分配给无符号字符来访问各个字节。 然后我将最后一个字节的值设置为 1。并对 unsign
我是一名优秀的程序员,十分优秀!