[求助] 刚学VHDL的新手求教一段程序

zimao1988   2011-5-18 19:14 楼主
有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;

上面是自己编的一段部分功能(验证能否延时)的程序,结果好像延时不了,请问是不是计数部分出问题了???还有如何使A1,A0依次为00,01,10,11??

回复评论 (5)

程序中的out_y是用来观察时序图中有无延时效果的!!
点赞  2011-5-18 19:17
新手建议用状态机搞,这样看起来更简洁!
一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-5-19 16:05
从你的程序看,是没有达到你所说的设计效果的。 所有的状态触发都由条件控制if(Aaa="00")
一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-5-19 16:07

回复 4楼 eeleader 的帖子

是的,这段程序只是我先用来验证延时的,结果延时不了
点赞  2011-5-20 13:27
我不是说了吗,你的延时语句没作用,是因为所有的状态触发都由条件控制if(Aaa="00")这个语句的问题,知道了吗?
一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-5-25 12:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复