不会产生毛刺的半分频电路写法

代码如下:

module divide(input rstn, input clk, output reg out);
parameter	N = 5;											//2.5分频为例,N等于分频倍数的两倍
reg [31:0]  count;
reg         flag; 

always@(posedge clk or negedge rstn)						//计数器
if(!rstn)begin
count <= 0;
end
else if(count == N - 1)begin
count <= 0;
end       
else begin
count <= count + 1; 
end

always@(negedge clk or negedge rstn)						//最后的"相与"所用到的区域1
if(!rstn)begin
flag <= 0;
end
else begin
flag <= count == 1 | count == N - 1;
end

assgn temp = count == 2 | count == N - 1;					//最后的"相与"所用到的区域2

always@* 
out = temp & flag;											//相与产生输出时钟

endmodule

优点是不会产生毛刺。在我找到的国内博客的代码中,均使用毛刺的上升/下降沿作为计数器的时钟信号,我认为这是一种不推荐的写法。但我也是数字电路初学者,所以欢迎大家讨论。

缺点是在准备区域1和区域2时引入比较复杂的组合逻辑,如果需要调整占空比,所需的组合逻辑更为复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值