Интересная онлайн-ссылка, которую я нашел, это здесь , где, среди прочего, в разделе «Назначения массивов» вы можете прочитать:
Два объекта массива могут быть назначеныдруг с другом, пока они одного типа и одного размера.Важно отметить, что назначение осуществляется по позиции, а не по номеру индекса.Не существует понятия наиболее значимого бита, определенного в языке.Это строго интерпретируется пользователем, который использует массив.Вот примеры присвоений массивов:
со следующим объявлением:
....
SIGNAL z_bus: BIT_VECTOR (3 DOWNTO 0);
SIGNAL a_bus: BIT_VECTOR (1 TO 4);
....
z_bus <= a_bus;
совпадает с:
z_bus(3) <= a_bus(1);
z_bus(2) <= a_bus(2);
z_bus(1) <= a_bus(3);
z_bus(0) <= a_bus(4);
Замечания:
1) Любая разница между "downto" и "to" появляется, когда мы хотим использовать битовый вектор не только для представления массива битов, где каждый бит имеет независимое поведение, но и для представленияцелое числоКроме того, существует разница в значении битов, поскольку методы обработки чисел такими схемами, как сумматоры, множители и т. Д.
В этом, пожалуй, особом случае, если предположить, что 0 , этообычное соглашение , что при использовании x to y
x является старшим значащим битом (MSB), а y - младшим значащим битом (LSB).И наоборот, при использовании y downto x
, y - это MSB, а x - LSB.Можно сказать, что разница для битовых векторов, представляющих целые числа, заключается в том, что индекс MSB идет первым, используете ли вы «to» или «downto» (хотя первый индекс меньше второго при использовании «to»)и больше при использовании «downto»).
2) Вы должны отметить, что y downto x
означает y - это MSB, и, наоборот, x to y
означает x - это MSB - известные соглашения, обычно используемые в интеллектуальной собственности.(IP) ядра вы можете найти реализованные и даже бесплатно.Это также соглашение, используемое библиотеками IEEE VHDL, я думаю, при преобразовании между битовыми векторами и целыми числами.Но нет ничего сложного в структурном моделировании, например, 32-битного сумматора, который использует входные битовые векторы вида y downto x
и использует y в качестве LSB, или использует входные битовые векторы вида x to y
где x используется в качестве LSB ...
Тем не менее, разумно использовать обозначение x downto 0
для неотрицательного целого числа, поскольку позиции битов соответствуют степени 2, умноженной на цифру для добавлениядо числового значения.Похоже, что это было расширено и в большинстве других практик с целыми числами.
3) Порядок битов не имеет отношения к порядку байтов .Порядковый номер относится к упорядочению байтов (хорошо, упорядочение байтов является формой упорядочения битов ...).Порядковый номер - это проблема, раскрываемая на уровне архитектуры набора инструкций (ISA), т. Е. Она видна программисту, который может получить доступ к одному и тому же адресу памяти с разными размерами операндов (например, слово, байт, двойное слово и т. Д.).Порядок следования битов в реализации (как в вопросе) никогда не раскрывается на уровне ISA.Программисту видна только семантика относительных битовых позиций (например, логическое смещение влево может быть фактически реализовано смещением вправо регистра, значение битов которого обращено в реализации).
(Удивительно, сколько ответовкоторые упомянули об этом, проголосовали!)