|
module DIV(
A_IN,A_OUT,SEL,CNT,CNT1,TT,AOUT,AOUT1);
input A_IN;
input [4:0] SEL;
output A_OUT,AOUT,AOUT1;
output [4:0] CNT,CNT1;
reg [4:0] CNT,CNT1;
reg AOUT,AOUT1;
//***************************************
output [3:0] TT;
reg [3:0] TT;
integer temp1;
//***************************************
always@(posedge A_IN)
begin
temp1 = TT /2;
end
//***************************************
always @ ( posedge A_IN )
begin
if( CNT == SEL-1 )
CNT<= 5'b00000;
else
CNT<= CNT + 5'b00001;
end
//***************************************
always @ ( negedge A_IN )
begin
if( CNT1 == SEL-1 )
CNT1<= 5'b00000;
else
CNT1<= CNT1 + 5'b00001;
end
//***************************************
always @ (CNT or CNT1)
begin
if (CNT == 5'b00000)
AOUT <= 1'b1;
else if(CNT1 == temp1+1 )
AOUT <= 1'b0;
else
AOUT <= AOUT;
end
//***************************************
always @ (CNT)
begin
if (CNT == 5'b00000)
AOUT1 <= 1'b1;
else if(CNT == temp1 )
AOUT1 <= 1'b0;
else
AOUT1 <= AOUT1;
end
//***************************************
always@(posedge A_IN)
begin
case (SEL)
4'b0000: TT <= 4'b0000; //0
4'b0001: TT <= 4'b0001; //01
4'b0010: TT <= 4'b0010; //02
4'b0011: TT <= 4'b0011; //03
4'b0100: TT <= 4'b0100; //04
4'b0101: TT <= 4'b0101; //05
4'b0110: TT <= 4'b0110; //06
4'b0111: TT <= 4'b0111; //07
4'b1000: TT <= 4'b1000; //08
4'b1001: TT <= 4'b1001; //09
4'b1010: TT <= 4'b1010; //10
4'b1011: TT <= 4'b1011; //11
4'b1100: TT <= 4'b1100; //12
4'b1101: TT <= 4'b1101; //13
4'b1110: TT <= 4'b1110; //14
4'b1111: TT <= 4'b1111; //15
default: ;
endcase
end
//***************************************
assign A_OUT = (SEL[0])? AOUT:AOUT1;
endmodule
|