福建建设网站,石台做网站,协会建设网站的必要性,wordpress插件路径1.Simple beep 
先做一个简单地蜂鸣器#xff0c;原理是晶振通过不同的分频器分成不同的频率#xff0c;通过电路发出音调不同的声音。 例子中Pluto FPGA板子有25Mhz的时钟频率#xff0c;采用16位计数器#xff08;可以产生65536个不同的数值#xff09;#xff0c;则最…1.Simple beep 
先做一个简单地蜂鸣器原理是晶振通过不同的分频器分成不同的频率通过电路发出音调不同的声音。 例子中Pluto FPGA板子有25Mhz的时钟频率采用16位计数器可以产生65536个不同的数值则最高位的频率是25000000/65536381hz通过计数器不同位数进行分频产生不同的频率例如第0位就是25Mhz/ 2^0 12.5Mhz…最高位就是以381hz的频率在0/1之间来回切换 实例代码如下 
module music(clk, speaker);
input clk;
output speaker;// first create a 16bit binary counter
reg [15:0] counter;
always (posedge clk) counter  counter1;// and use the most significant bit (MSB) of the counter to drive the speaker
assign speaker  counter[15];
endmodule现在产生的是381hz的声音 
“A”的声音 
A的声音频率是440hz若要产生440hz的声音则25000000/440  56818.18 则需要16位计数器到56817的时候重新开始计数但对于327682^15~ 56817 的占空比为42%24049/56818若要实现0.5占空比最简单的方法是除以258818/228409所以若要获得440hz的频率且具有0.5的占空比需要在半个周期内计数器为28409将电平清零取反。 简单来说晶振频率/时间  想要的频率 用计数器实现时间的确定用计数的办法也就是加法比如需要30%高电平70%低电平加到30取反清零然后加到70再取反 代码如下 
module music(clk, speaker);
input clk;
output speaker;reg [14:0] counter;
always (posedge clk) if(counter28408) counter0; else counter  counter1;reg speaker;
always (posedge clk) if(counter28408) speaker  ~speaker;
endmodule救护车来了 
救护车的音调为tone[23] 25000000/2^23  1.5hz 音调一致两次响铃间隔时间来回交替一个时间为clkdivider-1一个为clkdivider/2 -1也就是形成所谓的占空比当tone[23]1维持时间为clkdivider-1为0时维持时间clkdivider/2 -1代码如下 module music(clk, speaker);
input clk;
output speaker;
parameter clkdivider  25000000/440/2;reg [23:0] tone;
always (posedge clk) tone  tone1;reg [14:0] counter;
always (posedge clk) if(counter0) counter  (tone[23] ? clkdivider-1 : clkdivider/2-1); else counter  counter-1;reg speaker;
always (posedge clk) if(counter0) speaker  ~speaker;
endmodule