问答题 用VHDL语言完成一个数据通信系统中的数据交换子系统,要求将8位并行数据转换成串行数据发送。
【正确答案】用VHDL语言设计时,不受中规模器件的限制。可以直接设计一个256进制计数器替代用两个74LS161组成256进制计数器。用数据流描述(逻辑描述)设计“与”门和“或”门,其VHDL主程序如下:
   LIBRARY ieee;
   USE ieee.Std_logic_1164.ALL;
   USE work.components.ALL;
   ENTITY xiti809 IS
   PORT(cp,mr:IN Std_logic;d:IN Std_logic_vector(7 downto 0);c:OUT Std_logic_vector(7downto 0);sync,sdata:OUT Std_logic);
   END xiti809;
   ARCHITECTURE xiti809_ar OF xiti809 IS
   COMPONENT count256
   PORT(clk,clr,ld,ent,enp:IN Std_logic;d:IN Std_logic_vector(7 downto 0);q:OUT Std_logic_vector(7 downto 0);rco:OUT Std_logic);
   END COMPONENT;
   COMPONENT v74198
   PORT(nor,s1,s0,cp,dsr,ds1:IN Std_logic;d:IN Std_logic_vector(7 downto 0);q:BUFFER Std_logic_vector(7 downto 0));
   END COMPONENT;
          SIGNAL bit0 : Std_logic ;
    SIGNAL m, n: Std_logic_vector(7 downto 0) ;
    BEGIN
              bit0<=m(0) AND m(1) AND m(2);
              u1: count256 PORT MAP(cp,'1', nr, '1', '1', "11111111", m, sync);
              u2: v74198 PORT MAP(nr,bit0, '1', cp, '1', '1', d, n);
    c<=m; sdata<=n(7);
    END xiti809_ar;
   元件count256程序如下:
    LIBRARY ieee ;
    USE ieee. Std_logic_ 1164. ALL ;
    USE ieee. Std_logic_arith. ALL;
    USE ieee. Std_logie_unsigned. ALL;
    ENTITY count256 IS
    PORT(clk, clr, ld, ent, enp: IN Std_togic; d : IN Std_logic_vector (7 downto 0) ; q : OUT Std_logic_vector(7 downto 0) ; rco : OUT Std_logic) ;
    END;
    ARCHITECTURE eount256_ar of count256 IS
       SIGNAL iq: Integer range 0 TO 255 ;
       SIGNAL id: Integer range 0 TO 255 ;
    BEGIN
       PROCESS(clk, ld, elr)
       BEGIN
           id<=CONV_INTEGER(d) ;
           IF clk' EVENT AND clk='1' THEN
        IF clr='0' THEN
                     iq<=0;
              ELSIF LD='0' THEN
                        iq<=id ;
              ELSIF (ent AND enp )='1' THEN
                        iq<= iq+1;
              END IF;
           END IF;
          IF ent='1' AND iq=255 THEN
                 rco<='1';
          ELSE
                 rco<='0';
          END IF;
          q<= CONV_STD_LOGIC_VECTOR (iq, 8);
        END PROCESS;
   END count256_ar;
   元件V74198的VHDL程序如下:
   LIBRARY ieee;
   USE ieee.Std_logic_1164.ALL;
   ENTlTY v74198 IS
   PORT(ncr, s1, s0,cp, dsr,ds1:IN Std_logic;d:IN Std_logic_vector(7 downto 0);q:BUFFERStd_logic_vector(7 downto 0));
   END v74198:
   ARCHITECTURE v74198_ar OF v74198 IS
   SIGNAL sel:Std_logic_vector(1 downto 0);
   BEGIN
   sel<=s1&s0:
   PROCESS(ncr,sel,cp,dsr,dsl,d)
   BEGIN
   IF ncr='0' THEN
   q<="00000000";
   ELSIF(sel="00")THEN
   null;
   ELSIF(cp'EVENT AND cp='1')THEN
   CASE sel IS
   WHEN "11"=>q<=d;
   WHEN "01"=>q<=q(6 downto 0)&dsr;
   WHEN "10"=>q<=dsl&q(7 downto 1);
   WHEN OTHERS=>null;
   END CASE;
   END IF;
   END PROCESS;
   END v74198_ar;
【答案解析】