логические операции над многомерными массивами в verilog - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть многомерный массив, как показано ниже.

reg [3:0] varname [`KEY-1:0];

Я хочу проверить, является ли хотя бы один элемент в массиве эквивалентным 4'b1111 или 4'b1110

Что такоеСамый простой и лучший способ сделать это?

1 Ответ

0 голосов
/ 25 сентября 2018

Если 'KEY маленький и постоянный, как вы знаете, то лучше использовать простую логику для каждой строки (пример для i-й строки)

if((varname[i] && 4'b1111) || (varname[i] && 4'b1110) )

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

output reg equivalent_detected;
reg counter;
initial
begin
     equivalent_detected = 1'b0;
     counter = 0;
end

always@(posedge clk)
begin

if((varname[counter] && 4'b1111) || (varname[counter] && 4'b1110) )
     equivalent_detected <= 1'b1;
counter <= counter + 1;

end // end of always block

. Вы можете использовать вышеупомянутые коды в своем модуле. Если вы используете в качестве выходных данных эквивалентный_детект, то всякий раз, когда вы получаете 1, это означает, что вы обнаружили 4 'b1111 или 4'b1110.Вы можете еще улучшить этот код и сделать его лучше, я просто хотел дать вам некоторое представление.

...