您的位置:首页 > 编程语言

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

2018-03-16 11:04 267 查看
奇数分频实现方法很多,我们采用通过构建状态机的方式来完成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
仿真结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: