FPGA实验8位数码显示频率计设计.docx
《FPGA实验8位数码显示频率计设计.docx》由会员分享,可在线阅读,更多相关《FPGA实验8位数码显示频率计设计.docx(9页珍藏版)》请在冰豆网上搜索。
FPGA实验8位数码显示频率计设计
哈尔滨理工大学
软件学院
实验报告
课程FPGA
题目8位数码显示频率计设计(4学时)
班级集成12-2班
专业集成电路设计与集成系统
学生
学号1214020227
2014年10月22日
实验三8位数码显示频率计设计
实验三8位数码显示频率计设计(4学时)
实验目的^
设计8位频率计,学习较复杂的数字系统的设计方法。
实验原理及内容二
根据频率的定义和频率测量的基本原理。
测定信号的频率必换有一个脉宽为1秒的输入信号脉冲计数允许
的信号;1秒计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期作好准备。
实验步骤:
i设]十生成1秒时钟信号“CLK
2•设计测频控制信号发生器一
3■设#1秒计磁值锁存器--
4•设计32位一进制计数器一彳设计十六进制7段译码器一
FTCTRL;REG32B;COUNTER32BDecoder
6■设计生成lKHz或lOKHz待测信号一Fin7•気成频率计设计、仿真和妓件实现.
频率计电路框图
频率计测频控制器FTCTRL测控时序图
实验目的:
实验原理及内容:
根据频率的定义和频率测量的基本原理。
测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计
数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清零,
为下一测频计数周期作好准备。
CLK
FTCTRL;
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)
begin
cnt1<=0;
sec<=~sec;
end
else
cnt1<=cnt1+1;
end
/****统计待测信号在单位时间1s内产生的脉冲数****/
always@(posedgeCLK_X)
begin
if(!
rst)
begin
freq_out<=0;
num<=0;
state<=1;
end
else
begin
if(sec)//sec为高电平期间(1s),统计待测信号
产生的脉冲数
begin
num<=num+1;
state<=0;
end
else//sec为低电平期间(1s),读取待测信号产生的脉冲数
begin
case(state)
0:
beginfreq_out<=num;state<=1;end//读取脉冲数(由于freq为reg型,在下一次sec低电平到来之前,会一直保持当前值不变)
1:
num<=0;//将num清零,为下一个
sec高电平期间脉冲数的统计做准备//
endcase
end
//如果待测时钟频,比1秒脉宽的基准时钟还小,才会出现一只增数字的情况,即num未来的及清零
end
endendmodule
modulenewclk(clk,reset,clk_out);
inputclk,reset;
outputclk_out;
regclk_out;
reg[100:
0]count;
parameterN=5000;//分频产生1KHZ脉的时钟
always@(posedgeclk)
if(!
reset)
begin
count<=1'b0;
clk_out<=1'b0;
end
else
if(countbegin
count<=count+1'b1;
end
else
begin
end
endmodule
moduleshili(outputreg[6:
0]h1,
input[3:
0]c,
inputclk
);
count<=1'b0;
clk_out<=~clk_out;
always@(c)begin
case(c[3:
0])
4'b0000:
h1<='b1000000;
4'b0001:
h1<='b1111001;
4'b0010:
h1<='b0100100;
4'b0011:
h1<='b0110000;
4'b0100:
h1<='b0011001;
4'b0101:
h1<='b0010010;
4'b0110:
h1<='b0000010;
4'b0111:
h1<='b1111000;
4'b1000:
h1<='b0000000;
4'b1001:
h1<='b0010000;
4'b1010:
h1<='b0001000;
4'b1011:
h1<='b0000011;
4'b1100:
h1<='b1000110;
4'b1101:
h1<='b0100001;
4'b1110:
h1<='b0000110;
4'b1111:
h1<='b0001110;
default:
h1<='b1000000;
endcase
endendmodule
//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的测量结果