Каков порядок значимости этого синтаксиса инициализации Verilog?

Это простой вопрос SystemVerilog, на который мне на удивление трудно найти ответ.

При таком синтаксисе инициализации битового массива часть b [0] назначается наиболее значимому биту или младшему значащему биту?

bit a[7:0];
bit b[7:0] = 8'hff;
bit c[7:0] = 8'h00;

a = {b[0], c[6:0]};

Так что [0] == 1 или [7] == 1?


person Rich    schedule 07.11.2012    source источник


Ответы (3)


Причина, по которой вам было трудно найти ответ, заключается в том, что результат зависит от того, как вы объявили вещи.

Вы объявили a [7:0]. Следовательно, биты в a расположены следующим образом:

a7 a6 a5 a4 a3 a2 a1 a0

Затем вы назначаете {b[0], c[6:0} a:

a7 a6 a5 a4 a3 a2 a1 a0 = b0 c6 c5 c4 c3 c2 c1 c0
 1  0  0  0  0  0  0  0 =  1  0  0  0  0  0  0  0

A[7] == 1

Если бы вы объявили a равным [0:7], результат был бы следующим:

a0 a1 a2 a3 a4 a5 a6 a7 = b0 c6 c5 c4 c3 c2 c1 c0
 1  0  0  0  0  0  0  0 =  1  0  0  0  0  0  0  0

A[0] == 1

person Paul S    schedule 07.11.2012
comment
Спасибо, Пол! Хорошее объяснение плюс ответ. Кроме того, спасибо за редактирование, я в основном парень C и просто ошибся. - person Rich; 08.11.2012

b[0] назначается старший бит, a[7]; т.е. a[7] == 1.

person mark4o    schedule 07.11.2012

Однако я не уверен, что это опечатка или ваше намерение использовать распакованное объявление. bit a[7:0] - это unpacked array, это не означает непрерывное хранение, и ему нельзя напрямую присвоить упакованное или целое значение.

Следующее заимствовано из SystemVerilog for Design, P.114, 5.3.1 Распакованные массивы.

В распакованном массиве каждый элемент хранится независимо, но сгруппирован под общим именем массива.

P.122, 5.3.5 Присвоение значений массивам

SystemVerilog расширяет Verilog двумя дополнительными способами присвоения значений распакованным массивам:
- всему массиву может быть назначен список значений
- части массива может быть назначен список значений.

Список значений указывается в фигурных скобках '{}, как при инициализации распакованных массивов.

Для упакованного массива bit [7:0] a у нас есть правильный ответ от Пола.

person jclin    schedule 08.11.2012
comment
Я упростил это из исходного файла, на который на самом деле смотрю. Я смотрю на несколько битовых массивов, определенных как часть упакованной структуры. Если структура упакована, будет ли это, в свою очередь, означать, что ее битовые массивы упакованы? - person Rich; 08.11.2012
comment
да. Упакованная структура может иметь в качестве полей только целочисленный или упакованный тип. - person jclin; 08.11.2012
comment
Хороший улов, я пропустил, что это был распакованный массив. - person Paul S; 09.11.2012