// // Comptuer Engineering Dept., University of Jordan // // Course: CPE 349 // Professor: Gheith Abandah // Verilog Library // // // Basic Gates Library // // Inverter module INV (out, in); input in; output out; assign #1 out = ~in; endmodule // 2-input NAND gate module NAND (out, in1, in2); input in1, in2; output out; assign #1 out = ~(in1 & in2); endmodule // 3-input NAND gate module NAND3 (out, in1, in2, in3); input in1, in2, in3; output out; assign #1 out = ~(in1 & in2 & in3); endmodule // 4-input NAND gate module NAND4 (out, in1, in2, in3, in4); input in1, in2, in3, in4; output out; assign #1 out = ~(in1 & in2 & in3 & in4); endmodule // 2-input AND gate module AND (out, in1, in2); input in1, in2; output out; assign #1 out = (in1 & in2); endmodule // 3-input AND gate module AND3 (out, in1, in2, in3); input in1, in2, in3; output out; assign #1 out = (in1 & in2 & in3); endmodule // 4-input AND gate module AND4 (out, in1, in2, in3, in4); input in1, in2, in3, in4; output out; assign #1 out = (in1 & in2 & in3 & in4); endmodule // 2-input NOR gate module NOR (out, in1, in2); input in1, in2; output out; assign #1 out = ~(in1 | in2); endmodule // 3-input NOR gate module NOR3 (out, in1, in2, in3); input in1, in2, in3; output out; assign #1 out = ~(in1 | in2 | in3); endmodule // 4-input NOR gate module NOR4 (out, in1, in2, in3, in4); input in1, in2, in3, in4; output out; assign #1 out = ~(in1 | in2 | in3 | in4); endmodule // 2-input OR gate module OR (out, in1, in2); input in1, in2; output out; assign #1 out = (in1 | in2); endmodule // 3-input OR gate module OR3 (out, in1, in2, in3); input in1, in2, in3; output out; assign #1 out = (in1 | in2 | in3); endmodule // 4-input OR gate module OR4 (out, in1, in2, in3, in4); input in1, in2, in3, in4; output out; assign #1 out = (in1 | in2 | in3 | in4); endmodule // 2-input XOR gate module XOR (out, in1, in2); input in1, in2; output out; assign #1 out = in1 ^ in2; endmodule // Synchronous D Flip-flop with reset (positive-edge trigger) module DFF (Q, D, clk, reset); input D, clk, reset; output Q; reg Q; always @(posedge clk) if (reset == 1) #2 Q=0; else #2 Q=D; endmodule // Latch with active high gate and a reset module LATCH (Q, D, gate, reset); input D, gate, reset; output Q; reg Q; always @(gate or reset) if (reset == 1) #2 Q=0; else if (gate == 1) #2 Q=D; endmodule // Tri-state buffer with active high control module TRI (out, in, cntl); input in, cntl; output out; reg out; always @(in or cntl) begin #1; if (cntl == 1) out = in; else out = 1'bz; end endmodule