Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Дисциплины:
2021-03-18 | 210 |
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.
Операторы сдвига
К операторам сдвига относятся операторы <<, >>, <<< и >>>. Первые два оператора
выполняют простой сдвиг влево или вправо на количество позиций указанных
операндом в правой части выражения, два других выполняют циклический или иначе арифметический сдвиг. В следующем примере иллюстрируется механизм действия этих операторов.
|
|
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!