NeoN 0 8 декабря, 2004 Опубликовано 8 декабря, 2004 · Жалоба Собственно ворос, как обратиться к i-тому бита j-того вектора массива. Такой вариант работает, но выглядит странновато: reg [n:0] x[m:0]; wire y; wire [n:0] tmp; assign tmp = x[j]; assign y = tmp; А такой не работает, естественно: reg [n:0] x[m:0]; wire y; assign y = x[j]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Серокой 0 8 декабря, 2004 Опубликовано 8 декабря, 2004 · Жалоба А такой не работает, естественно: reg [n:0] x[m:0]; wire y; assign y = x[j]; <{POST_SNAPBACK}> У меня в ModelSim прокатывает такой вариант, надо было в цикле побайтно читать из массива: reg [63:0] prog_line [0:99]; <...> A = prog_line [i] [63:56]; А вот NCSim под Линуксом такое уже не переварил, пришлось написать так: reg [63:0] prog_line [0:99]; reg [63:0] prog_line_0; <...> prog_line_0 = prog_line [i]; A = prog_line_0 [63:56]; По крайней мере хоть это и странно выглядит, но такой вариант имеет больше шансов работать на понимающих верилог компиляторах. Только у меня без assign, это reg, а не wire. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 24 декабря, 2004 Опубликовано 24 декабря, 2004 · Жалоба Обычно такой вопрос не стоит, при синтезе модели конструкция массива будет аналогоична массиву памяти, доступ к отдельным битам памяти невозможен, только через запись в промежуточный буфер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 24 декабря, 2004 Опубликовано 24 декабря, 2004 · Жалоба assign y = x[j]; <{POST_SNAPBACK}> а разве верилог позволяет указывать переменные границы массива в правой части оператора присваивания?.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 27 декабря, 2004 Опубликовано 27 декабря, 2004 · Жалоба а разве верилог позволяет указывать переменные границы массива в правой части оператора присваивания?.. могу сказать про верилоги "до 2000" - там с массивом нужно либо через assign либо в цикле присваивать регистру "строку" из массива и работать с ней в обоих случаях никакой дополнительной логики не синтезируется. а в верилогах 2000-2003 вроде есть какие-то манипуляции с массивами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cdg 0 10 февраля, 2005 Опубликовано 10 февраля, 2005 · Жалоба А такой вариант не пробовали? reg [n:0] x[m:0]; wire y; assign y = x[j*(m+1)+i]; при желании [j*(m+1)+i] можно в функцию вынести Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NeoN 0 10 февраля, 2005 Опубликовано 10 февраля, 2005 · Жалоба Это не то - x[] в данном случае будет иметь тип вектора размероности n:0, т.е. присвоение будет брать только младший бит каждого вектора массива. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cdg 0 11 февраля, 2005 Опубликовано 11 февраля, 2005 · Жалоба Пардон! Поспешил! Тогда с использованием сдвига: reg [n:0] x[m:0]; wire y; assign y = (x[j*(m+1)])>> i; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NeoN 0 11 февраля, 2005 Опубликовано 11 февраля, 2005 · Жалоба Опять поспешил :) Прокатывает такая конструкция, но с кучей warning'ов: assign y = x[j]>> i; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cdg 0 11 февраля, 2005 Опубликовано 11 февраля, 2005 · Жалоба Это и имелось в виду :) :) :) , а что за варнинги и кто их выдает (программа?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skv 0 30 марта, 2005 Опубликовано 30 марта, 2005 · Жалоба Такой вариант работает, но выглядит странновато: reg [n:0] x[m:0]; wire y; wire [n:0] tmp; assign tmp = x[j]; assign y = tmp; И ничего странного в этом нет. Это единственный на данный момент вариант, который будет работать везде. Объяснение этому - стандарт Verilog. Нельзя присвоить часть бит одного элемента массива. Только элемент в целом. Это касается и регистров и шин. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться