3/5分频的实现思路与Verilog代码

奇数分频实现方法很多,我们采用通过构建状态机的方式来完成3和5分频。其原理都是一样的,举一反三可以实现任何奇数分频。
直接上代码:

3分频:

module div_3(

clkin,

rst,

clkout

 

   );

   input clkin,rst;

   output clkout;

   reg [2:0] step1, step2;

   always @(posedge clkin )

   if(!rst)

      step1<=3'b000;

   else 

   begin

   case (step1)

   3'b000: step1 <= 3'b001;

   3'b001: step1 <= 3'b010;

   3'b010: step1 <= 3'b000;

   default:step1<=3'b000;

   endcase

   end

   always @(negedge clkin )

   if(!rst)

      step2<=3'b000;

   else

    begin

   case (step2)

    3'b000: step2<=3'b001;

    3'b001: step2 <= 3'b010;

    3'b010: step2 <= 3'b000;

    default:step2<=3'b000;

   endcase

    end

   assign clkout=step1[0]|step2[0];

 

endmodule
上仿真图:

5分频的实现方法即修改状态机即可:

值得注意的是,step2是下降沿触发,这是实现50%占空比的关键
代码如下:

module div_5 ( clkin,rst,clkout );
input clkin,rst;
output clkout;
reg [2:0] step1, step2;
always @(posedge clkin )
if(!rst)
  step1<=3'b000;
else  
   begin
   case (step1)
    3'b000:step1<=3'b001;
    3'b001:step1<=3'b011;
    3'b011:step1<=3'b100;
    3'b100:step1<=3'b010;
    3'b010:step1<=3'b000;
   default:step1<=3'b000;
   endcase
   end
always @(negedge clkin )
if(!rst)
  step2<=3'b000;
else
   begin

     case (step2)
       3'b000: step2<=3'b001;
       3'b001: step2<=3'b011;
       3'b011: step2<=3'b100;
       3'b100: step2<=3'b010;
       3'b010: step2<=3'b000;
       default:step2<=3'b000;

    endcase
   end
assign clkout=step1[0]|step2[0];

endmodule

仿真结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值