这个本来是作为驱动黑金板子上的蜂鸣器的,起初以为是有源的,用下面的代码改变其驱动频率来得到不同频率的声音,结果失败,原因很简单,它是有源的,拉低就会响,就单独列成时钟分频吧,注意此处为门控时钟。
此处使用了时钟分频模块,根据相位累加原理,
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视图