griha-leha 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба доброго времени суток. Подскажите пожалуйста как решить подобную проблему: в произвольном модуле есть строка assign a = var_1 & var_2 & ... & var_n; при этом все переменные m - разрядные. Чтобы не передавать в модуль все n переменных в модуль, была передана переменная input [m*n-1:0] var, Возник попрос, как, собственно, теперь вычислить переменную а? Проблема не в том, чтобы передать в модуль нужное количество переменных, а в том, что заранее не известно, сколько раз писать, например, логическое умножение. Как воспользоваться циклами или generate-ами - не придумал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ИнЖеНиГеР 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба доброго времени суток. Подскажите пожалуйста как решить подобную проблему: в произвольном модуле есть строка assign a = var_1 & var_2 & ... & var_n; при этом все переменные m - разрядные. Чтобы не передавать в модуль все n переменных в модуль, была передана переменная input [m*n-1:0] var, Возник попрос, как, собственно, теперь вычислить переменную а? Проблема не в том, чтобы передать в модуль нужное количество переменных, а в том, что заранее не известно, сколько раз писать, например, логическое умножение. Как воспользоваться циклами или generate-ами - не придумал. assign a=&var Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
griha-leha 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба assign a=&var боюсь, что такая запись сработает как побитное логическое умножение, то есть переменная размера М*Н превратится в 1 бит. Если же явным образом указать размерность, то есть assign a[m-1:0]=&var[как ее указать тут?] , не уверен, что сработает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ИнЖеНиГеР 0 26 июля, 2012 Опубликовано 26 июля, 2012 · Жалоба боюсь, что такая запись сработает как побитное логическое умножение, то есть переменная размера М*Н превратится в 1 бит. Если же явным образом указать размерность, то есть assign a[m-1:0]=&var[как ее указать тут?] , не уверен, что сработает. Прошу прощения. Не дочитал про разрядность. боюсь, что такая запись сработает как побитное логическое умножение, то есть переменная размера М*Н превратится в 1 бит. Если же явным образом указать размерность, то есть assign a[m-1:0]=&var[как ее указать тут?] , не уверен, что сработает. Попробуйте вот так: module test #(parameter N=8,M=4) ( input [N*M-1:0]var_n, output [M-1:0]A ); genvar i; generate assign A[0]=&var_n[N-1:0]; for(i=1;i<M;i=i+1) begin: ABC assign A[i]=&var_n[(i+1)*N-1:N*(i-1)+N]; end endgenerate endmodule RTL: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость urri 27 июля, 2012 Опубликовано 27 июля, 2012 · Жалоба always @(*) begin a = {N{1.b1}}; for (i=0; i<M; i=i+1) a= a & var[(i+1)*N-1 : i*N]; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 27 июля, 2012 Опубликовано 27 июля, 2012 · Жалоба Дело вкуса, но для меня так нагляднее: always @(*) begin a = {N{1'b1}}; for (i=0; i<M; i=i+1) a = a & var[i*N +: N]; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
griha-leha 0 30 июля, 2012 Опубликовано 30 июля, 2012 · Жалоба Дело вкуса, но для меня так нагляднее: always @(*) begin a = {N{1'b1}}; for (i=0; i<M; i=i+1) a = a & var[i*N +: N]; end Как я понимаю, запись var[i*N +: N] подобна var[(i+1)*N-1 : i*N], но почуму же тогда моделсим ругается плохими словами Range must be bounded by constant expressions, если указать var[(i+1)*N-1 : i*N], но при этом все замечательно с var[i*N +: N]? Буду признателен, если немного поясните. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksimp 0 30 июля, 2012 Опубликовано 30 июля, 2012 · Жалоба но почуму же тогда моделсим ругается плохими словами , если указать var[(i+1)*N-1 : i*N], но при этом все замечательно с var[i*N +: N]? Ему хочется чтобы ширина шины не зависела от переменной, то есть от i. Разность выражений (i+1)*N-1 и i*N от i действительно не зависит, но для того чтобы это понять нужна система символьной алгебры, которой в моделсиме нет. А в варианте var[i*N +: N] ширина записано явно - N, которая константа, и легко видно что она не зависит от переменных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться