TRILLER 0 16 января, 2021 Опубликовано 16 января, 2021 · Жалоба Здравствуйте, коллеги! Предпочитаю в выражениях явно приводить размерность вектора к необходимой разрядности, однако появилась потребность разобраться с приведением разрядности по стандарту. Есть непонятный момент, нужна помощь.. Изучаю этот вариант стандарта IEEE_Std_1800-2012 SystemVerilog(для верилога написано то же самое) : IEEE_Std_1800-2012 SystemVerilog.pdf Разрядность векторов саомоопеределённом выражении вычисляется согласно таблице 11-21 на странице 248: Spoiler Однако есть и контекстно-определённые выражения. Примеры из документа: logic [15:0] a, b; // 16-bit variables logic [15:0] sumA; // 16-bit variable logic [16:0] sumB; // 17-bit variable sumA = a + b; // expression evaluates using 16 bits sumB = a + b; // expression evaluates using 17 bits Здесь всё понятно - учитывается разрядность вектора слева от оператора " = " Далее они приводят пример, где суммирование с числом 0(int = 32bit) расширяет контекст всего выражения и не допускает потери информации при выполнении первого оператора " + ": answer = (a + b + 0) >> 1; // will work correctly Отсюда я делаю вывод, что контекстом является всё выражение, а не только то, что стоит слева от оператора " = ". Т.е. при выполнении первого оператора " + " a и b уже будут расширены до 32 бит. Пока что тоже всё логично. А вот далее следует непонятное.. logic [3:0] a; logic [5:0] b; logic [15:0] c; c = {a**b}; // expression a**b is self-determined, 4 bits c = a**b; // expression size is determined by c, 16 bits Почему конкатенация не учитывает контекст, а возведение в степень - учитывает? Ведь и тот, и другой оператор присутствуют в приведенной выше таблице самооперделённых выражений. И будет ли учитывать контекст, к примеру, оператор " << " ? logic [3:0] a; logic [15:0] c; c = a << 1; // expression size is ? Почему разработчики не разделили таблицу на 2: операторы, учитывающие контекст, и игнорирующие его? Благодарю за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TRILLER 0 16 января, 2021 Опубликовано 16 января, 2021 · Жалоба Пока писал - разобрался! Тему можно удалить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 16 января, 2021 Опубликовано 16 января, 2021 · Жалоба Приветствую! 13 minutes ago, TRILLER said: Пока писал - разобрался! Тему можно удалить. Зачем же удалять, раз разобрались поделитесь! Для других будет полезно, да и самому через какое то время может пригодится вспомнить Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 16 января, 2021 Опубликовано 16 января, 2021 · Жалоба 16 минут назад, TRILLER сказал: Пока писал - разобрался! Тему можно удалить. Есть предложение банить навечно тех персонажей, которые "разобрались, пока писали", или "сам дурак, тему можно удалить", но которые при этом почему-то забывают внятно изложить, так в чем же они там разобрались... Как по мне - это проявление элементарного неуважения к сообществу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 16 января, 2021 Опубликовано 16 января, 2021 · Жалоба Приветствую! Just now, Самурай said: Есть предложение банить навечно тех персонажей, которые "разобрались, пока писали", или "сам дурак, тему можно удалить", но которые при этом почему-то забывают внятно изложить, так в чем же они там разобрались... Как по мне - это проявление элементарного неуважения к сообществу. Эко вы грозный! Зачем же сразу банит - надо для начала разъяснительную работу проводить, воспитывать так сказать культуру общения Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TRILLER 0 16 января, 2021 Опубликовано 16 января, 2021 · Жалоба 7 hours ago, RobFPGA said: Приветствую! Эко вы грозный! Зачем же сразу банит - надо для начала разъяснительную работу проводить, воспитывать так сказать культуру общения Удачи! Rob. Операнды являются контекстно-определёнными. Т.е. разрядность каждого операнда расширяется до максимальной из числа операндов в пределах контекста. В большинстве случаев контекстом является всё выражение включая операнд в левой части оператора " = ". В исключительных случаях контекст сужается до области, указанной в колонке "Comments" для конкретного оператора из приведенной в первом посте таблицы. Пример: bit a; bit [1:0] b; bit [2:0] c; bit [3:0] d, g; bit [9:0] e; bit [15:0] f; f = (g) ? (e << 1) : {d << 2, (a) ? (b << 1) : c}; Для конкатенации все внутренние операнды являются самоопределёнными. 'd' не будет расширен и произойдёт потеря информации при сдвиге. Разрядность 'a' также не изменится, однако длина 'b' будет увеличена до 'c' и потери информации не произойдёт. Контекстом 'g', как и 'a', является его собственная длина и расширения разрядности не произойдёт. Для операнда 'e', наряду с конкатенацией, контекстом является всё выражение. А значит 'e' будет расширен до длины 'f' перед сдвигом и потери информации также не произойдёт. Надеюсь, изложил понятно. Quote Posted 5 hours ago · Report post Есть предложение банить навечно тех персонажей, которые "разобрались, пока писали", или "сам дурак, тему можно удалить", но которые при этом почему-то забывают внятно изложить, так в чем же они там разобрались... Как по мне - это проявление элементарного неуважения к сообществу. Если ещё ни 1 человек не успел ответить, то утверждение о невозможности удаления темы, как мне кажется, весьма спорно. Не хотел проявлять неуважения, которого не имею. Прощения прошу. А вот предложения "навечно банить" что-то мне напоминают.. Ах да, "жэстачайшэ усих!" Усы торчат из таких предложений.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться