FPGA实现小数分频(4.5),附源码,下载直接可用

双十一下午闲来无事,干脆逛逛论坛吧,发现有不少人对于用FPGA实现小数分频不知怎么下手。下面我把自己的源码贴上,大家可以参考一下。

module div_45
(
input sys_clk,
input rst_n,
output clk_45
);
/**********************/
parameter N=9;
/************************/
reg[8:0] temp;
reg temp0,temp4,temp5;

reg[3:0] cnt;

/*********************/
//移位操作
/**********************/
always@(posedge sys_clk)
begin
if(!rst_n)
begin
temp <= 9’b0000_0000_1;
cnt <= ‘d0;
end
else if(cnt>=N-1)
begin
cnt <= ‘d0;
temp <= 9’b0000_0000_1;
end
else
begin
cnt <= cnt + 1’b1;
temp <= temp<<1’b1;
end
end

/*****************************/
//将temp中的第0、4、5位滞后原来90度
/*****************************/
always@(negedge sys_clk)
if(!rst_n)
begin
temp0 <= 1’b0;
temp4 <= 1’b0;
temp5 <= 1’b0;
end
else case(cnt)
‘d0:temp0 <= 1’b1;
‘d4:temp4 <= 1’b1;
‘d5:begin temp4 <= 1’b0;temp5 <= 1’b1 ;end
default:
begin
temp0 <= 1’b0;
temp4 <= 1’b0;
temp5 <= 1’b0;
end
endcase
/****************************/
//输出
/*****************************/
assign clk_45 = (temp[0]|temp0|temp[1])|(temp[5]|temp4|temp5);
endmodule
由于是4.5分频,所以此处定义一个9位宽的信号temp。通过左移,使其每一位依次输出高电平。然后将temp中的第0位,第4位,第5位相应的滞后原来temp第0、4、5位90度,即在时钟下降沿变化。最后通过将temp第0、1位和第5位以及滞后90度的temp0、temp4、temp5相或,然后将结果输出,即可实现4.5分频。仿真波形如下:
仿真波形
在实现小数分频时,可考虑这个思路,即将你要分频的数通过计算使其是一个整数,然后通过移位操作,通过分析移位后的波形,来逻辑组合实现相应的分频。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值