Круговой буфер: выбор диапазона индексов, включающих точку обтекания - PullRequest
0 голосов
/ 31 января 2020

Я думаю, что этот вопрос лучше всего понять на примере. Итак, здесь мы go:

Представьте себе, что определены следующие значения:

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.

По сути, я хочу взять 8 битов, начиная с (point_of_interest - number_of_points_before_point_of_interest) и заканчивая (point_of_interest - number_of_points_interest_before_point_of + 7.) -> 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 

Примечание: изменчивость банка не является проблемой во втором случае, поскольку начальная точка может быть переменной. Несмотря на это, part-select не дает желаемых результатов в этом примере.

Ваша помощь очень ценится. Заранее спасибо

1 Ответ

1 голос
/ 01 февраля 2020

Простой трюк, который вы можете сделать, это скопировать ваши test_data, а затем взять их кусочек

  output_data   = {2{test_data}}[16+pot-before_pot-:2*before_pot];
...