VHDL_六十进制计数器
EDA-六十进制计数器的VHDL设计概要
THEN
3.1.3 VHDL的数据类型
1. BIT:位数据类型,只有两个取值:‘0’和‘1’。 2. BIT_VECTOR( ): 位矢量数据类型。 3. STD_LOGIC:标准逻辑位数据类型。有9种不同的取值: 4. STD_LOGIC_VECTOR():标准逻辑位矢量数据类型。
STD_LOGIC所定义的9种数据的含义是:
数据类型时,需要使用库和程序包,具体格式如下所示:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
3.2 VHDL的完整结构
图2-2 D触发器
D触发器的功能:在时钟信号上升沿到来的时候,输 出跟随输入变化,否则,输出保持不变。
3.2.1 时钟上升沿检测表式
时钟上升沿的检测有两种表达方式:
1. CLK’EVENT AND CLK = ‘1’
2. RISING_EDGE(CLK)
3.2.2 D触发器的VHDL设计
库与程序包声明 标准逻辑位
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ; 库 ENTITY DFF1 IS 程序包 PORT (CLK : IN STD_LOGIC ; 实体 D : IN STD_LOGIC ; Q : OUT STD_LOGIC );
END DFF1;
3.3 六十进制计数器的VHDL设计
六十进制BCD码计数器的源程序:
实体名
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt60 IS PORT (clk, clr: IN STD_LOGIC; ten, one: DOWNTO 0 ); OUT STD_LOGIC_VECTOR(3
vhdl 十进制表示数值
vhdl 十进制表示数值摘要:1.VHDL 简介2.VHDL 中十进制表示数值的方法3.实例:使用VHDL 编写一个十进制计数器4.总结正文:【1.VHDL 简介】VHDL(VHSIC 硬件描述语言)是一种硬件描述语言,主要用于描述数字电路和模拟混合信号电路。
VHDL 能够描述复杂的数字系统,并能够生成相应的硬件电路,因此广泛应用于数字电路设计和验证。
【2.VHDL 中十进制表示数值的方法】在VHDL 中,十进制表示数值的方法主要有两种:一位数表示法和多位数表示法。
一位数表示法:使用一个位(bit)来表示0-9 中的一个数字,如果需要表示十进制数,就需要使用10 个位。
例如,要表示十进制数123,就需要使用3 个位,分别表示1、2 和3。
多位数表示法:使用一个整数(integer)来表示0-9999 中的一个数字,如果需要表示更大的十进制数,可以使用更大的整数。
例如,要表示十进制数12345,就需要使用一个16 位的整数。
【3.实例:使用VHDL 编写一个十进制计数器】下面是一个使用VHDL 编写的十进制计数器的示例代码:```vhdllibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter isPort ( clk : in STD_LOGIC;reset : in STD_LOGIC;enable : in STD_LOGIC;count_out : out STD_LOGIC_VECTOR (3 downto 0)); end counter;architecture Behavioral of counter isbeginprocess (clk, reset)beginif reset = "1" thencount_out <= (others => "0");elsif rising_edge(clk) thenif enable = "1" thenif count_out = "1001" thencount_out <= (others => "0");elsecount_out <= count_out + 1;end if;end if;end if;end process;end Behavioral;```在这个示例中,我们定义了一个名为“counter”的实体,它有4 个端口:clk(时钟信号)、reset(复位信号)、enable(使能信号)和count_out (计数值输出)。
VHDL语言编程
cq:out std_logic_vector(7 downto 0);
cout:out std_logic);
end cnt60;
architecture behav of cnt60 is
begin
process(clk,rst,en)
BEGIN
sel<=b & a;
q<= i0 WHEN sel="00" ELSE
i1 WHEN sel="01" ELSE
i2 WHEN sel="10" ELSE
i3 WHEN sel="11" ;
begin
y<=a nand b;
end nand2pp;
2输入或非门
LIBRARY ieee;
use ieee.std_logic_1164.all;
entity nor2 is
port(a,b: in std_logic;
y: out std_logic);
entity xor2 is
port(a,b: in std_logic;
y: out std_logic);
end xor2;
architecture xor_behave of xor2 is
begin
y<=a xor b;
end xor_behave;
end if;
end process;
end architecture ex;
六十进制计数器源程序
library ieee;
60进制计数器VHDL实验报告
(2) VHDL 语言具有强大的硬件描述能力 VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路 , 也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或 者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯 性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强 大描述能力还体现在它具有丰富的数据类型。VHDL 语言既支持标准定义的 数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的 自由度。 (3) VHDL 语言具有很强的移植能力 VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器 移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执 行。 (4) VHDL 语言的设计描述与器件无关 采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进 行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的 优化, 而不需要考虑其他的问题。当硬件电路的设计描述完成以后 ,VHDL 语言允许采用多种不同的器件结构来实现。
用VHDL编写60进制计数器
用VHDL编写60进制计数器1.用VHDL设计60进计数器。
设计一个BCD码60进计数器。
要求实现同步,异步两种情况,且规定个位显示0~9,十位显示0~5,均用4位二进制数表示。
用VHDL语言描述中小规模集成电路74LS169。
VHDL的源程序如下:(1):同步,文件名为bcd60countLIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bcd60count isport(clk,bcd1wr,bcd10wr,cin: in std_logic;co: out std_logic;datain: in std_logic_vector(3 downto 0);bcd1p: out std_logic_vector(3 downto 0);bcd10p: out std_logic_vector(2 downto 0));end bcd60count;architecture behave of bcd60count issignal bcd1n: std_logic_vector(3 downto 0);signal bcd10n: std_logic_vector(2 downto 0);beginbcd1p<=bcd1n;bcd10p<=bcd10n;kk1: process(clk,bcd1wr)beginif (bcd1wr='1') thenbcd1n<=datain;elsif(clk'event and clk='1') thenif (cin='1') thenif(bcd1n="1001" ) thenbcd1n<="0000";elsebcd1n<=bcd1n+'1';end if;end if;end if;end process kk1;kk2: process(clk,bcd10wr)beginif (bcd10wr='1') thenbcd10n<=datain(2 downto 0);elsif(clk'event and clk='1') thenif(cin='1') and (bcd1n="1001") thenif(bcd10n="101") thenbcd10n<="000";elsebcd10n<=bcd10n+'1';end if;end if;end if;end process kk2;kk3: process(bcd10n,bcd1n,cin)beginif(cin='1' and bcd1n="1001" and bcd10n="101") then co<='1';elseco<='0';end if;end process kk3;end behave;(2)异步程序如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cou60 isport(clk,reset,cin : in std_logic;co : out std_logic;bcd1p : out std_logic_vector(3 downto 0);bcd10p : out std_logic_vector(2 downto 0)); end cou60; architecture behave of cou60 issignal bcd1n: std_logic_vector(3 downto 0);signal bcd10n: std_logic_vector(2 downto 0);beginbcd1p<=bcd1n;bcd10p<=bcd10n;kk1: process(clk)beginif(clk'event and clk='1') thenif (reset='0') thenbcd1n<="0000";elsif (cin='1') thenif(bcd1n="1001" ) thenbcd1n<="0000";elsebcd1n<=bcd1n+'1';end if;end if;end if;end process kk1;kk2: process(clk)beginif(clk'event and clk='1') thenif (reset='0') thenbcd10n<="101";elsif(cin='1') and (bcd1n="1001") thenif(bcd10n="001") thenbcd10n<="101";elsebcd10n<=bcd10n+'1';end if;end if;end if;end process kk2;kk3: process(bcd10n,bcd1n,cin)beginif(cin='1' and bcd1n="1001" and bcd10n="001") then co<='1';elseco<='0';end if;end process kk3;end behave;。
vhdl实验报告
专用集成电路实验报告13050Z011305024237X德文实验一开发平台软件安装与认知实验实验内容1、本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。
下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。
2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE 9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。
源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-- Unment the following lines to use the declarations that are-- provided for instantiating Xilinx primitive ponents.--library UNISIM;--use UNISIM.Vponents.all;entity ls74138 isPort ( g1 : in std_logic;g2 : in std_logic;inp : in std_logic_vector(2 downto 0);y : out std_logic_vector(7 downto 0));end ls74138;architecture Behavioral of ls74138 isbeginprocess(g1,g2,inp)beginif((g1 and g2)='1') thencase inp iswhen "000"=>y<="00000001";when "001"=>y<="00000010";when "010"=>y<="00000100";when "011"=>y<="00001000";when "100"=>y<="00010000";when "101"=>y<="00100000";when "110"=>y<="01000000";when "111"=>y<="10000000";when others=>y<="00000000";end case;elsey<="00000000";end if;end process;end Behavioral;波形文件:生成元器件及连接电路思考:有程序可以看出,定义了三个输入端,一个输出端。
VHDL双向十进制加减法计数器(代码和截图)
);
end entity;
architecture rtl of vh is
SIGNAL temp:std_logic_vector(3 downto 0);
begin
process (clk)
begin
if(we='1')then
temp<=d;
elsif(clk'event and clk='1')then
if(dir='0')then
if(temp<9)then
temp<=temp+'1';
co<=ห้องสมุดไป่ตู้0';
else
temp<="0000";
co<='1';
end if;
elsif(dir='1')then
if(temp>0)then
temp<=temp-'1';
co<='0';
else
temp<="1001";
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
entity vh is
port
(
clk: in std_logic;
dir: in std_logic;
we: in std_logic;
d : in std_logic_vector(3 downto 0);
co<='1';
VHDL60进制计数器实验
《EDA技术》课程实验报告学生姓名:所在班级:电信1001指导教师:记分及评价:项目满分5分得分一、实验名称60进制计数器设计二、任务及要求【基本部分】4分1、在QuartusII平台上,采用文本输入设计方法,通过编写VHDL语言程序,完成60进制计数器的设计并进行时序仿真。
2、设计完成后生成一个元件,以供更高层次的设计调用。
3、实验箱上选择恰当的模式进行验证,目标芯片为ACEX1K系列EP1K30TC144-3。
【发挥部分】1分在60进制基础上设计6进制计数器,完成时序仿真。
三、实验程序Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;Entity j602 Isport (clk:in std_logic;ent:in std_logic;rst:in std_logic;y0: out std_logic_vector(3 downto 0);y1: out std_logic_vector(3 downto 0);cout: out std_logic);End j602;Architecture j602 of j602 issignal cnt0 :std_logic_vector(3 downto 0);signal cnt1 :std_logic_vector(3 downto 0);Begincout<='1' when (cnt1="0101" and cnt0="1001" and ent = '1') else '0';process(clk,rst)BeginIf rst ='0' Thencnt0<="0000";cnt1<="0000";elsif clk'event and clk='1' Thenif ent = '1' Thenif cnt0="1001" Thencnt0<="0000";if cnt1="0101" Thencnt1<="0000";elsecnt1<=cnt1+1;end if;elsecnt0<=cnt0+1;end if;end if;end if;end process;y0<=cnt0;y1<=cnt1;end j602;四、仿真及结果分析五、硬件验证1、选择模式:模式5六、小结通过这次实验,使我明白了用VHDL语言编程和用设计原理图实现同样功能器件的区别,从而加深的对EDA的理解。
六十进制计数器设计(EDA)
六进制vhdl语言设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt6 ISPORT(CLK,CLRN,ENA,LDN:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END cnt6;ARCHITECTURE ONE OF cnt6 ISSIGNAL CI:STD_LOGIC_VECTOR (3 DOWNTO 0):="0000"; BEGINPROCESS (CLK,CLRN,ENA,LDN,CI)BEGINIF CLRN='0' THEN CI<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF LDN='0' THEN CI<=D;ELSIF ENA='1' THENIF CI<5 THEN CI<=CI+1;ELSE CI<="0000";END IF;END IF;END IF;Q<=CI;END PROCESS;COUT<=CI(0) AND CI(2);END ONE;十进制vhdl语言设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT(CLK,CLRN,ENA,LDN:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END cnt10;ARCHITECTURE ONE OF cnt10 ISSIGNAL CI:STD_LOGIC_VECTOR (3 DOWNTO 0):="0000"; BEGINPROCESS (CLK,CLRN,ENA,LDN,CI)BEGINIF CLRN='0' THEN CI<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF LDN='0' THEN CI<=D;ELSIF ENA='1' THENIF CI<9 THEN CI<=CI+1;ELSE CI<="0000";END IF;END IF;END IF;Q<=CI;END PROCESS;COUT<=CI(0) AND CI(3);END ONE;分别把上面程序生成符号文件画如下原理图:波形仿真图如下:。
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告VHDL实验报告班级:电子学号:姓名:2014/5/23Experiment 1 两位二进制数的大小比较器一、实验目的:(1)熟悉QuartusII的开发环境、熟练掌握编程开发流程。
(2)学习VHDL的基本语法及编程设计。
二、实验内容:数值比较器设计三、实验要求:(1)熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程;2)设计输入使用插入语言模板(Insert Template); ((3)在QuartusII开发环境下对设计程序进行时序仿真,将生成的配置文件下载到实验板,进行最终的实物测试验证。
四、实验原理:根据两位二进制数的大小得到对应的比较结果,其电路示意图及电路特性表为: 比较器特性表A B In_s In_l In_e 比较器电路示意图YsYe YlY A > B × × × 0 0 1A[3:0] Yl Number B[3:0] A < B × × × 1 0 0 Ye A = B 0 1 0 0 0 1 In_sYs Comparer In_l A = B 1 0 0 1 0 0 In_e A = B 0 0 1 0 1 0 A = B 0 0 0 × × × A = B × 1 1 × × × A = B 1 × 1 × × × A = B 1 1 × × × ×五、程序编写、调试及仿真(芯片型号:MAX?系列EPM1270T144C5) (1)程序编写:library ieee;use ieee.std_logic_1164.all;2entity Vhdl1 isport(a,b:in std_logic_vector(3 downto 0);ins,inl,ine: in std_logic;ys,ye,yl: out std_logic);end Vhdl1;architecture one of Vhdl1 issignal temps,tempe:std_logic; beginys<=temps;ye<=tempe;yl<=temps nor tempe;process(a,b,ine)beginif (a=b and ine='1')thentempe<='1';elsetempe<='0';end if;end process;process(a,b,ins)beginif(a<b) thentemps<='1';elsif(a=b and ins='1') then temps<='1';elsetemps<='0';end if;end process;end one;(2)功能仿真:3(3)芯片引脚设定:(4)适配下载结果六、结果分析本实验实现了两位二进制数的比较。
第5章 计数器VHDL描述
调整进制
PROCESS (clr,clk) BEGIN IF(clr=‗1‘) THEN Count_B<=―00000000‖; q <= ‗0‘; ELSIF (clk'EVENT AND clk = ‗1‘ ) THEN IF (Count_B = ―00001111‖) THEN Count_B<=―00000000‖; else Count_B<=count_B + 1;
END IF; END IF; END PROCESS;
一、基本计数器的设计
计数器是数字系统的一种基本部件,是典 型的时序电路。计数器的应用十分广泛, 常用于数/模转换、 计时、频率测量等。
加法计数器VHDL源程序:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countbasic IS PORT(clk:IN STD_LOGIC; q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0)); END countbasic; ARCHITECTURE a OF counbasict IS BEGIN
同步复位
PROCESS (clock) BEGIN if clock =‗1‘ and clock‘EVENT then if reset = ‗1‘ then sout <= ‗0‘; tmp <= ‗0‘; else sin sout <= sin; tmp tmp <= not tmp; clock reset end if; END IF; END PROCESS;
简单时序电路的VHDL描述
60计数器工作原理
60计数器工作原理
60计数器是一种数字电路元件,用于实现60进制的计数功能。
其工作原理如下:
1. 输入信号:60计数器通常有一个时钟输入信号。
当时钟信
号的一个脉冲到达时,计数器会按照特定的规则进行计数。
2. 初始化:计数器在初始状态下一般为0,即所有计数位上都
为0。
3. 计数规则:60计数器通常由多个计数位组成,每个计数位
都有两种状态:0和1。
当计数器接收到一个时钟脉冲时,它
会根据特定的规则将计数位递增,并将进位(carry out)信号
传递到高位。
4. 进位规则:在60计数器中,当最低位计数位达到其最大值(59时),它会产生一个进位信号。
这个进位信号会传递给
高位计数位,引起它们进行递增。
5. 循环:当最高位计数位达到其最大值时(59时),它也会
产生一个进位信号。
这个进位信号又会传递到最低位计数位,从而形成一个循环。
整个计数器会在0到59之间循环计数。
6. 外部控制:60计数器通常还有一些控制信号,如使能信号
和复位信号。
使能信号可以控制计数器的启用与禁用,而复位信号可以将计数器的状态重置为初始状态。
通过上述工作原理,60计数器可以实现60进制的计数功能,用于计时、频率分频、时钟同步等应用。
十进制计数器VHDL
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT10 isport(CLK,RST,EN:in std_logic;CQ:out std_logic_vector(3 downto 0);a,b,c,d,e,f,g:out std_logic;COUT:out std_logic);end;architecture behave of CNT10 isSIGNAL SEGOUT:STD_LOGIC_VECTOR(0 TO 6);SIGNAL dout:STD_LOGIC_VECTOR(0 TO 6); beginprocess(CLK,RST,EN)variable CQI:std_logic_vector(3 downto 0);beginif RST='1' then CQI:=(others=>'0');elsif CLK'event and CLK='1' thenif EN='1' thenif CQI<"1001" then CQI:=CQI+1;else CQI:=(others=>'0');end if;end if;end if;if CQI="1001" then COUT<='1';else COUT<='0';end if;CASE CQI ISWHEN"0000"=>SEGOUT<="1111110";WHEN"0001"=>SEGOUT<="0110000";WHEN"0010"=>SEGOUT<="1101101";WHEN"0011"=>SEGOUT<="1111001";WHEN"0100"=>SEGOUT<="0110011";WHEN"0101"=>SEGOUT<="1011011";WHEN"0110"=>SEGOUT<="1011111";WHEN"0111"=>SEGOUT<="1110000";WHEN"1000"=>SEGOUT<="1111111";WHEN"1001"=>SEGOUT<="1111011";WHEN OTHERS=>SEGOUT<="0000000";END CASE;a<=dout(0);b<=dout(1;c<=dout(2);d<=dout(3);e<=dout(4);f<=dout(5);g<=dout(6;end process; end;。
项目5 触发器设计
项目五分钟计数器设计
班级:09电信姓名:曾珍学号:33
1.实训目标
1)通过分钟计数器的设计,掌握触发器、计数器的设计方法。
2)分别使用原理图和文字编辑的方法实现分钟计数器的设计,并通过电路的仿真来检
验设计结果。
2.实训步骤
1)功能描述:六十进制计数器常用于时钟计数。
六十进制计数器,当个位技术到9(二
进制为1001)10位进一,当10位计数到5(二进制为0101)清零重新计数,这就完成了六十进制计数器功能。
2)采用文本编辑法,即利用VHDL语言描述六十进制计数器,二十四进制计数器参考
代码如下。
然后对其进行编译,编程器件型号选择ACE1k 系列的EP1K30TC144-3,完成程序仿真,记录仿真数据。
3) 采用原理图输入,利用两片74160芯片(BCD 码同步加法计数器),设计六十进
制计数器。
分别调用库元件74160、GND 、NAND3、INPUT 、OUTPUT 。
如图5-1所示。
图
5-1
3. 实训数据
1) 用VHDL 设计编写分钟计数器,写出程序代码。
简述仿真波形的意义。
2)对文本编辑法设计的分钟计数器进行仿真。
记录仿真波形。
3)记录用原理图输入实现的分钟计数器的仿真波形。
简述仿真波形的意义。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六十进制计数器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count60 is
port(clk,clk0,cin,bcd1wr,bcdswr:in std_logic;
datain:in std_logic_vector(3 downto 0);
co:out std_logic;
a,b,c,d,e,f,g: out std_logic;
sel:out std_logic_vector(2 to 0));
end count60;
architecture art of count60 is
signal bcd1n:std_logic_vector(3 downto 0);
signal bcdsn:std_logic_vector(2 downto 0);
signal outda:std_logic_vector(6 downto 0);
begin
process(clk,bcd1wr)
begin
if(bcd1wr='1') then
bcd1n<=datain;
elsif(clk'event and clk='1') then
if(cin='1') then
if(bcd1n=9) then
bcd1n<="0000";
else
bcd1n<=bcd1n+1;
end if;
end if;
end if;
end process;
process(clk,bcdswr)
begin
if(bcdswr='1') then
bcdsn<=datain(2 downto 0);
elsif(clk'event and clk='1') then
if(cin='1' and bcd1n=9) then
if(bcdsn=5) then
bcdsn<="000";
else bcdsn<=bcdsn+1;
end if;
end if;
end if;
end process;
process(bcd1n,bcdsn,cin)
begin
if(bcd1n=9 and bcdsn=5 and cin='1') then
co<='1';
else
co<='0';
end if;
end process;
process(clk0,bcd1n,bcdsn)
begin
if clk0='1' then sel<="000";
case bcd1n is
when "0000"=>outda<="1111110";
when "0001"=>outda<="0110000";
when "0010"=>outda<="1101101";
when "0011"=>outda<="1111001";
when "0100"=>outda<="0110011";
when "0101"=>outda<="1011011";
when "0110"=>outda<="1011111";
when "0111"=>outda<="1110000";
when "1000"=>outda<="1111111";
when "1001"=>outda<="1111011";
when others=>outda<="0000000";
end case;
else sel<="110";
case bcdsn is
when "000"=>outda<="1111110";
when "001"=>outda<="0110000";
when "010"=>outda<="1101101";
when "011"=>outda<="1111001";
when "100"=>outda<="0110011";
when "101"=>outda<="1011011";
when others=>outda<="0000000";
end case;
end if;
a<=outda(6);
b<=outda(5);
c<=outda(4);
d<=outda(3);
e<=outda(2);
f<=outda(1);
g<=outda(0); end process;
end art;。