频率计课程设计实验报告.docx
- 文档编号:12811344
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:18
- 大小:152.61KB
频率计课程设计实验报告.docx
《频率计课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《频率计课程设计实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
频率计课程设计实验报告
课程设计报告
课程设计名称:
电子系统综合课程设计
课程设计题目:
频率计
频率计课程设计实验报告
一、设计任务要求
1、根本要求:
设计一个3位十进制数字显示的数字式频率计,其频率测量范围在1MHz内。
量程分别为10kHz,100kHz和1MHz三档,即最大读数分别为和999kHz。
这里要求量程可以自动转换,详细要求如下:
1〕、当读数大于999时,频率计处于超量程状态,此时显示器发出溢出指示〔最高位显示F,其余各位不显示数字〕,下一次测量时,量程自动增大一档。
2〕、当读数小于099时,频率计处于欠量程状态,下一次测量时,量程自动减小一档。
3〕、采用记忆显示方式,即计数过程中不显示数据,待计数过程完毕以后,显示测频结果,并将此显示结果保持到下一次计数完毕,显示时间不小于1s。
4〕、小数点位置随量程变更自动移位。
二、设计方案
1、系统功能〔根本功能和附加功能〕
根本功能:
显示待测频率,LED灯显示小数点,显示待测频率的量程。
附加功能:
实现量程自由变化,通过拨码开关控制待测频率大小。
2、系统设计方案说明
时钟输入50MHZ
分频
计数
控制量程和显示
BCD显示
被测信号
1、分频模块:
由于测频时不同量程档需要不同的时基信号,分频模块是必不可少的。
系统通过试验箱给定的50MHZ的频率通过分频变成0.5HZ,即1秒钟得计数时间,通过1秒钟的记数时间里待测频率上升沿的数量实现频率测定,待测频率通过分频,多路器等实现各频率的测定
2计数模块:
想要实现频率的测定,其实就是在1秒钟的计数时间里对待测频率信号上升沿进展计数,所以计数模块是不可缺少的,本计数器需输出指示超量程和欠量程状态的信号。
3量程控制模块:
对待测频率的量程进展判断,确定量程以后,根据不同的量程,在试验箱上显示,我们的设计是4个量程〔1,2,3量程和超量程〕。
:
4BCD译码模块:
用到实验箱SOPC上的6个静态共阳数码管中的后三个数码管,并且试验箱内部有译码器,只需要输入4位数就可以在数码管上显示。
三、各模块程序如下:
1、分频模块程序:
1〕百分频模块程序:
moduleplj(clk,dingshi);
inputclk;
outputdingshi;
reg[40:
0]counter;
regdingshi;
always@(posedgeclk)
begin
if(counter==49)//计数时钟上升沿数量,100次时钟周期
begin//输出一周期信号,得到100分频信号。
dingshi<=~dingshi;
counter<=0;
end
else
begin
counter<=counter+1;
end
end
endmodule
给定时钟频率,时钟周期过100次,输出一个周期信号。
得到原信号的100分频信号;
2〕非常频模块程序:
moduleFP_SHI(clk,dingshi);
inputclk;
outputdingshi;
reg[40:
0]counter;
regdingshi;
always@(posedgeclk)
begin
if(counter==4)//计数时钟上升沿数量,10次时钟周
begin//期,输出一次周期信号,得到10
dingshi<=~dingshi;//分频信号
counter<=0;
end
else
begin
counter<=counter+1;
end
end
endmodule
给定时钟频率,时钟周期过10次,输出一个周期信号。
得到原信号的10分频信号;
3〕2分频模块程序:
moduleFP_wu(clk,dingshi);
inputclk;
outputdingshi;//在时钟信号的上升沿,输出翻转一次,得到时钟的
regdingshi;//2分频信号
always@(posedgeclk)
begin
dingshi<=~dingshi;
end
endmodule
给定时钟频率,时钟周期过5次,输出一个周期信号。
得到原信号的5分频信号;
2.计数模块程序:
modulejishu(clk,shuruxinhao,shuchu);
inputclk,shuruxinhao;
output[40:
0]shuchu;
reg[40:
0]shuchu;
reg[40:
0]counter,counter2;
regi;
always@(posedgeshuruxinhao)
begin
if(clk==1)
begin//假如输入信号有变化,而且时钟来了上升沿,那么计数器加1;
counter<=counter+1;
end
else
begin
if(counter!
=0)//假如时钟电平为低电平,而且counter不是低电
shuchu<=counter;//平,把计数的值往下一模块传递,然后把计数
counter<=0;//器的值清零。
end
end
endmodule
在定时信号的高电平,数待测信号的上升沿的数量。
在输出管脚输出1秒钟待测信号的上升沿数量,即是待测频率的频率。
3.量程控制模块程序:
moduleliangcheng(shuru,shuchu,clk,liangcheng);//clkhighfrequency
input[40:
0]shuru;
inputclk;
outputliangcheng,shuchu;
reg[1:
0]liangcheng;
reg[40:
0]shuchu;
always@(clk)
begin
if(shuru<10000)//假如频率<10000,量程00;
begin//假如10000<频率<100000,量程01;
liangcheng<=2'b00;//假如100000<频率<1000000,量程10;
shuchu<=shuru;//假如频率大于1M,量程为11;
end
elseif(shuru>=10000&&shuru<100000)
begin
liangcheng<=2'b01;
shuchu<=shuru;
end
elseif(shuru>=100000&&shuru<=1000000)
begin
liangcheng<=2'b10;
shuchu<=shuru;
end
else
begin
liangcheng<=2'b11;
shuchu<=shuru;
end
end
endmodule
输入9800显示量程00,输入12000显示量程01。
,输入120000量程显示10
4.显示模块程序:
modulexianshi(liangcheng,x1,x2,x3,shuru,clk,point1,point2,led3);
inputclk;
input[40:
0]shuru;
output[3:
0]led3;
reg[3:
0]led3;
input[1:
0]liangcheng;
outputx1,x2,x3,point1,point2;
reg[4:
0]x1,x2,x3;
regpoint1,point2;
reg[40:
0]temp1,temp2;
always@(clk)
begin
if(liangcheng==2'b00)//量程1;
begin
if(shuru>1000)//频率大于1000,那么用K做单位
begin
x1<=shuru/1000;
temp1<=shuru%1000;
x2<=temp1/100;
temp2<=temp1%100;
x3<=temp2/10;
point1<=0;
point2<=1;
led3<=4'b0001;
end
else//频率小于1000,显示三位,不用K做单位
begin
x1<=shuru/100;
temp1<=shuru%100;
x2<=temp1/10;
temp2<=temp1%10;
x3<=temp2;
point1<=1;
point2<=1;
led3<=4'b0001;
end
end
elseif(liangcheng==2'b01)//量程2
begin
x1<=shuru/10000;//分出3位显示,并显示小数点2
temp1<=shuru%10000;
x2<=temp1/1000;
temp2<=temp1%1000;
x3<=temp2/100;
point1<=1;
point2<=0;
led3<=4'b0010;
end
elseif(liangcheng==2'b10)//量程3
begin//分出3位显示,并不显示小数点
x1<=shuru/100000;
temp1<=shuru%100000;
x2<=temp1/10000;
temp2<=temp1%10000;
x3<=temp2/1000;
point1<=1;
point2<=1;
led3<=4'b0011;
end
elseif(liangcheng==2'b11)//量程4
begin//超过量程,显示FFF;
led3<=4'b0100;
end
end
endmodule
量程00,测得待测信号频率1200HZ,X1显示1,X2显示2,X3显示0;point1低电平,point2高电平。
5.译码模块:
moduledecode(x,liangcheng,clk,led);
inputclk;
input[1:
0]liangcheng;
input[4:
0]x;
outputled;
reg[3:
0]led;
always@(clk)
begin
if(liangcheng==2'b00||liangcheng==2'b01||liangcheng==2'b10)
begin
case(x)
4'b1001:
led=4'b1001;
4'b1000:
led=4'b1000;
4'b0111:
led=4'b0111;
4'b0110:
led=4'b0110;
4'b0101:
led=4'b0101;//根据传递来的数据,决定是直接显示数据
4'b0100:
led=4'b0100;//还是显示FFF;
4'b0011:
led=4'b0011;
4'b0010:
led=4'b0010;
4'b0001:
led=4'b0001;
4'b0000:
led=4'b0000;
default:
led=4'b0000;
endcase
end
elseif(liangcheng==2'b11)
begin
led<=4'b1111;
end
end
endmodule
6.选频模块程序:
modulexuanpin(a,b,c,d,e,f,g,h,p,q,r,HZout);
inputa,b,c,d,e,f,g,h,p,q,r;
outputHZout;
regHZout;
always@(aorborcordoreorforgorh)
begin
case({p,q,r})
3'b000:
HZout<=a;
3'b001:
HZout<=b;//根据拨码开关p,q,r决定选择哪一个频率。
3'b010:
HZout<=c;
3'b011:
HZout<=d;
3'b100:
HZout<=e;
3'b101:
HZout<=f;
3'b110:
HZout<=g;
3'b111:
HZout<=h;
default:
HZout<=a;
endcase
end
endmodule
p,q,r上下电平组合决定HZout选择的频率源〔a,b,c,d,e,f,g,h〕
四、调试过程分析、遇到的问题及解决方法:
对于技术模块的总数据的传输控制,之前由于控制条件没有写好,传输时总是把数据清零了,然后传输,这样传输来的数据总是0,得不到我们想要的结果,经过考虑,改变了控制条件〔counter!
=0〕然后传递值,counter清零,这样得到我们想要的计数值。
而且一旦待测信号频率改变,能及时更新结果。
刚开场以为需要一个译码器,来用7段数码管显示数字,于是写了一个译码器,后来发现不用译码,能直接显示2进制数字,于是把译码模块改为传递值的模块,省去了做大的改动的费事。
五、设计总结:
通过此次课程设计,使我更加扎实的掌握了有关QuartusII软件,重新学习了我们忘记的VerilogHDL语言,使我们对EDA的知识重新稳固了。
也暴露出了前期我在这方面的知识欠缺和经历缺乏。
理论出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
实验过程中,也对团队精神的进展了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。
果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑考虑,动手理论,就没有弄不懂的知识,收获颇丰
六、参考资料
书名出版社作者名
EDA课程设计教程与应用人民邮电出版社王金明
EDA数字系统设计教程北京航空航天大学出版社安金立
EDA程序设计与应用人民邮电出版社陈佳
VerilogHDL设计理论与指导机械工业出版社刘秋云王维
VerilogHDL实验与应用系统设计北京航空航天大学出版社常小明
附件1原理电路图
附件2管脚分配图
附件3频率列表
0500HZ第一位显示量程1
12.5K第一位显示量程1
25K第一位显示量程1
325K第一位显示量程2
450K第一位显示量程2
5250K第一位显示量程3
6500K第一位显示量程3
750M第一位显示量程4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 频率计 课程设计 实验 报告