时序逻辑之计数电路.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:8 大小:88KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

时序逻辑之计数电路.doc

时序逻辑之计数电路.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

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

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

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

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

时序逻辑之计数器或分频器I数控分频器思路分频器就是计数器,区别就在于前者是数控的,因此只要把计数器改变下就行。给计数器增加一个8位预置端,然后把具体进制计数器中的计数上限改成预置端的值即可。也就是如下代码:if(CNT=D)thenCNT:="00000000";cout<='1';elseCNT:=CNT+1;cout<='0';endif;2程序代码A我的程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycounterisport(clk:instd_logic;D:instd_logic_vector(7downto0);fout:outstd_logic);endcounter;architecturebehaveofcounterissignalcout:std_logic;beginprocess(clk)variableCNT:std_logic_vector(7downto0);beginif(clk'eventandclk='1')thenif(CNT=D)thenCNT:="00000000";cout<='1';elseCNT:=CNT+1;cout<='0';endif;endif;endprocess;fout<=cout;endbehave;B.书上的程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydvfisport(clk:instd_logic;D:instd_logic_vector(7downto0);fout:outstd_logic);enddvf;architecturearcofdvfissignalfull:std_logic;beginp_reg:process(clk)variablecnt8:std_logic_vector(7downto0);beginifclk'eventandclk='1'thenifcnt8="11111111"thencnt8:=D;full<='1';elsecnt8:=cnt8+1;full<='0';endif;endif;endprocessp_reg;p_div:process(full)variablecnt2:std_logic;beginiffull'eventandfull='1'thencnt2:=notcnt2;ifcnt2='1'thenfout<='1';elsefout<='0';endif;endif;endprocessp_div;end;3.效果与现象实验现象用蜂鸣器验证。当在输入端预置不同的数时,蜂鸣器发出不同的音调。可以想见,只要输入适当的频率,完全可以利用FPGA实现一个简易的电子钢琴。II按键+计数器1.思路通过按键控制计数器进制的切换,大体思路与数控分频器的实现是一样的,只是加了一个按键。在程序结构组织上想到了两种方法。一个是采用多进程。共有3个进程,分别是按键进程,加法计数进程,译码进程。另一个是采用元件例化的方法。分别例化按键,计数器,译码器三个元件,简洁明了。2.程序代码A.多进程libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycntisport(clk:instd_logic;key:instd_logic;SM:outstd_logic_vector(7downto0);cout:outstd_logic);endcnt;architecturebehaveofcntissignalsystem:integerrange9downto0;signalcqi:std_logic_vector(3downto0);signalp:std_logic_vector(24downto0);beginprocess(key)--按键进程variableflag:std_logic:='0';beginifkey'eventandkey='0'thenflag:=notflag;endif;ifflag='1'thensystem<=8;elsesystem<=5;endif;endprocess;process(clk,system)--计数进程beg