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
仿真结果:
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
仿真结果:
相关文章推荐
- 关于利用D触发器实现2/4分频的思路与VERILOG代码
- php后台多用户权限组思路与实现程序代码
- php采集远程图片的思路与实现代码
- js购物车实现思路及代码(个人感觉不错)
- jquery获得页面元素的坐标值实现思路及代码
- Oracle SQL中实现indexOf和lastIndexOf功能的思路及代码
- jQuery弹性滑动导航菜单实现思路及代码
- JS关键字变色实现思路及代码
- ItemCF_基于物品的协同过滤_MapReduceJava代码实现思路
- iframe截取网站部分内容实现思路及代码
- 【JS 设计模式 】用组合模式来实现树形导航--代码结构思路分析(一)
- hbase分页应用场景及分页思路与代码实现
- jQuery判断密码强度实现思路及代码
- ASP.NET中实现单点登录思路及其代码
- 如何在浏览器中打开PDF文件并实现预览的思路与代码
- html5记忆翻牌游戏实现思路及代码
- java实现图片压缩的思路与代码
- 没有模板代码膨胀的STL:一、设计目标与实现思路
- js网页中的(运行代码)功能实现思路
- js用Date对象处理时间实现思路及代码