当前位置:文档之家› 常用逻辑电路的VHDL描述

常用逻辑电路的VHDL描述


时序逻辑电路的VHDL语言描述
时钟边沿的描述: 时钟信号的边沿分为上升言和下降沿;上升沿指时钟信号的值从“0”电平 变化到”1”电平的过程;对应的VHDL语言描述上升沿的程序语句: clk-=„1‟ and clk‟last_value=„0‟ and clk‟event 实际应用中用clk-=„1‟ and clk‟event来描述上升沿。 时钟下降沿指的是时钟信号的值从‘1‟电平变化到‘0‟电平的过程;用 VHDl语言描述clk-=„0‟ and clk‟event来描述下降沿 1、锁存器 它是时序逻辑电路中用来锁存数据的逻辑单元,它类似与触发器。分为: 电平锁存器、同步锁存器、异步锁存器 (1)电平锁存器: 单输入电平锁存器的VHDL描述
加法器
半加器电路的VHDL示例程序: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY half_adder IS PORT( dataA, dataB : IN STD_LOGIC ; sum : OUT STD_LOGIC ; carry : OUT STD_LOGIC ) ; END ENTITY half_adder ; ARCHITECTURE dataflow OF half_adder IS BEGIN sum <= dataA XOR dataB ; -- 和数满足逻辑异或关系 carry <= dataA AND dataB ; -- 进位位满足逻辑与关系 END ARCHITECTURE dataflow ;
ELSIF ( datain (7) = '0' ) THEN dataout <= "1000" ; ELSIF ( datain (6) = '0' ) THEN dataout <= "1001" ; ELSIF ( datain (5) = '0' ) THEN dataout <= "1010" ; ELSIF ( datain (4) = '0' ) THEN dataout <= "1011" ; ELSIF ( datain (3) = '0' ) THEN dataout <= "1100" ; ELSIF ( datain (2) = '0' ) THEN dataout <= "1101" ; ELSIF ( datain (1) = '0' ) THEN dataout <= "1110" ; ELSE dataout <= “1111” ; --取反就是I0 END IF ; END IF ; END PROCESS ; END ARCHITECTURE rtl ;
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY single_latch IS PORT ( reset : IN STD_LOGIC ; datain : IN STD_LOGIC ; lock : IN STD_LOGIC ; dataout : OUT STD_LOGIC ) ; END ENTITY single_latch ; ARCHITECTURE rtl OF single_latch IS BEGIN single_latch_inst : PROCESS ( reset, datain, lock ) BEGIN IF ( reset = '1' ) THEN -- 复位信号 dataout <= '0' ; ELSIF ( lock = '1' ) THEN -- 锁存信号 dataout <= datain ; END IF ; END PROCESS single_latch_inst ; END ARCHITECTURE rtl ; 单输入电平锁存器不存在时钟信号CLK,其复位信号RESET是最高优先级的信号。当 复位信号为高电平时,锁存器被立即复位,输出为‘0‟;当复位信号为低时,若锁存 器的锁存控制信号LOCK是高电平,则输出DATAIN,实现锁存功能,LOCK锁存信号 为低时,输出不变。 多输入电平锁存器VHDL的描述:
2、编码器和译码器 编码器可以对一组输入信号进行编码,不同的输入信号对应不同的码值,这样在电 路系统中就可以分辨出哪个是输入信号 采用IF-ELSE语句实现BCD输出的10线-4线优先级编码器电路的示例程序。 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cypriority_encoder IS PORT ( datain : IN STD_LOGIC_VECTOR ( 1 TO 9 ) ; dataout : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ); END ENTITY cypriority_encoder ; ARCHITECTURE rtl OF cypriority_encoder IS BEGIN PROCESS ( datain ) BEGIN IF ( datain = “111111111” ) THEN --if 嵌套语句 dataout <= "1111" ; ELSE IF ( datain (9) = '0' ) THEN dataout <= “0110” ; --反码输出 ELSIF ( datain (8) = „0‟ ) THEN --多选择的IF语句 dataout <= "0111" ;
直接根据真值表设计的全加器电路的VHDL示例程序。 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY full_adder IS PORT ( dataA, dataB, carryin : IN STD_LOGIC ; sum : OUT STD_LOGIC ; carryout : OUT STD_LOGIC ) ; END ENTITY full_adder ; ARCHITECTURE rtl OF full_adder IS BEGIN sum <= dataA XOR dataB XOR carryin ; -- 和数满足逻辑异或关系 carryout <= ( dataA AND dataB ) OR ( dataA AND carryin ) OR ( dataB AND carryin ) ; END ARCHITECTURE rtl ;
常用逻辑电路的VHDL描述
组合逻辑电路的VHDL描述
时序逻辑电路的VHDL描述
有限状态机的VHDL描述
组合逻辑电路的VHDL语言描述
1、数据选择器 多路输入信号中,选择一路输出;有2选1,4选1,8选1,16选1等
采用IF-ELSE语句实现2选1选择器的示例程序。 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cy2_1mux IS PORT ( datain1, datain2 : IN STD_LOGIC ; sel : IN STD_LOGIC ; dataout : OUT STD_LOGIC ) ; END ENTITY cy2_1mux ; ARCHITECTURE rtl OF cy2_1mux IS BEGIN cy21mux_inst : PROCESS ( datain1, datain2, sel ) BEGIN -- 采用IF-ELSE语句描述2选1电路的选通控制信号 IF ( sel = '1' ) THEN -- 2选择的IF-ELSE语句 dataout <= datain1 ; ELSE dataout <= datain2 ; END IF ; END PROCESS cy21mux_inst ; END ARCHITECTURE rtl ;
采用CASE语句实现2选1选择器的示例程序。 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cy2_1mux IS PORT ( datain1, datain2 : IN STD_LOGIC ; sel : IN STD_LOGIC ; dataout : OUT STD_LOGIC ) ; END ENTITY cy2_1mux ;
译码器是对一个有效的编码方式进行解码,不同的编码值对应不同的输出信号,这样在 电路系统中就可以根据不同的输出信号确定当前是哪个编码值。
4线-16线译码器电路的示例程序。 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cydecoder_4_16 IS PORT ( D, C, B, A : IN STD_LOGIC ; G1N, G2N : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR ( 15 DOWNTO 0 ) ) ; END ENTITY cydecoder_4_16 ; ARCHITECTURE rtl OF cydecoder_4_16 IS SIGNAL temp_datain : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ; BEGIN temp_datain <= D & C & B & A ; PROCESS ( D, C, B, A, G1N, G2N ) BEGIN IF ( G1N = '0' AND G2N ='0') THEN -- 译码器的选通信号低电平有效 -- 采用CASE语句描述4-16译码电路 CASE temp_datain IS -- CASE语句的条件表达式是位矢量 temp_datain
相关主题