【发布时间】: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)))
但我很惊讶第一个版本没有产生任何错误。
【问题讨论】: