gpt4 book ai didi

chisel - 使用 Cat 运算符(operator)维护 FIRRTL 上的连接顺序

转载 作者:行者123 更新时间:2023-12-02 08:17:33 27 4
gpt4 key购买 nike

我想询问以下问题的任何想法:我想将宽度为 787:0 位的名为 dut 的 block 的输入端口连接到字节接口(interface)。我正在做如下:

val io = this.IO(new VerilatorHarnessIO(input_byte_count, output_byte_count*2))
val dut = Module(new DUT(dut_conf))

// inputs
val input_bytes = Cat(io.input_bytes)
val input_width = input_byte_count * 8
dut.io.inputs := input_bytes(input_width-1, input_width - dut_conf.inputBits)

我希望保留连接的顺序,即:

Byte_0[7:0] ->输入[7:0]

Byte_1[7:0] ->输入[15:8]

但是我得到的是:

Byte_0[7:0] ->输入[787:780]

Byte_1[7:0] ->输入[779:772]

如果端口匹配,调试会容易得多。

有没有办法以正确的顺序建立此连接?谢谢您

最佳答案

Cat 之前使用 reverse 方法应该执行您想要的操作。

考虑以下凿子:

import chisel3._
import chisel3.stage.{ChiselStage, ChiselGeneratorAnnotation}
import chisel3.util.Cat

class Foo extends RawModule {
val in = IO(Input(Vec(4, UInt(8.W))))
val out = IO(Output(UInt(32.W)))

out := Cat(in.reverse)
}

(new ChiselStage)
.execute(Array.empty, Seq(ChiselGeneratorAnnotation(() => new Foo)))

这会生成以下 Verilog,其中字节按照您要查找的顺序排列:

module Foo(
input [7:0] in_0,
input [7:0] in_1,
input [7:0] in_2,
input [7:0] in_3,
output [31:0] out
);
wire [15:0] _T; // @[Cat.scala 29:58]
wire [15:0] _T_1; // @[Cat.scala 29:58]
assign _T = {in_1,in_0}; // @[Cat.scala 29:58]
assign _T_1 = {in_3,in_2}; // @[Cat.scala 29:58]
assign out = {_T_1,_T}; // @[<pastie> 25:7]
endmodule

关于chisel - 使用 Cat 运算符(operator)维护 FIRRTL 上的连接顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58875230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com