用verilog HDL设计地4位频率计.docx
- 文档编号:17217522
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:12
- 大小:159.55KB
用verilog HDL设计地4位频率计.docx
《用verilog HDL设计地4位频率计.docx》由会员分享,可在线阅读,更多相关《用verilog HDL设计地4位频率计.docx(12页珍藏版)》请在冰点文库上搜索。
用verilogHDL设计地4位频率计
简单4位数字频率计设计
一、设计要求
(1)、利用VerilogHDL语言行为描述方法,设计一个简单的4位数字频率计;
(2)、要求输入标准时钟信号频率为1MHz,系统可计数频率围为1Hz~9999Hz;
(3)、系统具有复位信号,且当计数频率发生溢出时能够给出指示信号,计数的频率通过4个共阴数码管进行显示(动态扫描显示)。
二、系统结构框图
根据设计要求,输入系统的标准时钟信号要先经过分频后得到一个周期为2s占空比50%的信号,用来对输入信号采样,得到采样信号GATED_CLK;为了能够控制计数模块对采样的信号进行正常计数及保存计数后的频率,这要求,要在计数器刚好完成计数后立即将数据输出给显示部分进行显示,并且要为下次计数做好准备,因此数据信号处理部分还要有产生控制计数器的两个信号LOAD和COUNTER_CLR,LOAD信号控制计数完成后的数据及时输出给显示,COUNTER_CLR信号控制计数器清零;计数模块就是完成对采样信号的计数,并当计数发生溢出时产生溢出信号FLOW_UP;显示控制模块要完成将计数模块输入的信号进行译码显示。
三、信号描述
测试信号采样原理:
GATED_CLK、LOAD、COUNTER_CLR信号的关系:
程序中用到的信号变量:
FREQUENCY_COUNTROL_BLOCK
FREQUENCY_COUNTER_BLOCK
FREQUENCY_DISPLY_BLOCK
GATED_CLK
采样信号
COUT
计数输出信号
DOUT
输出到数码管
LOAD
控制计数器信号
FLOW_UP
计数溢出信号
CDIN
计数输入信号
COUNTER_CLR
清零计数器信号
CLOCK_IN
计数器时钟信号
DCLK_IN
标准时钟信号
CLK_IN
标准时钟信号
LOAD
控制计数输出
RESET
复位信号
SIGNAL_TEST
测试信号
COUNTER_CLR
清零计数信号
RESET
复位信号
RESET
复位信号
四、Verilog程序
各子模块verilog程序:
(1)信号处理模块_verilog:
moduleFREQUENCY_COUNTROL_BLOCK(GATED_CLK,LOAD,COUNTER_CLR,CLK_IN,SIGNAL_TEST,RESET);
outputGATED_CLK;
outputLOAD;
outputCOUNTER_CLR;
inputCLK_IN;
inputSIGNAL_TEST;
inputRESET;
regLOAD;
regCOUNTER_CLR;
regDIVIDE_CLK;
reg[19:
0];
regA1,A2;
//信号分频:
由CLK_IN得到分频后的信号DIVIDE_CLK(0.5Hz)
always(posedgeCLK_IN)
begin
if(RESET)
begin
DIVIDE_CLK<=0;
cn<=0;
end
elseif(cn==1000000)
begin
cn<=0;
DIVIDE_CLK<=~DIVIDE_CLK;
end
else
cn<=cn+1;
end
//频率计数控制信号的产生:
产生LOAD信号和COUNTER_CLR信号
always(posedgeSIGNAL_TEST)
begin
A1<=~DIVIDE_CLK;
end
always(posedgeSIGNAL_TEST)
begin
A2=A1;
end
always(A1orA2)
begin
LOAD=A1&&(!
A2);
end
always(posedgeSIGNAL_TEST)
COUNTER_CLR=LOAD;
//产生驱动计数模块的信号GATED_CLK,也就是被计数模块检测的信号
assignGATED_CLK=SIGNAL_TEST&DIVIDE_CLK;
endmodule
(2)、计数器模块:
moduleFREQUENCY_COUNTER_BLOCK(COUT,FLOW_UP,CLOCK_IN,RESET,LOAD,COUNTER_CLR);
output[15:
0]COUT;
outputFLOW_UP;
inputCLOCK_IN;
inputLOAD;
inputCOUNTER_CLR;
inputRESET;
reg[15:
0]TEMP;
regFLOW_UP;
parameterB_SIZE=16;//二进制位宽,为便于移植,所有定义了成参数
reg[B_SIZE+3:
0]bcd;//转换后的BCD码的位数要比二进制多4位
reg[B_SIZE-1:
0]binary;
reg[B_SIZE-1:
0]bin;
reg[B_SIZE+3:
0]result;
//计数器完成计数得到二进制表示的频率数值
always(CLOCK_INorRESETorLOADorCOUNTER_CLR)
begin
if(RESET|COUNTER_CLR)
begin
TEMP<=0;
FLOW_UP<=0;
end
elseif(LOAD)
binary<=TEMP;
elseif(TEMP>9999)
begin
FLOW_UP<=1;
binary<=9999;
end
else
if(CLOCK_IN)
TEMP<=TEMP+1;
end
//将二进制表示(或十六进制表示)的数转换为BCD码的形式,便于数码管译码显示
always(binaryorRESET)
begin
bin=binary;
result=0;
if(RESET)
bcd<=0;
else
begin
repeat(B_SIZE-1)
begin
result[0]=bin[B_SIZE-1];
if(result[3:
0]>4)
result[3:
0]=result[3:
0]+4'd3;
if(result[7:
4]>4)
result[7:
4]=result[7:
4]+4'd3;
if(result[11:
8]>4)
result[11:
8]=result[11:
8]+4'd3;
if(result[15:
12]>4)
result[15:
12]=result[15:
12]+4'd3;
if(result[19:
16]>4)
result[19:
16]=result[19:
16]+4'd3;
result=result<<1;
bin=bin<<1;
end
result[0]=bin[B_SIZE-1];
bcd<=result;
end
end
assignCOUT=bcd[15:
0];
endmodule
(3)信号显示处理:
moduleFREQUENCY_DISPLY_BLOCK(DOUT,DCLK_IN,RESET,CDIN);
output[10:
0]DOUT;
input[15:
0]CDIN;
inputDCLK_IN;
inputRESET;
reg[10:
0]DOUT;
reg[3:
0]Temp1;
reg[1:
0];
always(posedgeDCLK_IN)//设置成动态扫描
begin
if(RESET)
cn<=0;
else
begin
cn<=cn+1;
case(cn)
2'b00:
beginDOUT[10:
7]<=4'b0001;Temp1<=CDIN[3:
0];end
2'b01:
beginDOUT[10:
7]<=4'b0010;Temp1<=CDIN[7:
4];end
2'b10:
beginDOUT[10:
7]<=4'b0100;Temp1<=CDIN[11:
8];end
2'b11:
beginDOUT[10:
7]<=4'b1000;Temp1<=CDIN[15:
12];end
endcase
end
end
always(Temp1)//译码显示
begin
case(Temp1)
4'b0000:
DOUT[6:
0]<=7'b0111111;//3fh=0
4'b0001:
DOUT[6:
0]<=7'b0000110;//06h=1
4'b0010:
DOUT[6:
0]<=7'b1010110;//56h=2
4'b0011:
DOUT[6:
0]<=7'b1001111;//4fh=3
4'b0100:
DOUT[6:
0]<=7'b1100110;//66h=4
4'b0101:
DOUT[6:
0]<=7'b1101101;//6dh=5
4'b0110:
DOUT[6:
0]<=7'b1111101;//7dh=6
4'b0111:
DOUT[6:
0]<=7'b0000111;//07h=7
4'b1000:
DOUT[6:
0]<=7'b1111111;//7fh=8
4'b1001:
DOUT[6:
0]<=7'b1101111;//6fh=9
default:
DOUT[6:
0]<=7'b0111111;//3fh
endcase
end
endmodule
顶层verilog程序:
moduleFREQUENCY_COUNTER_DISPLY_BLOCK(DOUT,FLOW_UP,CLK,TEST_CLK_IN,RESET);
output[10:
0]DOUT;
outputFLOW_UP;
inputCLK;
inputTEST_CLK_IN;
inputRESET;
wiregated_clk,load,counter_clr;
wire[15:
0]cout_cdin;
FREQUENCY_COUNTROL_BLOCKu1(.GATED_CLK(gated_clk),.LOAD(load),.COUNTER_CLR(counter_clr),.CLK_IN(CLK),.SIGNAL_TEST(TEST_CLK_IN),.RESET(RESET));
FREQUENCY_COUNTER_BLOCKu2(.COUT(cout_cdin),.FLOW_UP(FLOW_UP),.CLOCK_IN(gated_clk),.RESET(RESET),.LOAD(load),.COUNTER_CLR(counter_clr));
FREQUENCY_DISPLY_BLOCKu3(.DOUT(DOUT),.DCLK_IN(CLK),.RESET(RESET),.CDIN(cout_cdin));
endmodule
五、仿真结果分析
仿真结果如图所示,输入标准时钟频率为1MHz,经过分频后变成频率为0.5Hz的信号,将其与测试信号相与得到采样信号GATED_CLK,同时利用测试信号和0.5Hz的分频信号可以产生LOAD信号和COUNTER_CLR信号,它们和采样信号的关系在图上可以清楚的看出。
图中测试信号频率为2500Hz,16进制表示为09C4。
Dout信号为要输入4个共阴数码管的信号,其高四位为片选控制,低七位为经译码后输入到数码管的信号。
以下为综合后的顶层电路和各子电路图:
(a)顶层模块综合后的电路
(b)FREQUENCY_COUNTROL_BLOCK模块综合后的电路
(c)FREQUENCY_COUNTER_BLOCK模块综合后的电路
(d)FREQUENCY_DISPLY_BLOCK模块综合后的电路
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用verilog HDL设计地4位频率计 verilog HDL 设计 频率计