📄 pie.vhd
字号:
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
ENTITY PIE IS
PORT ( rst : IN Std_Logic ;
clk : IN Std_Logic ;
le : IN Std_Logic ;
din : IN Std_Logic_Vector(7 DOWNTO 0);
dout : OUT Std_Logic );
END PIE ;
ARCHITECTURE behav OF PIE IS
SIGNAL state : Std_Logic_Vector(3 DOWNTO 0);
SIGNAL cout : Integer Range 0 To 40;
SIGNAL data : Std_Logic_Vector(7 DOWNTO 0);
BEGIN
PROCESS(rst,clk)
BEGIN
IF rst='1' THEN
state <= "0000" ;
cout <= 0 ;
dout <= '1' ;
ELSIF clk'event AND clk='1' THEN
CASE state IS
WHEN "0000" =>
cout <= 0 ;
data <= "00000000" ;
dout <= '1' ;
IF le='1' THEN
state <= "0001" ;
ELSE
state <= "0000" ;
END IF ;
WHEN "0001" =>
data <= din ;
state <= "0010" ;
WHEN "0010" =>
IF cout<10 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=10 AND cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<20 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=20 AND cout<35 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=35 AND cout<39 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=39 THEN
cout <= 0 ;
state <= "0011" ;
END IF ;
WHEN "0011" =>
IF data(7)='1' THEN
IF cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<19 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=19 THEN
cout <= 0 ;
state <= "0100" ;
END IF ;
ELSIF data(7)='0' THEN
IF cout<5 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=5 AND cout<9 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=9 THEN
cout <= 0 ;
state <= "0100" ;
END IF ;
END IF ;
WHEN "0100" =>
IF data(6)='1' THEN
IF cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<19 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=19 THEN
cout <= 0 ;
state <= "0101" ;
END IF ;
ELSIF data(6)='0' THEN
IF cout<5 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=5 AND cout<9 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=9 THEN
cout <= 0 ;
state <= "0101" ;
END IF ;
END IF ;
WHEN "0101" =>
IF data(5)='1' THEN
IF cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<19 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=19 THEN
cout <= 0 ;
state <= "0110" ;
END IF ;
ELSIF data(5)='0' THEN
IF cout<5 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=5 AND cout<9 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=9 THEN
cout <= 0 ;
state <= "0110" ;
END IF ;
END IF ;
WHEN "0110" =>
IF data(4)='1' THEN
IF cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<19 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=19 THEN
cout <= 0 ;
state <= "0111" ;
END IF ;
ELSIF data(4)='0' THEN
IF cout<5 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=5 AND cout<9 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=9 THEN
cout <= 0 ;
state <= "0111" ;
END IF ;
END IF ;
WHEN "0111" =>
IF data(3)='1' THEN
IF cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<19 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=19 THEN
cout <= 0 ;
state <= "1000" ;
END IF ;
ELSIF data(3)='0' THEN
IF cout<5 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=5 AND cout<9 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=9 THEN
cout <= 0 ;
state <= "1000" ;
END IF ;
END IF ;
WHEN "1000" =>
IF data(2)='1' THEN
IF cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<19 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=19 THEN
cout <= 0 ;
state <= "1001" ;
END IF ;
ELSIF data(2)='0' THEN
IF cout<5 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=5 AND cout<9 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=9 THEN
cout <= 0 ;
state <= "1001" ;
END IF ;
END IF ;
WHEN "1001" =>
IF data(1)='1' THEN
IF cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<19 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=19 THEN
cout <= 0 ;
state <= "1010" ;
END IF ;
ELSIF data(1)='0' THEN
IF cout<5 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=5 AND cout<9 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=9 THEN
cout <= 0 ;
state <= "1010" ;
END IF ;
END IF ;
WHEN OTHERS =>
IF data(0)='1' THEN
IF cout<15 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=15 AND cout<19 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=19 THEN
cout <= 0 ;
state <= "0000" ;
END IF ;
ELSIF data(0)='0' THEN
IF cout<5 THEN
cout <= cout+1 ;
dout <= '1' ;
ELSIF cout>=5 AND cout<10 THEN
cout <= cout+1 ;
dout <= '0' ;
ELSIF cout>=10 THEN
cout <= 0 ;
data <= "00000000" ;
state <= "0000" ;
END IF ;
END IF ;
END CASE ;
END IF ;
END PROCESS ;
END ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -