首页 > 编程知识 正文

20进制计数器VHDL程序,减法计数器判断

时间:2023-05-04 18:57:23 阅读:43041 作者:565

本文采用VHDL语言设计了十进制减法计数器,附带清零和置数功能。 项目分为分频器、计数器、数码管三部分,采用部件实例化方式,自上而下设计。

目录一,代码1.1顶级文件1.2分频器1.3计数器1.4数字代码2,仿真一,代码1.1顶级文件

顶级文件实例化三个模块零件并映射零件。

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entityCNT10isport(clk,RST,EN: in std_logic; 数据_ hex : out STD _ logic _ vector (7down to0); dout : out STD _ logic _ vector (3down to0); COUT : OUT std_logic; dint : instd _ logic _ vector (3down to 0; DCON : in std_logic; Dtest : out std_logic; dest more : out STD _ logic _ vector (3down to0); end CNT10; architecturebehavofcnt 10 iscomponentdigitalisport (data : instd _ logic _ vector )3downto0); show : out STD _ logic _ vector (7下传至0 ); com : out STD _ logic _ vector (3down to0); 最终组件数字; 组件计数器1 isport (clk : instd _ logic; en : IN std_logic; out1 : out std_logic; 结束组件计数器1; 组件计数10 isport (signal clk,rst,en : in std_logic; signal DCON : in std_logic; signal dint : instd _ logic _ vector (3down to0); signalq : inout STD _ logic _ vector (3down to0); 结束组件计数10; signal clk1 : std_logic; signal data _ sum 3360 STD _ logic _ vector (7下传至0; signal data _ get : STD _ logic _ vector (3down to 0; signal CQ 10: STD _ logic _ vector (3down to0) :=(others='0' ); begin part 1: counter1portmap (clk=clk,en=EN,out1=clk1); part 23360 count 10 portmap (clk=clk 1,rst=RST,en=EN,DCON=DCON,DINT=DINT,q=cq10 ); part :数字端口(data=data _ get,show=data_sum,com=DOUT ); Dtest=clk1; DtestMORE=cq10; data_hex=data_sum; data_get=cq10; 最终贝赫视听; 1.2分频器用于对与clk时钟信号放大对应的倍数进行分频。 否则,时钟频率过高,看不到计数值的减少效果。 out1是分频后的clk信号。

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_unsigned.all; 实体计数器1 isport (clk : instd _ logic; en : in std_logic; out1 : out std_logic; 结束计数器1; architecturebehavioralofcounter1issignalcp : STD _ logic _ vector (25下传至0 ) :=(others='0' ); signal clk 1: STD _ logic :='0'; beginprocess(clk ) begini fclk ' eventandclk='1' thenif en='1' thenif CP=' 101110110010000 ' then CP=' 0000 ) elsecp=cp 1; 结束If; out1=clk1; 结束If; 结束If; 结束流程; 最终贝赫视听; 1.3计数器从9到0实现倒计时,每秒倒计时一次。 rst为3358www.Sina.com/,DCON为清零端,位数数据为DINT。

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.std_Logic_unsigned.all; 实体计数10 isport (signal clk,rst,en : in std_logic; signal DCON : in std_logic; signal dint : instd _ logic _ vector (3down to0); signalq : out STD _ logic _ vector (3down to0); 结束计数10; architecturebehavioralofcount 10 issignalcq 10: STD _ logic _ vector (3down to0) :=(others='0' ); beginprocess(clk,rst,en ) beginif rst='1' then --清零cq10='0000 '; elsif clk ' eventandclk='1' thenif en='1' thenif dcon='1' then--位数cq10=DINT; elsif cq10='0000' thencq10='1001 '; else cq10=cq10 - '1'; 结束If; 结束If; 结束If; 结束流程; q=cq10; 最终贝赫视听; 1.4数码管将计数器输出的值转换为置数端后输出。

library IEEE; use IEEE.STD_LOGIC_1164.ALL; entitydigitalisport (数据: instd _ logic _ vector )3downto0; show : out STD _ logic _ vector (7下传至0 ); com : out STD _ logic _ vector (3down to0); 最终数字; architecturebehavioralofdigitalisbegincom=' 1110 '; ---两个数码管中最低的process(data ) begincasedataiswhen ' 0000 '=show=' 11000000 '; WHEN '0001'=show='11111001 '; WHEN '0010'=show='10100100 '; WHEN '0011'=show='10110000 '; WHEN '0100'=show='10011001 '; WHEN '0101'=show='10010010 '; WHEN '0110'=show='10000010 '; WHEN '0111'=show='11111000 '; WHEN '1000'=show='10000000 '; WHEN '1001'=show='10010000 '; when others=show='11111111 '; 结束案例; 结束流程; 最终贝赫视听; 二、模拟生成数码管的段码文件,代码中begin后加使能en=‘1’; 代码。 (模拟时需要使用分频器、计数器VHDL Test Bench。 如果不使用,模拟中没有数据。 当然,下载到设备上时不需要初始值。 因为板子的高低水平有初始值,模拟需要人为设定。 )

ps :请在模拟时修改分频器cp的值。 否则无法模拟。

根据模拟波形可知,从9到0计数并循环。 模拟时的分频器设置为赋初值,从2倍频参数可以看出,dtest参数的值是分频器的输出(dtestmore和data

最后,如果需要dtest,请下载。 FPGA-VHDL实现十进制减法计数器。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。