EDA简易数字频率计设计Word下载.docx

上传人:b****6 文档编号:8639681 上传时间:2023-05-12 格式:DOCX 页数:9 大小:83.75KB
下载 相关 举报
EDA简易数字频率计设计Word下载.docx_第1页
第1页 / 共9页
EDA简易数字频率计设计Word下载.docx_第2页
第2页 / 共9页
EDA简易数字频率计设计Word下载.docx_第3页
第3页 / 共9页
EDA简易数字频率计设计Word下载.docx_第4页
第4页 / 共9页
EDA简易数字频率计设计Word下载.docx_第5页
第5页 / 共9页
EDA简易数字频率计设计Word下载.docx_第6页
第6页 / 共9页
EDA简易数字频率计设计Word下载.docx_第7页
第7页 / 共9页
EDA简易数字频率计设计Word下载.docx_第8页
第8页 / 共9页
EDA简易数字频率计设计Word下载.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA简易数字频率计设计Word下载.docx

《EDA简易数字频率计设计Word下载.docx》由会员分享,可在线阅读,更多相关《EDA简易数字频率计设计Word下载.docx(9页珍藏版)》请在冰点文库上搜索。

EDA简易数字频率计设计Word下载.docx

0]<

9)q[3:

0]=q[3:

0]+1;

elsebeginq[3:

0]=0;

if(q[7:

4]<

9)q[7:

4]=q[7:

4]+1;

elsebeginq[7:

4]=0;

if(q[11:

8]<

9)q[11:

8]=q[11:

8]+1;

elsebeginq[11:

8]=0;

if(q[15:

12]<

9)q[15:

12]=q[15:

12]+1;

elsebeginq[15:

12]=0;

if(q[19:

16]<

9)q[19:

16]=q[19:

16]+1;

elsebeginq[19:

16]=0;

if(q[23:

20]<

9)q[23:

20]=q[23:

20]+1;

elsebeginq[23:

20]=0;

if(q[27:

24]<

9)q[27:

24]=q[27:

24]+1;

elsebeginq[27:

24]=0;

if(q[31:

28]<

9)q[31:

28]=q[31:

28]+1;

elseq[31:

28]=0;

end

end

endmodule

方法一仿真波形如下所示:

方法二:

modulemy_(clk,clr,q);

reg[31:

always@(posedgeclkornegedgeclr)

elseif(q[3:

elseif(q[7:

9)beginq[7:

q[3:

end

elseif(q[11:

9)beginq[11:

q[7:

elseif(q[15:

9)beginq[15:

q[11:

elseif(q[19:

9)beginq[19:

q[15:

elseif(q[23:

9)beginq[23:

q[19:

elseif(q[27:

9)beginq[27:

q[23:

elseif(q[31:

9)beginq[31:

q[27:

elseq[31:

endmodule

方法二仿真波形如下所示:

对比发现,方法二的程序显得更简单一些,但实际给出一样的仿真时间的时候,方法二的编译比方法一的时间要长的多,而且方法一的思想显得很清晰,很容易理解一些,总体思想就是,如果相邻低位小于9,则低位在每个时钟的上升沿进行加1,而高位不变;

反之,低位清0,高位加1.

2)分频器

24MHz分频为400Hz模块:

modulezhuan24m_400hz(clk24m,clko);

inputclk24m;

outputclko;

regclko;

reg[15:

0]count;

always@(posedgeclk24m)

if(count==60000)begincount=0;

clko=1;

elsebegincount=count+1;

clko=0;

400Hz分频为1Hz模块:

modulezhuan400_1hz(clk400,clko);

inputclk400;

always@(posedgeclk400)

if(count==400)begincount=0;

3)寄存器buffer模块

modulebuffer(qo,din,load);

input[31:

0]din;

inputload;

output[31:

0]qo;

always@(posedgeload)

beginqo=din;

end

该模块的作用就是锁存每次计数器送过来的数据,只在时钟的上升沿将数据送到8选一数据选择器,然后再通过译码器进行输出。

4)8选一数据选择器模块:

modulemux_8(m,sel,out);

input[2:

0]sel;

input[31:

0]m;

output[3:

0]out;

wire[3:

assignout=(sel==0)?

m[3:

0]:

(sel==1)?

m[7:

4]:

(sel==2)?

m[11:

8]:

(sel==3)?

m[15:

12]:

(sel==4)?

m[19:

16]:

(sel==5)?

m[23:

20]:

(sel==6)?

m[27:

24]:

m[31:

28];

该8选一数据选择器的功能就是将输进来的数据Q按比特由高到底每4位送个一个数码管,数码管也是由高到底进行显示的

5)译码模块:

moduledeled(in,a,b,c,d,e,f,g,dp);

input[3:

0]in;

outputa,b,c,d,e,f,g,dp;

wirea,b,c,d,e,f,g,dp;

assign{dp,a,b,c,d,e,f,g}=

(in==4'

b0000)?

8'

b01111110:

(in==4'

b0001)?

b00110000:

b0010)?

b01101101:

b0011)?

b01111001:

b0100)?

b00110011:

b0101)?

b01011011:

b0110)?

b01011111:

b0111)?

b01110000:

b1000)?

b01111111:

b1001)?

b01111011:

b00000000;

Endmodule

6)扫描模块:

modulescan(clr,clk,q);

output[2:

reg[2:

begin

if(!

elseq=q+1;

7)消零模块

modulemyq_p(q,p);

input[31:

0]p;

always@

(1)

28]==0)beginp[31:

28]=4'

b1111;

if(q[27:

24]==0)beginp[27:

24]=4'

20]==0)beginp[23:

20]=4'

16]==0)beginp[19:

16]=4'

if(q[15:

12]==0)beginp[15:

12]=4'

if(q[11:

8]==0)beginp[11:

8]=4'

if(q[7:

4]==0)beginp[7:

4]=4'

if(q[3:

0]==0)p[3:

0]=4'

elsep[3:

0];

end

elsep[7:

0]=q[7:

end

elsep[11:

0]=q[11:

elsep[15:

0]=q[15:

end

elsep[19:

0]=q[19:

end

elsep[23:

0]=q[23:

end

elsep[27:

0]=q[27:

end

elsep=q;

该程序是从高位到低位依次进行判断,凡是高位的0都把它灭掉,数据中间的0和尾部的0都照常显示。

四.结果分析

本实验所设计的简易数字频率计只能测量大于1Hz的方波信号,小于1的只能按1或0显示,这个频率计在测量达到十万Hz以上是会有20~30Hz的误差,而且只能测量方波,对于需要测量其它的波(如正弦波,三角波等)已不能满足,所以我们还有更多的功能有待改进。

五.经验总结

我们需要对一些常见的测量仪器的一些简单的、基本的原理掌握清楚,然后根据我们已经学习的VerilogHDL语言把它描述出来才是我们的能力,从这次实验当中,我觉得我们首先需要的是一种把所做的实验的原理框图转变成我们的verilog语言,然后需要的一种能力就是把我们想到的问题画成一张原理框图,之后根据这个原理框图设计出我们的作品,只有熟练地做到这两步,我们才能创造出一些属于我们自己的东西。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2