【发布时间】: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 中破译以下代码行:
assign ASIC_error_flag = (StartTransfer & ~Bank_Slct[IO_Config_P2[13:12]]);
我怀疑这可能是否定总线“Bank_Slct”与总线IO_Config_P2 的第 13 位到第 12 位之间的比较,但我以前从未见过这样的总线内部的总线。这应该等同于什么?
【问题讨论】:
内方括号用于选择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 节 内存。
【讨论】: