【正确答案】用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;
【答案解析】