预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共29页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

软件设计 1.软件流程图 VerilogHDL和C语言程序相结合的软件流程图见图2。 图2软件流程图 2.软件设计 部分程序源码 频率计(VerilogHDL程序) 本程序主要用于测量出输入信号的频率。采用等精度测量的方法,在整个测量范围内误差相同。可以自动切换量程,指示数据小数点的位置和频率单位。当输入信号频率过低时还能发出相应的指示信号,通知CPU做出相应控制。通过适度的采样控制减小了测量误差。 modulefrequency(clk,ret,Fx_clr,Fxin,Fout,LF,spoint,flag_MK); inputwireclk,ret; inputwireFxin;//待测频率输入端口 inputwireFx_clr;//CPU的控制信号,控制频率计清零 outputreg[15:0]Fout;//测得的频率值 outputregLF;//低频标志,高电平是表示为低频 outputreg[1:0]spoint;//指示小数点的位置 outputreg[1:0]flag_MK;//频率单位:M标志K标志 wireFx_cph; reg[7:0]cp_ch; regFend;//测频结束标志 regFsst;//控制本地标频开始计数的标志0:开始计数 reg[39:0]Ns;//对本地标频的计数 reg[23:0]LFCH;//低频检测计数器,对底频率和直流做出警报和指示 reg[15:0]Nx,Nx1;//对待测频率的计数,Nx1检测低频被测信号的暂存器 regs0,s1,s2,s3,s4,s5,s6,s7,s8,sx1000; always@(posedgeclkornegedgeret) if(!ret) begin sx1000<=1'b0; s0<=1'b0; s1<=1'b0; s2<=1'b0; s3<=1'b0; s4<=1'b0; s5<=1'b0; s6<=1'b0; s7<=1'b0; s8<=1'b0; end else begin sx1000<=(Nx>=1000); s0<=(Ns==40'd100_0); s1<=(Ns==40'd100_00); s2<=(Ns==40'd100_000); s3<=(Ns==40'd100_000_0); s4<=(Ns==40'd100_000_00); s5<=(Ns==40'd100_000_000); s6<=(Ns==40'd100_000_000_0); s7<=(Ns==40'd100_000_000_00); s8<=(Ns>=40'd100_000_000_000); end always@(posedgeclkornegedgeret) if(!ret) begin Fend<=1'b0; flag_MK<=2'b00; spoint<=2'b00; Fout<=16'h0000; end else begin if(Fend)Fend<=1'b0; if(Fx_clr)Fend<=1'b1; if(sx1000) case({s0,s1,s2,s3,s4,s5,s6,s7,s8})//--F-sp-MK 9'b10_0000_000:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_01_10}; 9'b01_0000_000:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_10_10}; 9'b00_1000_000:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_11_10}; 9'b00_0100_000:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_01_01}; 9'b00_0010_000:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_10_01}; 9'b00_0001_000:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_11_01}; 9'b00_0000_100:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_01_00}; 9'b00_0000_010:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_10_00}; 9'b00_0000_001:{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_11_00}; endcase end always@(posedgeclkorposedgeFend) if(Fend) begin LFCH<=24'h000000; LF<=1'b0; end else begin LFCH<=LFCH+1'b1; if(LFC