Ink1918 0 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба Вопрос простой, не ссудите строго за глупость. У модуля имеется input offset. Возможно ли как-то использовать его значение в операторе конкатенации, то есть примерно следующее: parameter DATA = 64; input offset; output [DATA-1:0] a; wire [DATA-1:0] b; wire [DATA-1:0] c; assign a = {b[offset*8-1:0], c[ 4'd8 * ( 4'd8 - offset) -1:0]}; Понятно, что так делать нельзя. Есть ли какие-то альтернативы или вариантов нет??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба Тут какой-то мультиплексор напрашивается, зачем ещё что-то выдумывать) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба Приветствую! 34 minutes ago, Ink1918 said: Вопрос простой, не ссудите строго за глупость. У модуля имеется input offset. Возможно ли как-то использовать его значение в операторе конкатенации, то есть примерно следующее: ... input offset; ... assign a = {b[offset*8-1:0], c[ 4'd8 * ( 4'd8 - offset) -1:0]}; Понятно, что так делать нельзя. Есть ли какие-то альтернативы или вариантов нет??? Можно но немного сложнее - так как выборка слайса переменной ширины из вектора запрещена то можно извратится cо сдвигами и масками. wire [DATA_WH-1:0] mask_c = {DATA_WH{1'b1}}>>(8*offset); assign a = (b<<(8*offset)) | (c & mask_c); Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ink1918 0 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба 20 minutes ago, doom13 said: Тут какой-то мультиплексор напрашивается, зачем ещё что-то выдумывать) ну, здесь конкретно я просто привел пример для наглядности, но в реальной жизни значение offseta может достигать большого значения, и мультиплексор мне видится не самым оптимальным решением, но, возможно, я и не прав) 17 minutes ago, RobFPGA said: Приветствую! Можно не немного сложнее - так как выборка слайса переменной ширины из вектора запрещена то можно извратится cо сдвигами и масками. wire [DATA_WH-1:0] mask_c = {DATA_WH{1'b1}}>>(8*offset); assign a = (b<<(8*offset)) | (c & mask_c); Удачи! Rob. спасибо, интересное решение) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться