我认为这个问题最好通过一个例子来理解。所以我们开始:
想象以下定义:
parameter number_of_points_before_point_of_interest = 4;
logic [15:0] test_data = 16'b0000111100001111;
logic [3: 0] point_of_interest;
logic [7: 0] output_data;
如果分配给point_of_interest的值是1而分配给number_of_points_before_point_of_interest的值是4。我希望我的output_data是{test_data [E:F],test_data [5:0]}或8'b00111100。
所以本质上,我想从(point_of_interest-number_of_points_before_point_of_interest)到(point_of_interest-number_of_points_before_point_of_interest + 7)。
由于point_of_interest是一个可变数字,因此以下两种索引方法无效:
为了使代码更简洁:point_of_interest-> pot
point_of_points_before_point_of_interest-> num_pt_before_pot
buffer[pot - num_pt_before_pot: 4'hF] // Invalid since pot not constant
buffer[pot -: num_pt_before_pot] // Part-select doesn't work either
注意:在第二种情况下锅的可变性不是问题,因为起点可以变化。无论如何,在此示例中,部分选择不能提供理想的结果。
非常感谢您的帮助。在此先感谢
您可以做的一个简单技巧就是复制您的test_data,然后对其进行切片
output_data = {2{test_data}}[16+pot-before_pot-:2*before_pot];