首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用凿子构建DspComplex ROM

用凿子构建DspComplex ROM
EN

Stack Overflow用户
提问于 2018-12-06 17:23:30
回答 1查看 176关注 0票数 3

我试图使用DSPComplex和FixedPoint类型构建一个基于ROM的窗口函数,但似乎始终遇到以下错误:

代码语言:javascript
复制
chisel3.core.Binding$ExpectedHardwareException: vec element 'dsptools.numbers.DspComplex@32' must be hardware, not a bare Chisel type

我尝试这样做的源代码如下:

代码语言:javascript
复制
class TaylorWindow(len: Int, window: Seq[FixedPoint]) extends Module {
    val io = IO(new Bundle {
        val d_valid_in = Input(Bool()) 
        val sample = Input(DspComplex(FixedPoint(16.W, 8.BP), FixedPoint(16.W, 8.BP)))
        val windowed_sample = Output(DspComplex(FixedPoint(24.W, 8.BP), FixedPoint(24.W, 8.BP)))
        val d_valid_out = Output(Bool()) 
    })
     val win_coeff = Vec(window.map(x=>DspComplex(x, FixedPoint(0, 16.W, 8.BP))).toSeq) // ROM storing our coefficients. 

    io.d_valid_out := io.d_valid_in
    val counter = Reg(UInt(10.W))

    // Implicit reset
    io.windowed_sample:= io.sample * win_coeff(counter)
    when(io.d_valid_in) {
        counter := counter + 1.U
    }
}
println(getVerilog(new TaylorWindow(1024, fp_seq)))

我实际上是从一个文件中读取系数(这个特定的窗口有一个复杂的生成函数,我在其他地方用Python完成了这个函数),步骤如下

代码语言:javascript
复制
val filename = "../generated/taylor_coeffs"
val coeff_file = Source.fromFile(filename).getLines
val double_coeffs = coeff_file.map(x => x.toDouble)
val fp_coeffs = double_coeffs.map(x => FixedPoint.fromDouble(x, 16.W, 8.BP))
val fp_seq = fp_coeffs.toSeq

这是否意味着DSPComplex类型无法被翻译成Verilog?注释掉win_coeff行似乎会使整个过程生成(但显然没有完成我希望它做的事情)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 19:13:20

我觉得你应该试着用

代码语言:javascript
复制
  val win_coeff = VecInit(window.map(x=>DspComplex.wire(x, FixedPoint.fromDouble(0.0, 16.W, 8.BP))).toSeq) // ROM storing our coefficients.

这会产生你想要的硬件值。Vec只是创建了一个特定类型的Vec。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53656686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档