首页 vhdl程序

vhdl程序

举报
开通vip

vhdl程序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 y y y y y y <= "11...

vhdl程序
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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_348501
暂无简介~
格式:doc
大小:218KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-09-19
浏览量:39