Assign With Operators
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 38 de 90.
Una vez que comprendas la asignación continua, puedes combinarla con operadores para crear lógica útil. La declaración assign puede usar cualquier operador para controlar un cable.
Sintaxis básica
assign wire_name = expression;La expresión puede incluir:
- Operadores aritméticos (
+,-,*,/) - Operadores bit a bit (
&,|,^,~) - Operadores lógicos (
&&,||,!)
- Operadores de comparación (
>,<,==,!=) - Operadores de desplazamiento (
<<,>>) - Operador condicional (
? :)
Ejemplos con diferentes operadores
AND bit a bit:
assign out = a & b;Suma:
assign sum = a + b;Comparación:
assign is_greater = (a > b);Condicional (multiplexor):
assign out = sel ? a : b;Desplazamiento:
assign shifted = data << 2;Concatenación:
assign bus = {high_byte, low_byte};Ejemplo de Código
module assign_operators (
input [3:0] a, b,
input sel,
output [3:0] and_out,
output [4:0] sum_out,
output is_equal,
output mux_out
);
assign and_out = a & b; // AND bit a bit
assign sum_out = a + b; // Suma
assign is_equal = (a == b); // Comparación
assign mux_out = sel ? a : b; // Condicional (multiplexor)
endmoduleMúltiples operadores en una sola asignación
Puedes combinar operadores en una sola expresión:
assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data; // Reducción XOR (número impar de 1's)Precedencia de operadores
Verilog sigue la precedencia de operadores estándar. Usa paréntesis ( ) para que tu intención sea clara:
// Poco claro
assign out = a & b | c;
// Claro
assign out = (a & b) | c;Desafío
Agregue las instrucciones assign faltantes según las tareas.
Qué hacer:
- Haga que
and_resultsea igual ainput_a AND input_b(bitwise) - Haga que
or_resultsea igual ainput_a OR input_b(bitwise) - Haga que
xor_resultsea igual ainput_a XOR input_b(bitwise) - Haga que
not_resultsea igual aNOT input_a(bitwise)
Pruébalo tú mismo
module assign_challenge (
input input_a,
input input_b,
output and_result,
output or_result,
output xor_result,
output not_result
);
// TODO: Añade las sentencias assign para:
// and_result = input_a & input_b
// or_result = input_a | input_b
// xor_result = input_a ^ input_b
// not_result = ~input_a
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPractica por tu cuenta: Compilador de Verilog online