0% found this document useful (0 votes)
170 views6 pages

Clock Divider-Verilog Codes

The document describes various digital circuit modules implemented in Verilog, including a binary up-down counter, JK flip-flop, T flip-flop, 3-bit ripple counter, and a universal shift register. Each module utilizes clock division to create a 2 Hz clock signal from a 100 MHz input clock and performs specific operations such as counting, toggling, and shifting. The document includes code snippets and explanations for the functionality of each module.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
170 views6 pages

Clock Divider-Verilog Codes

The document describes various digital circuit modules implemented in Verilog, including a binary up-down counter, JK flip-flop, T flip-flop, 3-bit ripple counter, and a universal shift register. Each module utilizes clock division to create a 2 Hz clock signal from a 100 MHz input clock and performs specific operations such as counting, toggling, and shifting. The document includes code snippets and explanations for the functionality of each module.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Binary up down counter using clock division

Module upcounter_4bit (clk, q, rst);

Input clk, rst;

output [3:0]q;

Reg[3:0]q=4’b0;

Reg newclk;

Reg[27:0]count=0;

always@(posedge clk)

begin

count=count+1;

newclk=count[26]; // clock division at bit 26 corresponds to 2hz

end

always@(posedge newclk)

begin

if(rst)

q=0;

else

q=q+1; // up counting operation

q=q-1; // down counting operation

end

endmodule

Note: the first always block corresponds to clock division operation


(100 MHz frequency divided to 2 Hz)
The second always block, which performs binary up and down
count operation…
JK flip flop using clock division (perform toggle operation)

Module jk_flipflop (jk, rst, q, qb, clk);

Input jk [1:0];

Input rst, clk;

Output q,qb;

Reg newclk;

Reg[27:0]count=0;

always@(posedge clk)

begin

count=count+1;

newclk=count[26]; // clock division at bit 26 corresponds to 2hz

end

initial

begin

q=1’b0; q=1’b1;

end

always@(posedge newclk) // new clk corresponds to 2 hz used for jk flip flop operation

begin

if(rst)

q=0;

else

case(jk)

2’b00: q=q;

2’b01:q=0;

2’b10:q=1;

2’b11:q=0;
endcase

Qb=~q;

end

endmodule

Note: the first always block corresponds to clock division operation


(100 MHz frequency divided to 2 Hz)
The second always block, which performs jk flip flop
operation…

T flip flop using clock division (perform toggle operation)

Module T_flipflop (t, q, qb, clk);

Input t;

Input, clk;

Output q,qb;

Reg newclk;

Reg[27:0]count=0;

always@(posedge clk)

begin

count=count+1;

newclk=count[26]; // clock division at bit 26 corresponds to 2hz


end

initial

begin

q=1’b0; q=1’b1;

end

always@(posedge newclk) // new clk corresponds to 2 hz used for T flip flop operation

begin

if(t=0)

q=0;

else

q=1;

end

qb=~t;

endmodule

Note: the first always block corresponds to clock division operation


(100 MHz frequency divided to 2 Hz)
The second always block, which performs T flip flop operation…

3-bit ripple counter

Module ripple_3bit (clk,q);

Input rst, clk;

Output q;

Output reg[2:0]q;

Reg newclk;

Reg[27:0]count=0;
always@(posedge clk)

begin

count=count+1;

newclk=count[26]; // clock division at bit 26 corresponds to 2hz

end

// body of the 3 bit ripple counter

always@(posedge newclk) // new clk corresponds to 2 hz used for ripple counter operation

begin

q[0]=~q[0];

q[1]=~q[1];

q[2]=~q[2];

end

endmodule

Universal shift register to perform shift right, shift left, parallel and
load operation

Module universal shift register (clk, rst, lsi,rsi,din,s0,s1,q);

Input rst, clk, lsi,rsi,s1,s0;

Input [N-1:0]din;

Parameter N=4; // define 4 bit shift register

Output reg[N-1:0]q;

Reg newclk;

Reg[27:0]count=0;

always@(posedge clk)

begin

count=count+1;

newclk=count[26]; // clock division at bit 26 corresponds to 2hz


end

//shift register body

always@(posedge newclk or reset) // new clk corresponds to 2 hz used for shift register operation

if(!rst)

q={N{1’b0}};

else

case({s1,s0})

2’b00:q=q; // no change

2’b01:q={lsi,q[N-1:1]}; //shift right

2’b10: q={q[N-2:0],rsi}; // shift left

2’b11:q=din; // parallel load

endcase

endmodule

You might also like