0% found this document useful (0 votes)
657 views20 pages

Verilog Code for Flip-Flops and Counters

The document provides Verilog code examples for various digital logic components including flip-flops, counters, multiplexers, decoders, adders, and comparators. Code examples are given for positive edge, negative edge, and asynchronous clear flip-flops. Examples of 4-bit up and down counters, 4-to-1 multiplexers using if/case statements, 1-of-8 decoders, 8-bit adders with and without carry, 8-bit add/subtractors, and 8-bit comparators are also included.

Uploaded by

Gayathri Sankar
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
657 views20 pages

Verilog Code for Flip-Flops and Counters

The document provides Verilog code examples for various digital logic components including flip-flops, counters, multiplexers, decoders, adders, and comparators. Code examples are given for positive edge, negative edge, and asynchronous clear flip-flops. Examples of 4-bit up and down counters, 4-to-1 multiplexers using if/case statements, 1-of-8 decoders, 8-bit adders with and without carry, 8-bit add/subtractors, and 8-bit comparators are also included.

Uploaded by

Gayathri Sankar
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd

Following is the Verilog code for flip-flop with a positive-edge clock.

module input output reg flop (clk, d, q); clk, d; q; q;

always @(posedge clk) begin q <= d; end endmodule

Following is Verilog code for a flip-flop with a negative-edge clock and asynchronous clear. module input output reg always clr) flop (clk, d, clr, q); clk, d, clr; q; q; @(negedge clk or posedge

begin if (clr) q <= 1b0; else

end

q <= d; endmodule

Following is Verilog code for the flip-flop with a positive-edge clock and synchronous set. q); module flop (clk, d, s, input clk, d, s; output q; reg q; always @(posedge clk) begin if (s) q <= 1b1; else q <= d; end endmodule

Following is Verilog code for the flip-flop with a positive-edge clock and clock enable. module flop (clk, d, ce, q); input clk, d, ce; output q;

reg q; always @(posedge clk) begin if (ce) q <= d; end endmodule

Following is the Verilog code for a 4-bit unsigned up counter with asynchronous clear. module counter (clk, clr, q); input clk, clr; output [3:0] q; reg [3:0] tmp; always @(posedge clk or posedge clr) begin if (clr) tmp <= 4b0000; else tmp <= tmp + 1b1; end assign q = tmp; endmodule

Following is the Verilog code for a 4-bit unsigned down counter with synchronous set. module counter (clk, s, q); input clk, s; output [3:0] q; reg [3:0] tmp; always @(posedge clk) begin if (s) tmp <= 4b1111; else tmp <= tmp - 1b1; end assign q = tmp; endmodule

Following is the Verilog code for a 4-to-1 1-bit MUX using an If statement. module mux (a, b, c, d, s, o); input a,b,c,d; input [1:0] s;

output o; reg o; always @(a or b or c or d or s) begin if (s == 2b00) o = a; else if (s == 2b01) o = b; else if (s == 2b10) o = c; else o = d; end endmodule

Following is the Verilog Code for a 4-to-1 1-bit MUX using a Case statement. module mux (a, b, c, d, s, o); input a, b, c, d; input [1:0] s; output o; reg o; always @(a or b or c or d or s) begin case (s) 2b00 : o = a; 2b01 : o = b; 2b10 : o = c;

default : o = d; endcase end endmodule

Following is the Verilog code for a 3-to-1 1-bit MUX with a 1-bit latch. module mux (a, b, c, d, s, o); input a, b, c, d; input [1:0] s; output o; reg o; always @(a or b or c or d or s) begin if (s == 2b00) o = a; else if (s == 2b01) o = b; else if (s == 2b10) o = c; end endmodule

Following is the Verilog code for a 1-of-8 decoder. module mux (sel, res); input [2:0] sel; output [7:0] res; reg [7:0] res; always @(sel or res) begin case (sel) 3b000 : res = 8b00000001; 3b001 : res = 8b00000010; 3b010 : res = 8b00000100; 3b011 : res = 8b00001000; 3b100 : res = 8b00010000; 3b101 : res = 8b00100000; 3b110 : res = 8b01000000; default : res = 8b10000000; endcase end endmodule

Following is the Verilog code for an unsigned 8-bit adder with carry in. module input input input output adder(a, b, ci, sum); [7:0] a; [7:0] b; ci; [7:0] sum;

assign sum = a + b + ci; endmodule Following is the Verilog code for an unsigned 8-bit adder with carry out. module adder(a, b, sum, co); input [7:0] a; input [7:0] b; output [7:0] sum; output co; wire [8:0] tmp; assign tmp = a + b; assign sum = tmp [7:0]; assign co = tmp [8]; endmodule Following is the Verilog code for an unsigned 8-bit adder with carry in and carry out.

module sum, co); input input input output output wire ci;

