这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 周师电子设计创新社区 » 第五次作业

共1条 1/1 1 跳转至

第五次作业

菜鸟
2014-10-30 14:13:50     打赏
习题3-5
用VHDL设计3-8译码器
(1)when_else语句:
LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
ENTITY decoder3to8_1 IS 
PORT (  DIN : IN STD_LOGIC_VECTOR (2 DOWNTO 0); 
         DOUT : OUT BIT_VECTOR (7 DOWNTO 0)); 
END decoder3to8_1; 
ARCHITECTURE BHV OF decoder3to8_1 IS 
BEGIN 	
    DOUT <= “00000001” WHEN DIN="000" ELSE 
    DOUT <= “00000010” WHEN DIN="001" ELSE 
    DOUT <= “00000100” WHEN DIN="010" ELSE 
    DOUT <= “00001000” WHEN DIN="011" ELSE 
    DOUT <= “00010000” WHEN DIN="100" ELSE 
    DOUT <= “00100000” WHEN DIN="101" ELSE 
    DOUT <= “01000000” WHEN DIN="110" ELSE 
    DOUT <= “10000000” WHEN DIN="111" ELSE 
           NULL;
END BHV; 
(2)case语句:
LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
ENTITY decoder3to8_2 IS
PORT( A : IN STD_LOGIC_VECTOR (2 DOWNTO 0); 
      Y : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); 
END decoder3to8_2 ; 
ARCHITECTURE BHV OF decoder3to8_2 IS
BEGIN 
  PROCESS(A) 
  BEGIN 
     CASE  A  IS 
		WHEN "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; 
  END PROCESS;
END BHV;
(3)if_else语句
LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
ENTITY decoder3to8_3 IS 
PORT (  S : IN STD_LOGIC_VECTOR (2 DOWNTO 0); 
        Y : OUT BIT_VECTOR (7 DOWNTO 0)); 
END decoder3to8_3; 
ARCHITECTURE BHV OF decoder3to8_3 IS 
BEGIN 
S <= S2 & S1 & S0;
  PROCESS(S) 
  BEGIN 
            IF (S="000") THEN Y <= "00000001"; 
         ELSIF (S="001") THEN Y <="00000010";  
         ELSIF (S="010") THEN Y <="00000100";  
         ELSIF (S="011") THEN Y <="00001000";  
         ELSIF (S="100") THEN Y <="00010000";  
         ELSIF (S="101") THEN Y <="00100000";  
         ELSIF (S="110") THEN Y <="01000000";  
         ELSIF (S="111") THEN Y <="10000000"; 
         ELSE NULL; 
         END IF ; 
  END PROCESS;
END BHV;
(4)移位操作符
LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
ENTITY decoder3to8_4 IS 
PORT (  DIN : IN STD_LOGIC_VECTOR (2 DOWNTO 0); 
       DOUT : OUT BIT_VECTOR (7 DOWNTO 0)); 
END decoder3to8_4; 
ARCHITECTURE BHV OF decoder3to8_4 IS 
BEGIN 
    DOUT <=”00000001” SLL CONV INTEGER(DIN);
END BHV;

第四种方法最节省逻辑资源。



习题3-14
用循环语句设计一个7人投票表决器
LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
ENTITY vote_7 IS
PORT ( DIN : IN STD_LOGIC_VECTOR (6 DOWNTO 0) ;
         Y : OUT STD_LOGIC;
      CNTH : OUT STD_LOGIC_VECTOR (2 DOWNTO 0));
END vote_7;
ARCHITETURE BHV OF vote_7 IS 
BEGIN
PROCESS(DIN)
VARIABLE Q : STD_LOGIC_VECTOR(2 DOWNTO 0);
   BEGIN 
    Q :=”000”;
    FOR n IN 0 TO 6 LOOP
      IF (DIN(n)=’1’) THEN Q:=Q+1;
      END IF;
    END LOOP;
    CNTH <= Q;
IF Q>=4 THEN Y<=’1’;
ELSE Y<=’0’;
END IF;
END PROCESS;
END BHV;

 


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]