y
2输入与非门
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY nand2 IS
PORT (a,b:IN STD_LOGIC;
y:OUT STD_LOGIC);
END nand2;
ARCHITECTURE nand2_1 OF nand2 IS
BEGIN
y <= a NAND b; --与y <=NOT( a AND b);等价
END nand2_1;
3-8译码器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY decoder_3_to_8 IS
PORT (a,b,c,g1,g2a,g2b:IN STD_LOGIC;
y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END decoder_3_to_8;
ARCHITECTURE rtl OF decoder_3_to_8 IS
SIGNAL indata:STD_LOGIC_VECTOR (2 DOWNTO 0);
BEGIN
indata <= c & b & a;
PROCESS (indata,g1,g2a,g2b)
BEGIN
IF (g1 = '1' AND g2a = '0' AND g2b = '0' ) THEN
CASE indata IS
WHEN "000" => y <= "11111110";
WHEN "001" => y <= "11111101";
WHEN "010" => y <= "11111011";
WHEN "011" => y <= "11110111";
WHEN "100" => y <= "11101111";
WHEN "101" => y <= "11011111";
WHEN "110" => y <= "10111111";
WHEN "111" => y <= "01111111";
WHEN OTHERS=> y <= "XXXXXXXX";
END CASE;
ELSE
Y <= "11111111";
END IF;
END PROCESS;
END rtl;
优先级编码器电路
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY priority_encoder IS
PORT(input:IN Std_Logic_Vector(7 Downto 0);
y : OUT Std_Logic_Vector(2 Downto 0));
END priority_encoder;
ARCHITECTURE rtl OF priority_encoder IS
BEGIN
PROCESS (input)
BEGIN
IF ( input(0) ='0') THEN
y <= "111";
ELSIF (input(1) ='0') THEN
y <= "110";
ELSIF (input(2) ='0') THEN
y <= "101";
ELSIF (input(3) ='0') THEN
y <= "100";
ELSIF (input(4) ='0') THEN
y <= "011";
ELSIF (input(5) ='0') THEN
y <= "010";
ELSIF (input(6) ='0') THEN
y <= "001";
ELSE
y <= "000";
END IF;
END PROCESS P1;
END rtl;
四选一电路
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux4 IS
PORT(input:IN Std_Logic_Vector(3 Downto 0);
a,b:IN Std_Logic;
y : OUT Std_Logic);
END mux4 ;
ARCHITECTURE rtl OF mux4 IS
SIGNAL sel:Std_Logic_Vector(1 Downto 0);
BEGIN
sel<=b & a;
PROCESS (input,sel)
BEGIN
IF (sel="00") THEN
y <= input(0);
ELSIF (sel="01") THEN
y <= input(1);
ELSIF (sel="10") THEN
y <= input(2);
ELSE
y <= input(3);
END IF;
END PROCESS;
END rtl;
半加器
全加器一位全加器的真值表如下图,其中Ai为被加数,Bi为加数,相邻低位来的进位数为Ci-1,输出本位和为Si。向相邻高位进位数为Ci
输入
输出
Ci-1
Ai
Bi
Si
Ci
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
三态门
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tri_gate IS
PORT (din, en:IN STD_LOGIC;
dout:OUT STD_LOGIC);
END tri_gate;
ARCHITECTURE zas OF tri_gate IS
BEGIN
PROCESS(din, en) IS
BEGIN
IF (en=‘1’) THEN
dout<=din;
ELSE
dout<=‘Z’;
END IF;
END PROCESS;
END zas;
单向总线缓冲器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tri_buf8 IS
PORT ( en:IN STD_LOGIC;
din:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
dout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0 ));
END tri_buf8;
ARCHITECTURE zas OF tri_buf8 IS
BEGIN
PROCESS(din, en) IS
BEGIN
IF (en=‘1’) THEN
dout<=din;
ELSE
dout<=“ZZZZZZZZ”;
END IF;
END PROCESS;
END zas;
双向总线缓冲器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tri_bibuf8 IS
PORT ( en: IN STD_LOGIC;
dr: IN STD_LOGIC;
a,b:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END tri_bibuf8;
ARCHITECTURE rtl OF tri_bibuf8 IS
SIGNAL aout,bout: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(a, dr, en) IS
BEGIN
IF ((en=‘0’) AND (dr=‘1’)) THEN
bout<=a;
ELSE
bout<=“ZZZZZZZZ”;
END IF;
b<=bout;
END PROCESS;
PROCESS(b, dr, en) IS
BEGIN
IF ((en=‘0’) AND (dr=‘0’)) THEN
aout<=b;
ELSE
aout<=“ZZZZZZZZ”;
END IF;
a<=aout;
END PROCESS;
END rtl;
十二进制计数器
LIBRARY IEEE;
Clr qa
Clk qb
qc
En qd
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY count12en IS
PORT (
clk,clr, en :IN STD_LOGIC;
qa,qb,qc,qd:OUT STD_LOGIC);
END count12en;
ARCHITECTURE rtl OF count12en IS
SIGNAL count_4:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
qa<=count_4(0);
qb<=count_4(1);
qc<=count_4(2);
qd<=count_4(3);
PROCESS (clr,clk)
BEGIN
IF(clr='1') THEN
count_4<="0000";
ELSIF (clk'EVENT AND clk ='1') THEN
IF(en='1') THEN
IF (count_4="1011") THEN
count_4<="0000";
ELSE
count_4<=count_4+'1';
END IF;
END IF;
END IF;
END PROCESS;
END rtl;
6分频
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
Rst
Clkout clkin
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY fenpin IS
PORT (rst, clkin :IN STD_LOGIC;
clkout :OUT STD_LOGIC);
END fenpin;
ARCHITECTURE rtl OF fenpin IS
signal count: STD_LOGIC_VECTOR(7 DOWNTO 0);
signal clk: STD_LOGIC;
BEGIN
process(clkin,rst)
begin
if rst ='1'then
count <= "00000000";
clk <= '0';
elsif clkin'event and clkin='1' then
if count = "00000010" then
count <= "00000000";
clk <= not clk;
else
count <= count + 1;
end if;
end if;
end process;
clkout<=clk;
END rtl;
5分频
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY fenpin IS
PORT (rst,clkin :IN STD_LOGIC;
clkout:OUT STD_LOGIC);
END fenpin;
ARCHITECTURE rtl OF fenpin IS
signal count1,count2: STD_LOGIC_VECTOR(7 DOWNTO 0);
signal tmp,tmp1,tmp2: STD_LOGIC;
BEGIN
tmp<=tmp1 AND tmp2;
clkout<=tmp XOR tmp1;
process(clkin,rst)
begin
if rst ='1'then
count1 <= "00000000";
tmp1<= '0';
elsif clkin'event and clkin='1' then
if count1 = "00000100" then
count1 <= "00000000";
else
count1 <= count1 + 1;
if count1 < "00000010" then
tmp1<= '0';
else
tmp1<= '1';
end if;
end if;
end if;
end process;
process(clkin,rst)
begin
if rst ='1'then
count2 <= "00000000";
tmp2<= '1';
elsif clkin'event and clkin='0' then
if count2 = "00000100" then
count2 <= "00000000";
else
count2 <= count2 + 1;
if count2 < "00000010" then
tmp2<= '1';
else
tmp2<= '0';
end if;
end if;
end if;
end process;
END rtl;
Moore状态机
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY moore IS
PORT (rst,clk,X:IN STD_LOGIC;
op:OUT STD_LOGIC);
END moore;
ARCHITECTURE a OF moore IS
TYPE State IS (s0,s1,s2,s3);
0
SIGNAL present_state : State;
SIGNAL next_state: State;
BEGIN
state_comp: PROCESS(present_state,X)
BEGIN
CASE present_state IS
WHEN s0 =>
IF X = '0' THEN
next_state <= s0;
Rst
Clk y
X
ELSE
next_state <= s1;
END IF;
OP <= '1';
WHEN s1 =>
IF X = '0' THEN
next_state <= s3;
ELSE
next_state <= s2;
END IF;
OP <= '0';
WHEN s2 =>
IF X = '0' THEN
next_state <= s2;
ELSE
next_state <= s3;
END IF;
OP <= '1';
WHEN s3 =>
IF X = '0' THEN
next_state <= s3;
ELSE
next_state <= s0;
END IF;
OP <= '0';
END CASE;
END PROCESS state_comp;
PROCESS (CLK,rst)
BEGIN
IF RST='1' THEN
present_state <= S0;
ELSIF CLK'EVENT AND CLK = '1' THEN
present_state <= next_state;
END IF;
END PROCESS;
END a;
Mealy 状态机
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY mealy IS
PORT (rst,clk,X:IN STD_LOGIC;
op:OUT STD_LOGIC);
END mealy;
ARCHITECTURE a OF mealy IS
TYPE State IS (s0,s1,s2,s3);
SIGNAL present_state : State;
SIGNAL next_state: State;
BEGIN
state_comp: PROCESS(present_state,X)
0
BEGIN
CASE present_state IS
WHEN s0 =>
IF X = '0' THEN
next_state <= s0;
ELSE
next_state <= s1;
END IF;
IF X = '0' THEN op <= '0';
ELSE
op <= '1';
END IF;
WHEN s1 =>
IF X = '0' THEN
next_state <= s3;
Rst
Clk y
x
ELSE
next_state <= s2;
END IF;
IF X = '0' THEN
op <= '1';
ELSE
op <= '1';
END IF;
WHEN s2 =>
IF X = '0' THEN
next_state <= s2;
ELSE
next_state <= s3;
END IF;
IF X = '0' THEN
op <= '0';
ELSE
op <= '1';
END IF;
WHEN s3 =>
IF X = '0' THEN
next_state <= s3;
ELSE
next_state <= s0;
END IF;
IF X = '0' THEN
op <= '0';
ELSE
op <= '0';
END IF;
END CASE;
END PROCESS state_comp;
PROCESS (CLK,rst)
BEGIN
IF RST ='1' THEN
present_state <= S0;
ELSIF CLK'EVENT AND CLK = '1' THEN
present_state <= next_state;
END IF;
END PROCESS;
END a;
本文档为【vhdl程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。