Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Мы уже знаем про модули, их входные и выходные сигналы и как они могут быть соединены друг с другом. Знаем, как можно сделать много битный сумматор. Нужно ли каждый раз, когда складываем два числа, делать такие сложные модули? Конечно нет! Поэтому познакомимся с основными арифметическими и логическими операторами языка Verilog.
С помощью комбинаторной логики посчитаем некоторые арифметические и логические функции.
Сложение и вычитание.
Пример модуля, который одновременно и складывает и вычитает два числа. Здесь входные операнды у нас 8-ми битные, а результат 9-ти битный. Verilog корректно сгенерирует бит переноса (carry bit) и поместит его в девятый бит выходного результата. С точки зрения Verilog входные операнды беззнаковые.
module simple_add_sub
(
operandA, operandB,
out_sum, out_dif
);
//два входных 8-ми битных операнда
input [7:0] operand A, operand B;
/*Выходы для арифметических операций имеют дополнительный 9-й бит
переполнения*/
output [8:0] out_sum, out_dif;
assign out_sum = operandA + operandB; //сложение
assign out_dif = operandA – operandB; //вычитание
endmodule
12
• Логический и арифметический сдвиг.
Рассмотрим пример модуля, который выполняет сдвиги. В нашем примере результат для сдвига влево16-ти битный. Если сдвигать влево или вправо слишком далеко, то результат получится просто ноль. Часто для сдвига используются только часть бит от второго операнда, для того, чтобы сэкономить логику.
module simple_shift
(
operandA, operandB,
out_shl, out_shr, out_sar
);
// два входных 8-ми битных операнда
input [7:0] operandA, operandB;
// Выходы для операций сдвига
output [15:0] out_shl;
output [7:0] out_shr;
output [7:0] out_sar;
//логический сдвиг влево
assign out_shl = operandA << operandB;
/* пример: на сколько сдвигать определяется 3-мя битами второго
операнда */
assign out_shr = operandA >> operandB[2:0];
//арифметический сдвиг вправо (сохранение знака числа)
assign out_sar = operandA >>> operandB[2:0];
endmodule
• Битовые логические операции
Битовые операции в Verilog выглядят так же, как и в языке C. Каждый бит результата вычисляется отдельно соответственно битам операндов. Пример:
module simple_bit_logic (
operandA, operandB,
out_bit_and, out_bit_or, out_bit_xor, out_bit_not);
//два входных 8-ми битных операнда
input [7:0] operandA, operandB;
//Выходы для битовых (bit-wise) логических операций
output [7:0] out_bit_and, out_bit_or, out_bit_xor, out_bit_not;
assign out_bit_and = operandA & operandB; //И
assign out_bit_or = operandA | operandB; //ИЛИ
assign out_bit_xor = operandA ^ operandB; //исключающее ИЛИ
assign out_bit_not = ~operandA; //НЕ
endmodule
Операции отношения
Следующие примеры иллюстрируют операторы отношения:
a < b a меньше чем b;
a > b a больше чем b;
a <= b a меньше или равно b;
a >= b a больше или равно b;
Все эти выражения возвращают лог.0 если приведенное отношение ложно (false) или лог.1 если отношение истинно (true). Если один из операндов имеет неопределенное значение, то и результат будет неопределен. Все операторы отношения имеют одинаковый приоритет и более низкий, чем приоритет арифметических операторов. Следующий пример иллюстрирует смысл этого правила:
a < size -1 // Эта конструкция идентична
a < (size -1) // этой, но
size – (1 < a) // эта конструкция отличается
size – 1 < a // от этой
Заметим, что в конструкции size – (1 < a) операция отношения вычисляется первой, а затем результат (0 или 1) вычитается из переменной size. В следующем же выражении сначала size уменьшается на 1, а затем результат сравнивается с а.
Операторы сравнения
Операторы сравнения имеют более низкий приоритет, чем операторы сравнения. В следующем примере иллюстрируются операторы сравнения.
a === b // a равно b, включая x
a !== b // a не равно b, включая x
a == b // a равно b, результат может быть неизвестен
a != b // a не равно b, результат может быть неизвестен
Все четыре оператора имеют одинаковый приоритет. Они сравнивают операнды бит в бит, и заполняют нулями в случае если операнды имеют различную разрядность. Так же как и операторы отношения они возвращают 0 если false и 1 если true. Если хотя бы один операнд содержит x, то операции == и != возвращают неопределенное значение. Операции === и !== сравнивают операнды с учетом x, поэтому всегда возвращают либо 0, либо 1.
Логические операции
Операторы логического И (&&) и логического ИЛИ (||) тесно связаны между собой. Результат логического сравнения может принимать значение «истинно» (true, 1) или «ложно» (false, 0), или если один из операндов имеет неопределенное значение, то и результат будет неопределен. Допустим, один из операндов имеет значение равное 10, а второй равен нулю. Результат логического И будет равен 0, так как второй операнд равен нулю. Результат логического ИЛИ, однако будет равен 1, так как первый операнд отличен от нуля. Verilog HDL воспринимает операнд равный 0 как «ложный», в то же время если операнд не равен нулю (не обязательно равен 1, например 10), то он воспринимается как «истинный». Именно это и произошло в приведенном примере: операция (true && false) привела к результату false, а операция (true || false) привела к результату true.
Операторы сдвига
К операторам сдвига относятся операторы <<, >>, <<< и >>>. Первые два оператора
выполняют простой сдвиг влево или вправо на количество позиций указанных
операндом в правой части выражения, два других выполняют циклический или иначе арифметический сдвиг. В следующем примере иллюстрируется механизм действия этих операторов.
|
|
|
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!