【问题标题】:Double square braces双方括号
【发布时间】:2021-09-07 07:41:45
【问题描述】:

我正在尝试在 Verilog 中破译以下代码行:

assign ASIC_error_flag   = (StartTransfer & ~Bank_Slct[IO_Config_P2[13:12]]);

我怀疑这可能是否定总线“Bank_Slct”与总线IO_Config_P2 的第 13 位到第 12 位之间的比较,但我以前从未见过这样的总线内部的总线。这应该等同于什么?

【问题讨论】:

    标签: verilog brackets


    【解决方案1】:

    内方括号用于选择IO_Config_P2 信号的一部分,而外方括号又用于选择Bank_Slct 信号的一部分。

    假设您将 Bank_Slct 声明为 4 个字节的内存:

    reg [7:0] Bank_Slct [0:3];
    

    在这种情况下,您需要一个 2 位信号来选择 4 个字节之一(如内存地址)。表达式 IO_Config_P2[13:12] 是 2 位选择信号。

    IO_Config_P2[13:12] 等于2'b00 时,您选择的是字节Bank_Slct[0]

    IO_Config_P2[13:12]等于2'b01时,你选择的是字节Bank_Slct[1]

    另一种方法是创建一个单独的信号 (sel),然后使用它:

    wire [1:0] sel = IO_Config_P2[13:12];
    assign ASIC_error_flag = (StartTransfer & ~Bank_Slct[sel]);
    

    请参阅 IEEE Std 1800-2017,第 7.4.4 节 内存

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2014-07-22
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多