基于Verilog的数字频率计的设计包含代码及仿真Word文档格式.docx
- 文档编号:21068381
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:21
- 大小:270.85KB
基于Verilog的数字频率计的设计包含代码及仿真Word文档格式.docx
《基于Verilog的数字频率计的设计包含代码及仿真Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于Verilog的数字频率计的设计包含代码及仿真Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
VerilogHDL是目前应用最为广泛的硬件描述语言.VerilogHDL可以用来进行各种层次的逻辑设计,也可以进数字系统的逻辑综合,仿真验证和时序分析等。
VerilogHDL适合算法级,寄存器级,逻辑级,开关级、系统级和版图级等各个层次的设计和描述.
verilogHDL进行设计最大的优点是其工艺无关性.这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路.
verilogHDL是一种硬件描述语言(hardwaredescriptionlanguage),为了制作数字电路而用来描述ASICS和FPGA的设计之用。
verilogHDL的设计者想要以C编程语言为基础设计一种语言,可以使工程师比较容易学习。
Verilog是由en:
GatewayDesignAutomation公司于大约1984年开始发展。
GatewayDesignAutomation公司后来被CadenceDesignSystems于1990年所购并。
现在Cadence对于Gateway公司的Verilog和Verilog-XL模拟器拥有全部的财产权。
选择VHDL还是verilogHDL?
这是一个初学者最常见的问题。
其实两种语言的差别并不大,他们的描述能力也是类似的。
掌握其中一种语言以后,可以通过短期的学习,较快的学会另一种语言。
选择何种语言主要还是看周围人群的使用习惯,这样可以方便日后的学习交流。
当然,如果您是专用集成电路(ASIC)设计人员,则必须首先掌握verilog,因为在IC设计领域,90%以上的公司都是采用verilog进行IC设计。
对于PLD/FPGA设计者而言,两种语言可以自由选择。
八、实验原理
所谓“频率”,就是周期性信号在单位时间(1秒)内变化的次数。
若在一定时间内计得这个周期信号变化的次数为N,则其频率可表达为:
(1)
电子技术器可以严格按公式
(1)所表达的频率的定义进行测频,其原理方框图如图1所示:
图1测频原理图
首先,把被测信号
(以正弦波为例)通过放大整形电路变成脉冲
(实际上变成方波即可)其重复频率等于被测频率
,然后将它加到闸门的一个输入端。
闸门通过门控信号
来控制开、闭时间,只有在闸门开通时间T内,被计数的脉冲
才能通过闸门,被送到十进制电子计数器进行计数。
门控信号的时间T是非常准确的,以它作为时间基准,它由时基发生器提供。
时基信号发生器由一个高稳定的石英振荡器和一系列数字分频器组成,由它输出的标准时间脉冲(时标)去控制门控电路形成门控信号。
比如,时标信号的重复周期为1S,则加到闸门的门控信号作用时间T及闸门时间亦准确的等于1S,及闸门开通时间为1S,这时若计得10000个数,则有
(1)式知,被测频率
。
从以上讨论可知,电子计数器的测频原理实质上以比较法为基础,它将
和时基信号频率相比,两个频率相比的结果以数字的形式显示出来。
九、
1.原理框图溢出信号
clearlatch
时基
2、各模块功能及实现
一.分频模块程序
modulecount(rest,clk,clk_1hz,clk_10hz,clk_100hz,clk_1khz);
inputclk,rest;
outputregclk_1hz,clk_10hz,clk_100hz,clk_1khz;
reg[29:
0]count1,count2,count3,count4;
initial
begin
clk_1hz=0;
clk_10hz=0;
clk_100hz=0;
clk_1khz=0;
count1=0;
count2=0;
count3=0;
count4=0;
end
always@(posedgeclk)
begin
if(!
rest)
count1<
=0;
count2<
count3<
count4<
clk_1hz<
clk_10hz<
clk_100hz<
clk_1khz<
end
elsebegin
if(count1==24000000)
begincount1<
clk_1hz<
=~clk_1hz;
elsecount1<
=count1+1;
if(count2==2400000)
begincount2<
clk_10hz<
=~clk_10hz;
end
elsecount2<
=count2+1;
if(count3==240000)
begincount3<
=~clk_100hz;
elsecount3<
=count3+1;
if(count4==24000)
begincount4<
=~clk_1khz;
elsecount4<
=count4+1;
endmodule
仿真图
仿真模块
二,门控电路和清零,锁存,阀门信号产生程序
modulechose(rest,clk_10hz,clk_100hzhz,clk_1khz,key1,key10,key100,
gate_out1,ff,clk_latch,clk_clear);
inputrest,clk_10hz,clk_100hz,clk_1khz,key1,key10,key100;
outputgate_out1,clk_latch,clk_clear;
outputreg[2:
1]ff;
reggate_out1,clk_latch,clk_clear,gate;
reg[4:
1]count;
initialbegingate_out1=0;
ff=0;
clk_latch=0;
clk_clear=0;
gate=0;
count=0;
always@(posedgeclk_1khz)
begin
rest)begingate_out1<
ff<
=2'
b00;
if(key1==1&
&
key10==0&
key100==0)begingate<
=clk_10hz;
b01;
elseif(key1==0&
key10==1&
=clk_100hz;
ff<
b10;
key100==1)begingate<
=clk_1khz;
b11;
elsebeginff<
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgegate)
count<
=count+1;
if(count<
=9)
begingate_out1<
=1;
clk_clear<
clk_latch<
elseif(count==11)
elseif(count==13)
count<
else
三,计数器程序
modulecounter(rest,start,clk_in,cnt1,cnt2,cnt3,cnt4,cnt5,cnt6,yichu,clk_clear);
inputrest,start,clk_in,clk_clear;
outputyichu;
regyichu;
outputreg[4:
1]cnt1,cnt2,cnt3,cnt4,cnt5,cnt6;
initialbegin
yichu=1;
cnt1<
=4'
b0000;
cnt2<
cnt3<
cnt4<
cnt5<
cnt6<
always@(posedgeclk_in)
begin
rest)begin
cnt1<
cnt4<
cnt5<
cnt6<
if(clk_clear==1)
yichu<
elseif(start==1)
if((cnt6==4'
b1001)&
(cnt5==4'
(cnt4==4'
(cnt3==4'
(cnt2==4'
(cnt1==4'
b1001))
cnt3<
yichu<
elseif((cnt5==4'
cnt1<
cnt3<
cnt5<
b0001;
=cnt6+4'
elseif((cnt4==4'
b1001))begin
cnt1<
cnt4<
=cnt5+4'
=cnt6;
end
elseif((cnt3==4'
cnt1<
cnt4<
=cnt4+4'
=cnt5;
end
elseif((cnt2==4'
cnt1<
=cnt3+4'
=cnt4;
elseif((cnt1==4'
begin
=cnt2+4'
=cnt3;
elsebegin
cnt1<
=cnt1+4'
=cnt2;
cnt4<
end
模块仿真图
四,锁存以及译码扫描显示程序
modulev138(rest,clk_1khz,se,in1,in2,in3,in4,in5,in6,segs,ff,dp,led,en,clk_latch);
input[4:
1]in1,in2,in3,in4,in5,in6;
inputclk_1khz,rest;
input[2:
1]ff;
inputclk_latch;
outputregdp,led,en;
1]se;
reg[3:
1]count,dig;
outputreg[7:
1]segs;
1]sign_out4;
1]latch1,latch2,latch3,latch4,latch5,latch6;
initialbegincount<
dp<
=1;
segs<
se<
sign_out4<
led<
en<
latch1<
latch2<
latch3<
latch4<
latch5<
latch6<
////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclk_latch)
=in1;
=in2;
=in3;
=in4;
=in5;
=in6;
/////////////////////////////////////////////////////////////////////////////////锁存器。
always@(posedgeclk_1khz)
count<
/////////////////////////////////////////////////////////////////////////////////位选自加
always@(posedgeclk_1khz)
led<
else
case(count)
0:
beginsign_out4<
=latch1;
=count;
1:
=latch2;
2:
beginsign_out4<
=latch3;
3:
=latch4;
end
4:
=latch5;
5:
=latch6;
default:
b1111;
endcase
end
end
////////////////////////////////////////////////////////////////////////////////////////////将数据依次译码
always@(posedgeclk_1khz)
begin
if(ff==2'
b01&
se==3)begindp<
elseif(ff==2'
b10&
se==2)begindp<
b11&
se==1)begindp<
elsebegindp<
//////////////////////////////////////////////////////////////////////////////////档位选择
always@(sign_out4)
if(!
beginsegs<
else
case(sign_out4)
=7'
b0000001;
b1001111;
2:
b0010010;
3:
b0000110;
4:
b1001100;
b0100100;
6:
b1100000;
7:
b0001111;
8:
b0000000;
9:
b0000100;
b1111111;
//////////////////////////////////////////////////////////////////////////////////////译码显示
五,顶层电路程序
moduletop(rest,clk,key1,key2,key3,clk_in,se,segs,led,dp,en,yichu);
inputrest,clk,clk_in,key1,key2,key3;
outputdp,led,en,yichu;
output[3:
1]se;
output[7:
wire[4:
1]out1,out2,out3,out4,out5,out6;
wire[2:
wiregate_out1;
countcount(.clk(clk),.rest(rest),.clk_10hz(clk_10hz),.clk_100hz(clk_100hz),.clk_1khz(clk_1khz));
///////////////////////////////////////////////////////////////////////分频器
chose
chose(.rest(rest),.clk_1khz(clk_1khz),.clk_10hz(clk_10hz),.clk_100hz(clk_100hz),.
ky1(key1),.key10(key2),.key100(key3),
.gate_out1(gate_out1),.ff(ff),.clk_latch(clk_latch),.
clk_cear(clk_clear));
/////////////////////////////////////时基选择模块
countercounter(.start(gate_out1),.rest(rest),.clk_in(clk_in),.cnt1(out1),
.yichu(yichu),.cnt2(out2),.cnt3(out3),.cnt4(out4),.cnt5(out5),.cnt6(out6),.clk_clear(clk_clear));
////////////////////////////////////计数器器
v138v138(.rest(rest),.clk_1khz(clk_1khz),.se(se),
.led(led),.in1(out1),.in2(out2),.in3(out3),.in4(out4),
.in5(out5),.in6(out6),.segs(segs),.ff(ff),.en(en),.dp(dp),.clk_latch(clk_latch));
///////////////////////
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Verilog 数字频率计 设计 包含 代码 仿真