赞
踩
五大模块
同步输入仿真波形:模拟按键输入 key[3:0],经过同步输入模块输出 key1[3:0]
编码频率控制仿真波形:将 上 一 模 块 输 出 的 key1[3:0] 进 行 频 率 编 码 ,以 低 音 1 为 例 : 4’b0111:count<=20’d191131
分频计数仿真波形:此模块将上一模块频率编码输出,输出按键所对应的频率
译码与方波仿真波形:如果 fflag 为真,输出对应的频率,为假则不输出。再通过方波产生器产生方波是蜂鸣器发声
管脚约束
编译
源代码
module xin(clk,rstn,key,buzzout); input clk,rstn; input [3:0] key; output buzzout; //同步按键输入 reg[3:0] kd; reg[3:0]key1; always@(posedge clk or negedge rstn) if(!rstn) {key1,kd} <= 0 ; else {key1,kd} <= {kd,key}; //按键编码对应的分频 reg[22:0]count_end; always@(posedge clk or negedge rstn) if(!rstn) count <= 0 ; else case(key1) 4'b0111: count<=20'd191131; //低音 1 4'b1011: count<=20'd170248; //低音 2 4'b1101: count<=20'd151699; //低音 3 4'b1110: count<=20'd143184; //低音 4 4'b0011: count<=20'd127551; //低音 5 4'b0101: count<=20'd113636; //低音 6 4'b0110: count<=20'd101235; //低音 7 4'b1001: count<=20'd95547; //中音 1 4'b1010: count<=20'd85135; //中音 2 4'b1100: count<=20'd75838; //中音 3 4'b0001: count<=20'd71582; //中音 4 4'b0010: count<=20'd63776; //中音 5 4'b0100: count<=20'd56818; //中音 6 4'b1000: count<=20'd50617; //中音 7 default: count<=20'hfffff&20'h0000; endcase //分频计数 reg[22:0]counter; reg buzzout ; wire fflag; assign fflag = (counter >= count); always@(posedge clk or negedge rstn) if(!rstn) counter <= 0 ; else if(fflag) counter <= 0 ; else counter <= counter + 1'b1 ; //计数器决定产生声音频率 always@(posedge clk or negedge rstn) if(!rstn) buzzout <= 0 ; else if(fflag) buzzout <= ~buzzout ; endmodule
激励文件
`timescale 1ns/1ns module xin_tb; reg clk,rstn; //系统时钟 50 MHZ reg [3:0]key; //按键输入 wire buzzout; //蜂鸣器输出 xin a1( .clk(clk), .key(key), .buzzout(buzzout), .rstn(rstn) ); initial clk=0; always #5 clk=~clk; initial begin rstn=0; #50 rstn=1; end initial begin key=4'b0111; #100 key=4'b1011; #100 key=4'b1101; #100 key=4'b1110; end initial #10000 $stop; endmodule
!!!感谢浏览、不喜勿喷!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。