有a,b,c,d四个输入数据,首先让A0=0,A1=0时输出y<=a,然后使WR置0(写输入有效,送出y), 接着再进行计数延时(计数十次,确保数据接收完整),延时完成后使WR置0(关闭通道);再接着让A0=0,A1=1,输出y<=b,用上述流程完成四个数据的依次接收(完成四次即可,不用循环接收)。( 一个四选一选择器连接 一个计十次的计数器 再与一个四通道芯片连接 A0,A1为选择器和芯片的功用片选端)
entity control is
port(a,b,c,d:in std_logic_vector(7 downto 0);
A0,A1:in std_logic;
clk:in std_logic;
out_y:out std_logic_vector(7 downto 0);
y:buffer std_logic_vector(7 downto 0));
end control;
architecture behave of control is
signal Aaa:std_logic_vector(1 downto 0);
begin
Aaa<=A1&A0;
process(a,b,c,d,A,clk)
variable temp:std_logic_vector(3 downto 0);
variable en:std_logic:='0';
begin
if clk'event and clk='1' then
if Aaa="00" then
y<=a;
if en='0' then
if temp<10 then
temp:=temp+1;
else temp:=(others=>'0');
end if;
en:='1';
end if;
end if;
if Aaa="01" then
y<=b;
if en='0' then
if temp<10 then
temp:=temp+1;
else temp:=(others=>'0');
end if;
en:='1';
end if;
end if;
if Aaa="10" then
y<=c;
if en='0' then
if temp<10 then
temp:=temp+1;
else temp:=(others=>'0');
end if;
en:='1';
end if;
end if;
if Aaa="11" then
y<=d;
if en='0' then
if temp<10 then
temp:=temp+1;
else temp:=(others=>'0');
end if;
en:='1';
end if;
end if;
end if;
out_y<=y;
end process;
end behave;