【问题标题】:Why this chisel code compiling without error with wrong size UInt assignement?为什么这个凿子代码编译时没有错误的大小单位分配?
【发布时间】:2019-12-17 11:55:31
【问题描述】:

我在顶部RawModule 中声明了这样的模块端口(这是一个错误):

class TopMyModule extends RawModule {
...
  val enet1_tx_data0 = IO(Output(Bool()))
  val enet1_tx_data1 = IO(Output(Bool()))
...
  val tx1data = IO(Output(Bool()))
...

并像这样连接它:

  tx1data := enet1_tx_data1 ## enet1_tx_data0

'##' 操作符应该将一个大小为 no 的向量中的两个位连接起来? 但它正在编译没有任何错误。 如果我正在查看 verilog 生成的代码,我看到连接已完成,但只有最低有效位用于输出:

...
  wire [1:0] _T_1; // @[spiDualkszRmiiChecker.scala 73:29]
...
  assign _T_1 = {enet1_tx_data1,enet1_tx_data0}; // @[spiDualkszRmiiChecker.scala 73:29]
...
  assign tx1data = _T_1[0]; // @[spiDualkszRmiiChecker.scala 73:11]

在我看来 tx1data 应该被声明为 2 位 UInt

  val tx1data = IO(Output(UInt(2.W)))

但我很惊讶第一个版本没有产生任何错误。

【问题讨论】:

    标签: hdl chisel


    【解决方案1】:

    我相信这是一个原创的设计决定,有些人喜欢,有些人不喜欢。关于这个问题有很好的讨论Remove implicit width truncation / Don't repeat Verilog's assignment issue in Chisel #1163。请随时加入。

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      相关资源
      最近更新 更多