脉冲发生器.docx
《脉冲发生器.docx》由会员分享,可在线阅读,更多相关《脉冲发生器.docx(17页珍藏版)》请在冰点文库上搜索。
![脉冲发生器.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/361c4476-dae7-4477-a414-7c08cc4f01df/361c4476-dae7-4477-a414-7c08cc4f01df1.gif)
脉冲发生器
黑龙江科技学院
课程设计任务书
一、设计题目:
二、设计的主要内容:
指导教师:
日期:
教师评语:
评阅成绩:
评阅人:
日期:
黑龙江科技学院
课程设计任务书
一、设计题目:
脉冲发生器
二、设计的主要内容:
此系统正常工作时,脉冲发生器提供的1HZ的输入信号,信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码显示管上可以显示的十进制结果。
在数码管上可以看到计数结果。
指导教师:
于海英
日期:
教师评语:
评阅成绩:
评阅人:
日期:
摘要
本设计是设计一个脉冲发生器提供的1Hz的输入信号,信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码管上可以显示的十进制结果。
在数码显示管上可以看到计数结果。
设计中一共分为3大模块:
产生子模块、计数模块、显示模块。
关键词:
脉冲计数显示
第1章设计思想
此系统正常工作时,脉冲发生器提供的1Hz的输入信号,信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码管上可以显示的十进制结果。
在数码显示管上可以看到计数结果。
设计中一共分为3大模块:
分频模块、计数模块、显示模块。
分频模块是脉冲发生器产生1Hz的时钟脉冲信号,为了实现严格的同步,在这个模块中采用了同步计数电路。
计数模块是实现从0到99的计数。
显示模块是将计数模块程序中产生的数值通过2个七段数码管表达出来。
第2章系统设计
2.1分频模块
分频模块的功能是将输入的外部信号clk进行分频,分频成计数器所需要的计数信号,使计数器在计数信号有效的时间对外部信号进行计数。
根据频率计测量的范围,确定了分频至1Hz,从而得到频率值。
555定时器(如图2)是一种模拟电路与数字电路相结合的中规模集成电路,它在信号产生、整形、延时(定时)、控制等方面获得了广泛的应用。
虽说555定时器应用领域十分广泛,但其电路结构归纳起来有三种基本形式,即多谐振荡器、单稳态触发器、施密特触发器
由于双极型555和CMOS型555的制作工艺和流程不同,生产出的555集成电路的性能指标是有差异的。
CMOS型555的功耗仅为双极型的几十分之一,静态电流仅为300uA左右,为微功耗电路。
CMOS型555的输出脉冲的上升沿和下降沿比双极型的要陡,转换时间短。
CMOS型555的在传输过度时间里产生的尖峰电流小,仅为2--3mA,而双极型555的尖峰电流高达300--400mA。
2.2.计数模块
经分析可知,本设计计数模块分为2个子模块,即个位显示模块、十位显示模块。
详细分析如下:
①计数模块的个位可以用1个十进制计数器表示。
②计数模块的十位可以用1个十进制计数器表示。
计数模块主要来实现计数器内部的计数功能,计数器的内部计数信号clk和计数器的使能信号enable.计数模块的输出信号就是个位sec,十位sec10。
十进制计数器,它的输入端口主要包括使能端口enable计数输入端口clk,输出端口主要包括计数输出端口q和进位输出端口cout。
2.3显示模块
计数器要将计数的结果显示出来,就必需设计一个计数显示模块来完成该显示功能.显示模块的输入信号主要来自于频频计数器计数模块的计数信息,它的输出信号是choose和segment,以用来驱动计数显示的8个LED七段显示数码管,在输出信号中,为了节省资源,我们采用循环点亮LED七段显示数码管的方法来显示计数器的计数输出.我们通过信号choose(7downto0)来进行8个LED七段显示数码管的选择,,从而将输出信号segment(6downto0)送到相应的LED七段显示数码管上以完成计数的显示。
计数显示模块可由三个部分组成:
八进制计数器,计数位选择电路,七段显示译码电路。
下面描述一下计数显示模块的工作过程:
在外部计数信号clk的作用下,八进制计数器的输出从000到111按顺序循环变化,输出信号为sel.信号sel作为计数位选择电路的选择信号,用来选择对应位的数据并将其转换为四位位矢量.最后将计数位选择电路的输出信号q送到七段显示译码电路的输入端口,将其转化成用来点燃LED七段显示数码管的segment信号。
2.3.1七段数码管的描述
我们所使用实验箱中的8个七段数码管有这样一个特点,8个数码管中每一个数码管中相同的段都是连在一根线上的。
2.3.2八进制计数器count8的描述
我们来描述下三个子电路,然后再描述显示模块的总体功能.先来讨论下八进制计数器count8,这个八进制计数器除了没有使能端enable和进位输出端口cout之外,它的描述结构与前面描述的计数器的结构完全相同。
2.3.3七段显示译码电路的描述
显示模块中数字位选的问题解决后就需要解决另外一个问题了,那就是如何将程序中的数字在数码管上有效显示出来,即如何让我们能一眼就看出来显示的数字是0,1,2,3,4,5,6,7,8,9这十个数字。
根据数码的结构特点,我们采用高低电平的方法点亮数码管对应的段即可。
2.3.4计数位选择电路的描述
计数位选择电路的功能示根据八进制计数器count8输出的选择信号sel来选择对应显示位的计数数据,作为送到七段显示译码电路的输入数据.由于计数选择电路的输出端口的计数数据的位数不等,而七段显示译码电路的输入端口接收四位宽度的数据。
2.3.5总体功能描述
对计数器的显示模块的四个子电路描述以后,我们就可以进行计数器的总体功能描述了.在计数器显示模块的VHDL描述中,我们引用元件的形式来调用上面描述过的四个子电路。
2.4顶层文件
以上就是整个设计的3个核心模块,当这3个模块设计完成后,脉冲发生器的设计就接近尾声了。
我们就想连模拟电路中元件一样,将这3个模块对应的端口连接起来进行调试即可。
整个设计我们都是用的VHDL硬件描述语言来完成的,所以到了最后也不例外,对于最后的级连同运用元件例化的格式来“组装”整个设计。
附录源程序
1.分频程序如下:
、
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclk_div1000IS
PORT(clk:
INSTD_LOGIC;
clk_div:
outSTD_LOGIC);
ENDclk_div1000;
ARCHITECTURErt1OFclk_div1000IS
SIGNALq_tmp:
integerrange0to999;
BEGIN
process(clk)
begin
IF(clk'eventandclk='1')then
if(q_tmp=999)then
q_tmp<=0;
else
q_tmp<=q_tmp+1;
endif;
endif;
endprocess;
process(clk)
begin
IF(clk'eventandclk='1')then
if(q_tmp=999)then
clk_div<='1';
else
clk_div<='0';
endif;
endif;
endprocess;
endrt1;
2.计数模块的程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcount10IS
PORT(
enable:
INSTD_LOGIC;
clk:
INSTD_LOGIC;
cout:
outSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcount10;
ARCHITECTURErt1OFcount10IS
SIGNALq_tmp:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
process(clk)
begin
IF(clk'eventandclk='1')then
if(enable='1')then
if(q_tmp="1001")then
q_tmp<="0000";
else
q_tmp<=q_tmp+1;
endif;
endif;
endif;
q<=q_tmp;
endprocess;
cout<='1'whenq_tmp="1001"andenable='1'else'0';
--cout<='1'whenq_tmp="1001"else'0';
endrt1;
3.频率计数器的计数功能,程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYtime_counterIS
PORT(
enable:
INSTD_LOGIC;
clk0:
INSTD_LOGIC;
sec10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
sec:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDtime_counter;
ARCHITECTURErt1OFtime_counterIS
COMPONENTcount10
PORT(
enable:
INSTD_LOGIC;
clk:
INSTD_LOGIC;
cout:
outSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
endCOMPONENT;
SIGNALco1,co2:
STD_LOGIC;
BEGIN
U1:
count10PORTMAP(enable,clk0,co1,sec);
U2:
count10PORTMAP(co1,clk0,co2,sec10);
endrt1;
4.8分频器模块设计程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcount8IS
PORT(
clk:
INSTD_LOGIC;
sel:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDcount8;
ARCHITECTURErt1OFcount8IS
SIGNALsel_tmp:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
process(clk)
begin
IF(clk'eventandclk='1')then
if(sel_tmp="111")then
sel_tmp<=(others=>'0');
else
sel_tmp<=sel_tmp+1;
endif;
endif;
sel<=sel_tmp;
endprocess;
endrt1;
5.七段数码管的选择模块程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYseg7IS
PORT(q:
INSTD_LOGIC_VECTOR(3DOWNTO0);
segment:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDseg7;
ARCHITECTURErt1OFseg7IS
BEGIN
PROCESS(q)
BEGIN
CASEqIS
WHEN"0000"=>segment<="0111111";
WHEN"0001"=>segment<="0000110";
WHEN"0010"=>segment<="1011011";
WHEN"0011"=>segment<="1001111";
WHEN"0100"=>segment<="1100110";
WHEN"0101"=>segment<="1101101";
WHEN"0110"=>segment<="1111101";
WHEN"0111"=>segment<="0100111";
WHEN"1000"=>segment<="1111111";
WHEN"1001"=>segment<="1101111";
WHENOTHERS=>segment<="XXXXXXX";
ENDCASE;
ENDPROCESS;
ENDrt1;
6.计数位选择电路的描述:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYtime_chooseIS
PORT(sel:
INSTD_LOGIC_VECTOR(2DOWNTO0);
sec10:
INSTD_LOGIC_VECTOR(3DOWNTO0);
sec:
INSTD_LOGIC_VECTOR(3DOWNTO0);
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDtime_choose;
ARCHITECTURErt1OFtime_chooseIS
BEGIN
PROCESS(sel,sec10,sec)
BEGIN
CASEselIS
WHEN"000"=>q<=sec;
WHEN"001"=>q<=sec10;
WHENOTHERS=>q<="XXXX";
ENDCASE;
ENDPROCESS;
ENDrt1;
LIBRARYIEEE;
--USEIEEE.STD_LOGIC_1164.ALL;
--ENTITYchoose_decoderIS
--PORT(sel:
INSTD_LOGIC_VECTOR(2DOWNTO0);
--choose:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
--ENDchoose_decoder;
--ARCHITECTURErt1OFchoose_decoderIS
--BEGIN
--PROCESS(sel)
--BEGIN
-CASEselIS
--WHEN"000"=>choose<="00000001";
--WHEN"001"=>choose<="00000010";
--WHEN"010"=>choose<="00000100";
--WHEN"011"=>choose<="00001000";
--WHEN"100"=>choose<="00010000";
--WHEN"101"=>choose<="00100000";
--WHEN"110"=>choose<="01000000";
--WHEN"111"=>choose<="10000000";
--WHENOTHERS=>choose<="XXXXXXXX";
--ENDCASE;
--ENDPROCESS;
--ENDrt1;
7.总体功能描述:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdisplayIS
PORT(
clk:
INSTD_LOGIC;
sec10:
INSTD_LOGIC_VECTOR(3DOWNTO0);
sec:
INSTD_LOGIC_VECTOR(3DOWNTO0);
sel:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);
--choose:
outSTD_LOGIC_VECTOR(7DOWNTO0);
segment:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDdisplay;
ARCHITECTURErt1OFdisplayIS
COMPONENTcount8
PORT(clk:
INSTD_LOGIC;
sel:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDCOMPONENT;
--COMPONENTchoose_decoder
--PORT(sel:
INSTD_LOGIC_VECTOR(2DOWNTO0);
--choose:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
--ENDCOMPONENT;
COMPONENTtime_choose
PORT(sel:
INSTD_LOGIC_VECTOR(2DOWNTO0);
sec10:
INSTD_LOGIC_VECTOR(3DOWNTO0);
sec:
INSTD_LOGIC_VECTOR(3DOWNTO0);
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTseg7
PORT(q:
INSTD_LOGIC_VECTOR(3DOWNTO0);
segment:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDCOMPONENT;
SIGNALsel_tmp:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALq:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALsegment_tmp:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
U0:
count8PORTMAP(clk,sel_tmp);sel<=sel_tmp;
U2:
time_choosePORTMAP(sel_tmp,sec10,sec,q);
U3:
seg7PORTMAP(q,segment_tmp);
segment<=segment_tmp;
ENDrt1;
8顶层文件:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclockIS
PORT(
clk:
INSTD_LOGIC;
enable:
INSTD_LOGIC;
sel:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);
segment:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDclock;
ARCHITECTURErt1OFclockIS
COMPONENTclk_div1000
PORT(clk:
INSTD_LOGIC;
clk_div:
outSTD_LOGIC);
endcomponent;
componenttime_counter
PORT(
enable:
INSTD_LOGIC;
clk0:
INSTD_LOGIC;
sec10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
sec:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
endcomponent;
componentdisplay
PORT(
clk:
INSTD_LOGIC;
sec10:
INSTD_LOGIC_VECTOR(3DOWNTO0);
sec:
INSTD_LOGIC_VECTOR(3DOWNTO0);
sel:
outSTD_LOGIC_VECTOR(2DOWNTO0);
segment:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
endcomponent;
signalsec10:
STD_LOGIC_VECTOR(3DOWNTO0);
signalsec:
STD_LOGIC_VECTOR(3DOWNTO0);
signalclk0:
STD_LOGIC;
begin
u0:
clk_div1000PORTMAP(clk,clk0);
u1:
time_counterPORTMAP(enable,clk0,sec10,sec);
u2:
displayPORTMAP(clk,sec10,sec,sel,segment);
endrt1;
第七章实验结果仿真图
计数模块
计数模块2
分频模块
8分频器模块
计数位选择电路
7段数码管显示
显示模块
结束语
此次设计论文的经历也会使我终身受益,因为它让我体会到做论文是要真真正正用心去做每一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。
希望这次的经历能让我在以后学习中激励我继续进步。
参考文献
1.齐洪喜.陆颖.<>.清华大学出版社。
2.欧阳星明.<<数字逻辑>>.华中科技大学出版社。
3.辛春艳.<>.国防工业出版社。
4.谭会生.瞿遂春.<>.西安电子科技大学出版社。