大神求帮做一个简易数字频率计
1. 被测信号的频率范围100Hz~100 kHz
2. 输入信号为正弦信号或方波信号
3. 四位数码管显示所测频率,并用发光二极管表示单位
4. 具有超量程报警功能
1210811846@qq.com
假设 秒时间高电平为1秒钟。
参考代码如下,
module button( clk, rst, pp1s, disp);
input rst,clk;
input pp1s; //秒时钟基准
output reg [7:0] disp[8:0]; //9个10进制数码管显示。
reg reg [3:0] cnt[8:0]; //9个十进制。
always@(posedge clk_dut or negedge rst)
if(!rst)
begin cnt[0] <= 3'b0; cnt[1] <= 3'b0; cnt[8] <= 3'b0; end
else if (!pp1s)
begin cnt[0] <= 3'b0; cnt[1] <= 3'b0; cnt[8] <= 3'b0; end
else
begin
if (cnt[0] >= 4'h9) cnt[0] <= 4'b0; else cnt[0] <= cnt[0] + 1'b1;
if (cnt[0] >= 4'b9)
begin
if (cnt[1] >= 4'h9) cnt[1] <= 4'b0; else cnt[1] <= cnt[1] + 1'b1;
end
if (cnt[0] >= 4'b9 cnt[1] >= 4'b9)
begin
if (cnt[2] >= 4'h9) cnt[2] <= 4'b0; else cnt[2] <= cnt[2] + 1'b1;
end
..
if (cnt[0] >= 4'b9 cnt[1] >= 4'b9 cnt[2] >= 4'b9 cnt[3] >= 4'b9 cnt[4] >= 4'b9 cnt[5] >= 4'b9 cnt[6] >= 4'b9 cnt[7] >= 4'b9)
begin
if (cnt[8] >= 4'h9) cnt[8] <= 4'b0; else cnt[8] <= cnt[8] + 1'b1;
end
end
//数码管编码
always@(*)
case (cnt[0])
4'h0 disp[0] = 0x3f;
4'h1 disp[0] = 0x06;
4'h2 disp[0] = 0x5b;
4'h3 disp[0] = 0x4f;
4'h4 disp[0] = 0x66;
4'h5 disp[0] = 0x6d;
4'h6 disp[0] = 0x7d;
4'h7 disp[0] = 0x07;
4'h8 disp[0] = 0x7f;
4'h9 disp[0] = 0x6f;
default:disp[0] = 0x3f;
endcase
always@(*)
case (cnt[8])
4'h0 disp[8] = 0x3f;
4'h1 disp[8] = 0x06;
4'h2 disp[8] = 0x5b;
4'h3 disp[8] = 0x4f;
4'h4 disp[8] = 0x66;
4'h5 disp[8] = 0x6d;
4'h6 disp[8] = 0x7d;
4'h7 disp[8] = 0x07;
4'h8 disp[8] = 0x7f;
4'h9 disp[8] = 0x6f;
default:disp[8] = 0x3f;
endcase
endmodule