adder(a, b, ci, [7:0] [7:0] [7:0] [8:0] ci; a; b; sum; co; tmp;

assign tmp = a + b + assign sum = tmp [7:0]; assign co = tmp [8]; endmodule

Following is the Verilog code for an unsigned 8-bit adder/subtractor. module addsub(a, b, oper, res); input oper; input [7:0] a; input [7:0] b; output [7:0] res; reg [7:0] res; always @(a or b or oper) begin if (oper == 1b0) res = a + b;

else res = a - b; end endmodule

Following is the Verilog code for an unsigned 8-bit greater or equal comparator. module compar(a, b, cmp); input [7:0] a; input [7:0] b; output cmp; assign cmp = (a >= b) ? 1b1 : 1b0; endmodule

Example 1.4. A 16-Bit Counter. module m16 (value, clock, fifteen, altFifteen); output [3:0] value; output fifteen, altFifteen;

input dEdgeFF ~value[0]),

clock; a (value[0], clock,

b (value[1], clock, value[1] ^ value[0]), c (value[2], clock, value[2] ^ &value[1:0]), d (value[3], clock, value[3] ^ &value[2:0]); assign fifteen = value[0] & value[1] & value[2] & value[3]; assign altFifteen = &value; endmodule

//Example 1.5. A D-Type EdgeTriggered Flip Flop. module dEdgeFF (q, clock, data); output q; reg q; input clock, data;

initial q = 0; always @(negedge clock) #10 q = data; endmodule

The Counter Module Described With Behavioral Statements. module m16Behav (value, clock, fifteen, altFifteen); output [3:0] value; reg [3:0] value; output fifteen, altFifteen; reg fifteen, altFifteen; input clock; initial

value = 0; always begin @(negedge clock) #10 value = value + 1; if (value == 15) begin altFifteen = 1; fifteen = 1; end else begin altFifteen = 0; fifteen = 0; end end endmodule

Mux : Using assign Statement

1 //---------------------------------------------------2 // Design Name : mux_using_assign 3 // File Name : mux_using_assign.v 4 // Function : 2:1 Mux using Assign 5 // Coder : Deepak Kumar 6 //---------------------------------------------------7 module mux_using_assign( 8 din_0 , // Mux first input 9 din_1 , // Mux Second input 10 sel , // Select input 11 mux_out // Mux output 12 ); 13 //-----------Input Ports--------------14 input din_0, din_1, sel ; 15 //-----------Output Ports--------------16 output mux_out; 17 //------------Internal Variables-------18 wire mux_out; 19 //-------------Code Start----------------20 assign mux_out = (sel) ? din_1 : din_0;

21 22 endmodule //End Of Module mux

Mux : Using if Statement

1 //---------------------------------------------------2 // Design Name : mux_using_if 3 // File Name : mux_using_if.v 4 // Function : 2:1 Mux using If 5 // Coder : Deepak Kumar 6 //---------------------------------------------------7 module mux_using_if( 8 din_0 , // Mux first input 9 din_1 , // Mux Second input 10 sel , // Select input 11 mux_out // Mux output 12 ); 13 //-----------Input Ports--------------14 input din_0, din_1, sel ; 15 //-----------Output Ports---------------

16 output mux_out; 17 //------------Internal Variables-------18 reg mux_out; 19 //-------------Code Starts Here--------20 always @ (sel or din_0 or din_1) 21 begin : MUX 22 if (sel == 1'b0) begin 23 mux_out = din_0; 24 end else begin 25 mux_out = din_1 ; 26 end 27 end 28 29 endmodule //End Of Module mux

Mux : Using case Statement

1 //---------------------------------------------------2 // Design Name : mux_using_case 3 // File Name : mux_using_case.v 4 // Function : 2:1 Mux using Case 5 // Coder : Deepak Kumar

6 //---------------------------------------------------7 module mux_using_case( 8 din_0 , // Mux first input 9 din_1 , // Mux Second input 10 sel , // Select input 11 mux_out // Mux output 12 ); 13 //-----------Input Ports--------------14 input din_0, din_1, sel ; 15 //-----------Output Ports--------------16 output mux_out; 17 //------------Internal Variables-------18 reg mux_out; 19 //-------------Code Starts Here--------20 always @ (sel or din_0 or din_1) 21 begin : MUX 22 case(sel ) 23 1'b0 : mux_out = din_0; 24 1'b1 : mux_out = din_1; 25 endcase 26 end 27 28 endmodule //End Of Module mux

Encoders

Encoder - Using if-else Statement 1 //---------------------------------------------------2 // Design Name : encoder_using_if 3 // File Name : encoder_using_if.v 4 // Function : Encoder using If 5 // Coder : Deepak Kumar Tala 6 //---------------------------------------------------7 module encoder_using_if( 8 binary_out , // 4 bit binary output 9 encoder_in , // 16-bit input 10 enable // Enable for the encoder 11 ); 12 //-----------Output Ports--------------13 output [3:0] binary_out ; 14 //-----------Input Ports--------------15 input enable ; 16 input [15:0] encoder_in ; 17 //------------Internal Variables-------18 reg [3:0] binary_out ; 19 //-------------Code Start----------------20 always @ (enable or encoder_in) 21 begin

You might also like