为何接受不到值?

[复制链接]
1684|8
 楼主| entepino 发表于 2013-3-7 14:07 | 显示全部楼层 |阅读模式
本帖最后由 entepino 于 2013-3-7 18:17 编辑

RecData: Process
variable  TagRecData : std_logic_vector (3 downto 0);
begin  
        TagRecData(3 downto 0) :=  axi_gpio_0_GPIO_IO_O_pin(31 downto 28);
        case TagRecData is
                  when  "0001" =>   FixData1(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                  when  "0010" =>   FixData2(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                  when  "0011" =>   FixData3(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                  when  "0000" =>   EnPulseCNT <= '0';
                  when  "1111" =>   EnPulseCNT <= '1';
                  when others  =>   null;        
                  end case;
                  --the data is should be judeged suitable.
  end process RecData;

INPulseCNT:process
  
   Begin
      IF EnPulseCNT = '0'   THEN
       清零;
      Else  
        脉冲计数;
        If 脉冲数〉0  and  脉冲数〈FixData1 then
         Do something1;
       If 脉冲数〉FixData1  and  脉冲数〈FixData2 then
          Do something2;
      If 脉冲数〉FixData2  and  脉冲数〈FixData3 then
          Do something3;
     Else   null;
     End if;
  end process INPulseCNT;

在sdk中写
      GPIO_WriteTest(&Gpio_o,0x10000024);  //给FixData1赋值
             xil_printf("GPIO_WriteDATA1\r\n");
             GPIO_WriteTest(&Gpio_o,0x2000002A);  //给FixData2赋值
             xil_printf("GPIO_WriteDATA2\r\n");
             GPIO_WriteTest(&Gpio_o,0x30000046);  /给FixData3赋值
             xil_printf("GPIO_WriteDATA3\r\n");
while (1)
{
GPIO_WriteTest(&Gpio_o,0xF0000000);  //start
               xil_printf("trigger start\r\n");
}

为何FixData1、FixData2、FixData3值接受不到?


 楼主| entepino 发表于 2013-3-7 14:10 | 显示全部楼层
  如果不加约束条件,即没有 case when, when  "0010",  
即直接写FixData1(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);就可以接受到FixData1的值,请问为什么?谢谢
GoldSunMonkey 发表于 2013-3-7 14:42 | 显示全部楼层
检查是不是case条件没有满足呢?
 楼主| entepino 发表于 2013-3-7 18:14 | 显示全部楼层
本帖最后由 entepino 于 2013-3-7 18:15 编辑

TagRecData(3 downto 0) :=  axi_gpio_0_GPIO_IO_O_pin(31 downto 28);
        case TagRecData is
                  when  "0001" =>   FixData1(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                   when"0010" =>  FixData2(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                   when"0011"=> FixData3(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);

    end  case;
end process;
此process中确实没有接受到数,但我sdk中 GPIO_WriteTest(&Gpio_o,0x10000016);  //data1
            xil_printf("GPIO_WriteDATA1\r\n"); 打印信息都出来了,数据肯定发出去了,为何接受不到啊,是不是接受方法有问题?


 楼主| entepino 发表于 2013-3-7 18:16 | 显示全部楼层
我试着把TagRecData改成信号,也不行,为何接受不到啊?奇怪!!
 楼主| entepino 发表于 2013-3-8 09:49 | 显示全部楼层
TagRecData(3 downto 0) :=  axi_gpio_0_GPIO_IO_O_pin(31 downto 28);
        case TagRecData is
                  when  "0001" =>   FixData1(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                  when  "0010" =>   FixData2(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                  when  "0011" =>   FixData3(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                  when  "0000" =>   EnPulseCNT <= '0';
                  when  "1111" =>   EnPulseCNT <= '1';
                  when others  =>   null;        
                  end case;
                  --the data is should be judeged suitable.
  end process RecData;

为何接受不到值啊?很奇怪,难道没有人知道吗?
 楼主| entepino 发表于 2013-3-8 11:28 | 显示全部楼层
TagRecData(3 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(27 downto 24);
               
                          if(TagRecData = "0001" ) then
                      FixData1(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                      LED1 <= '0';
                           LED2 <= '1';
                                LED3 <= '1';
                  elsif (TagRecData = "0010" ) then
                       FixData2(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                       LED1 <= '0';
                            LED2 <= '0';
                                 LED3 <= '1';
                  elsif (TagRecData = "0011" ) then
                       FixData3(9 downto 0) <=  axi_gpio_0_GPIO_IO_O_pin(9 downto 0);
                       LED1 <= '1';
                            LED2 <= '0';
                                 LED3 <= '1';
                        else                   
                       null;                  
                  end if;

改成这样,如果收到数据,则指示灯亮。发觉灯是亮的,但数据还是没接受到。
 楼主| entepino 发表于 2013-3-8 11:30 | 显示全部楼层
怀疑是不是接受数据和使用此数据不在一个process中,会有影响,所以就把两个process合并,发觉还是不好使,奇怪。是不是第二个process中的clk200k的原因?
GoldSunMonkey 发表于 2013-3-8 21:23 | 显示全部楼层
继续尝试相关信号啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

214

主题

653

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部