FPGA实验8位数码显示频率计设计Word文档格式.docx
《FPGA实验8位数码显示频率计设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《FPGA实验8位数码显示频率计设计Word文档格式.docx(9页珍藏版)》请在冰点文库上搜索。
![FPGA实验8位数码显示频率计设计Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/a5736dc4-5af0-4b66-930f-6e602a9ac464/a5736dc4-5af0-4b66-930f-6e602a9ac4641.gif)
1秒计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期作好准备。
实验步骤:
i设]十生成1秒时钟信号“CLK
2•设计测频控制信号发生器一
3■设#1秒计磁值锁存器--
4•设计32位一进制计数器一彳设计十六进制7段译码器一
FTCTRL;
REG32B;
COUNTER32BDecoder
6■设计生成lKHz或lOKHz待测信号一Fin7•気成频率计设计、仿真和妓件实现.
频率计电路框图
频率计测频控制器FTCTRL测控时序图
实验目的:
实验原理及内容:
测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计
数允许的信号;
1秒计数结束后,计数值被锁入锁存器,计数器清零,
为下一测频计数周期作好准备。
CLK
REG32B;
COUNTER32B
Decoder
1•设计生成1秒时钟信号--
2•设计测频控制信号发生器--
3•设计1秒计数值锁存器--
4•设计32位二进制计数器--
5•设计十六进制7段译码器--
6•设计生成1KHz或10KHz待测信号--Fin
7•完成频率计设计、仿真和硬件实现。
实验程序:
modulefrequenee(
rst,
inputoutputreg[31:
0]freq_out//频率输出
);
reg[31:
0]cnt1,num;
//cnt1,分频作用,产生脉宽一秒基准时钟//
num,用来计算1s内待测信号所发出的脉冲数用来计数
/****产生占空比为50%,周期为2s的单位脉冲sec****/
always@(posedgeclk)
begin
if(cnt仁=50_000_000)//50000000分频,产生脉宽1s脉宽基准时
钟(要基准时钟为50M)
cnt1<
=0;
sec<
=~sec;
end
else
=cnt1+1;
/****统计待测信号在单位时间1s内产生的脉冲数****/
always@(posedgeCLK_X)
if(!
rst)
freq_out<
num<
state<
=1;
if(sec)//sec为高电平期间(1s),统计待测信号
产生的脉冲数
=num+1;
else//sec为低电平期间(1s),读取待测信号产生的脉冲数
case(state)
0:
beginfreq_out<
=num;
state<
end//读取脉冲数(由于freq为reg型,在下一次sec低电平到来之前,会一直保持当前值不变)
1:
num<
//将num清零,为下一个
sec高电平期间脉冲数的统计做准备//
endcase
//如果待测时钟频,比1秒脉宽的基准时钟还小,才会出现一只增数字的情况,即num未来的及清零
endendmodule
modulenewclk(clk,reset,clk_out);
inputclk,reset;
outputclk_out;
regclk_out;
reg[100:
0]count;
parameterN=5000;
//分频产生1KHZ脉的时钟
if(!
reset)
count<
=1'
b0;
clk_out<
if(count<
N/2-1)
=count+1'
b1;
endmodule
moduleshili(outputreg[6:
0]h1,
input[3:
0]c,
inputclk
=~clk_out;
always@(c)begin
case(c[3:
0])
4'
b0000:
h1<
='
b1000000;
b0001:
b1111001;
b0010:
b0100100;
b0011:
b0110000;
b0100:
b0011001;
b0101:
b0010010;
b0110:
b0000010;
b0111:
b1111000;
b1000:
b0000000;
b1001:
b0010000;
b1010:
b0001000;
b1011:
b0000011;
b1100:
b1000110;
b1101:
b0100001;
b1110:
b0000110;
b1111:
b0001110;
default:
h1<
//H必
moduletop_sevev(output[63:
0]H,须为wire行变量
input[31:
0]freq,inputclk
//八个
shiliseven_0(H[7:
0],freq[3:
0],clk);
七段数码管的模块的实例化
shiliseven_1(H[15:
8],freq[7:
4],clk);
shiliseven_2(H[23:
16],freq[11:
8],clk);
shiliseven_3(H[31:
24],freq[15:
12],clk);
shiliseven_4(H[39:
32],freq[19:
16],clk);
shiliseven_5(H[47:
40],freq[23:
20],clk);
shiliseven_6(H[55:
48],freq[27:
24],clk);
shiliseven_7(H[63:
56],freq[31:
28],clk);
endmodule
原理图:
实验结果:
1000Hz的测量结果
100000Hz的测量结果