That syntax is called anindexed part-select. The first term is the bit offset and the second term is the width. It allows you to specify a variable for the offset, but the width must be constant. Example from the SystemVerilog 2012 LRM: logic [31:0] a_vect; logic [0:31] b_vect;...
if(part_select.id() == ID_verilog_indexed_part_select_plus) { bottom = index_int - src_offset; top = bottom + width - 1; } else // ID_verilog_indexed_part_select_minus { top = index_int - src_offset; bottom = bottom - width + 1; } Collaborator tautschnig Oct...
// Alternatively, "indexed vector part select" works better, but has an unfamiliar syntax: // assign out = in[sel*4 +: 4]; // Select starting at index "sel*4", then select a total width of 4 bits with increasing (+:) index number. // assign out = in[sel*4+3 -: 4]; //...
这是Verilog2001新加的语法:Verilog-2001向量部分选择 在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行part select。 代码语言:javascript 复制 [base_expr+:width_expr]//positive offset[base_ex...
在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行part select。 [base_expr +: width_expr] //positive offset [base_expr -: width_expr] //negative offset ...
Verilog-2001标准新增了对变量的部分选择(part select),同样也可综合。 SystemVerilog标准会将向量推断为压缩数组(packed array),以表示向量代表一个连续存储的bit数组。SystemVerilog还新增的一个重要功能:允许使用多个范围将向量划分为多个分区(subfields)。例如: 多维压缩数组,以及多位压缩数组的选择(selections within ...
在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行part select。 [base_expr+:width_expr] //positive offset [base_expr-:width_expr] //negative offset ...
$display ("data[0:9] = 0x%0h", data[0:9]); // Error : Reversed part-select index expression ordering end endmodule 1. 2. 3. 4. 5. 6. 7. 这个常见的错误,就是混用msb以及lsb的风格导致的,再次强调,统一风格,msb在做,lsb在右!
而在Verilog-2001中,可以用变量作为index,进行part select。 [base_expr+:width_expr] //positive offset [base_expr-:width_expr] //negative offset 其中base_expr可以是变量,而width_expr必须是常量。+:表示由base_expr向上增长width_expr位,-:表示由base_expr向上递减width_expr位。例如: reg [63:0] ...
Secondly, the "range" select problem can be solved in Verilog by a construct called indexed part select, see an example from Std IEEE 1364, particularly the last line: reg big_vect; reg little_vect; reg dword; integer sel; big_vect // == big_vect big_vect // == big_vect little...