2017-02-11 13 views
0

typedef union {
logic [1: 0] c3;
бит [3: 0] a3;
байт b3;
} pack3;unpacked union in systemverilog

pack3 p3;

В соответствии с LRM, инициализация по умолчанию в соответствии с первым членом Союза т.е. логики в приведенном выше примере, следовательно, c3 назначить X и отдыха, чтобы присвоить значение 0, но при компиляции в ModelSim и проверить в окне объекта то для a3 и b3 существует другой результат. Также, когда я назначаю p3.a3 = 4'b0010; значение a3 и b3 изменяется, но не c3.Пожалуйста, объясните? Я знаю, что для каждой переменной доступно только память, поэтому обновление любого значения отражает все.

ответ

1

Там нет никаких гарантий, если вы пишете одному члену распакованного союза и попытаться прочитать другой элемент (для одного специального положения, упомянутого в конце раздела, за исключением 7,3 Союзы в 1800-2012 LRM). Вам нужно использовать упакованный союз, если вы хотите получить гарантию в макете перекрывающихся членов.

+0

спасибо @ dave_59 Да, он отлично работает с упакованным объединением, но неопределенность без упаковки. – Xeroxpop