您的位置:首页 > 其它

Verilog HDL 学习篇——任意时钟分频

2013-02-28 12:41 369 查看
这个本来是作为驱动黑金板子上的蜂鸣器的,起初以为是有源的,用下面的代码改变其驱动频率来得到不同频率的声音,结果失败,原因很简单,它是有源的

,拉低就会响,就单独列成时钟分频吧,注意此处为门控时钟。



此处使用了时钟分频模块,根据相位累加原理,

K=F0*2^N/Fc

K :分频系数;Fo:输出频率;Fc:模块频率;N计数位宽;

理论上可以任意分频,不过实际上,大部分频率都是通过相位抖动的方式达到的

module CLK_DIV_MODULE
#(
parameter CLK_VALUE=50000000,
parameter WIDTH=32,
parameter K={WIDTH{1'B0}}
)
(
input	CLK,
input	RST,
input	EN,
output	SCK
);
//.......................................................................................................................
reg rSCK;
reg rEN;
reg	[WIDTH-1:0]	rN;

always @ (posedge CLK or negedge RST)
if(!RST) begin
rN<={WIDTH{1'B0}};
rSCK<=1'B0;
end
else begin

rEN<=EN;

if(!rEN) begin
rN<={WIDTH{1'B0}};
rSCK<=1'B0;
end
else begin
rN<=rN+K;
if(rN<({WIDTH{1'B1}}/2)) begin
rSCK<=1'B0;
end
else begin
rSCK<=1'B1;
end
end
end
//.......................................................................................................................
assign SCK=rSCK;
//.......................................................................................................................
endmodule


RTL视图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: