Перейти к содержанию
    

частичная выборка индесков на Verilog.

Дано регистр

reg [40*8-1:0]dataPacket

 

Необходимо перебрать следующие его биты

 

[7:0]

[15:8]

и т.д.

 

как записывать эту комбинацию понятно

 

for (i = 0; i <= 39; i = i + 1)
                какойТоРегистр <= dataPacket[8*i+:8];

 

Как записать другие комбинации ?

[3:0]

[11:8]

[19:16]

и т.д.

Верно ли решение ?

for (i = 0; i <= 39; i = i + 1)
                какойТоРегистр <= dataPacket[8*i+:4];

 

 

И совсем не понятно мне, как сделать последную комбинацию

[7:4]

[15:12]

[23:20]

и т.д.

for (i = 0; i <= 39; i = i + 1)
                какойТоРегистр <= dataPacket[4+8*i+:4];

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что плохого в вашеи варианте?

какойТоРегистр <= dataPacket[4+8*i+:4];

я был не уверен, что это правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну можно же всегда попробовать в симуляторе :-).

можно. но на мой взгляд проше четко понимать, что ты описываешь, тогда и метаний между блокнотом и симулятором не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на мой взгляд проше четко понимать, что ты описываешь,

Ухвачена самая суть! Как только прорисуете на бумаге, что Вы хотите получить (физически, в терминах триггеров и комбинаторной логики), вопросы отпадут сами собой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для того, чтобы не плодить тем по простым вопросам, решил написать сюда.

 

Есть выражение:

 

thr1 <= (data_o > 32'd30) ? 1'b1 : 1'b0;
thr0 <= (data_o < -32'd30) ? 1'b1 : 1'b0;

Первая строчка работает исправно, вторая строчка выдает 0 при бОльших по модулю отрицательных числах вместо 1. В чем может быть дело?

Неужели в таком выражении нельзя использовать сравнение со знаковыми числами?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Первая строчка работает исправно, вторая строчка выдает 0 при бОльших по модулю отрицательных числах вместо 1. В чем может быть дело?

Неужели в таком выражении нельзя использовать сравнение со знаковыми числами?

типы данных приведите, иначе не понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

module signed_comp(
  input clk,
  input signed [31:0] data,
  
  output reg [1:0] thr
  );

  parameter int THR_LVL = 30;

  always_ff @(posedge clk)
    begin
      thr[0] <= (data > THR_LVL) ? '1 : '0;
      thr[1] <= (data < -THR_LVL) ? '1 : '0;
    end

endmodule

 

Костян, можно попробовать с многомерным массивом на sv

reg [39:0][1:0][3:0] dataPacket;

Тогда:

dataPacket[0] это dataPacket[7:0], dataPacket[1] это dataPacket[15:8] и т.д.

dataPacket[0][0] это dataPacket[3:0], dataPacket[0][1] это dataPacket[7:4] и т.д.

В циклах сделать 2 итератора. Вроде бы нагляднее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...