打印

为何接受不到值?

[复制链接]
1145|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"); 打印信息都出来了,数据肯定发出去了,为何接受不到啊,是不是接受方法有问题?


使用特权

评论回复
5
entepino|  楼主 | 2013-3-7 18:16 | 只看该作者
我试着把TagRecData改成信号,也不行,为何接受不到啊?奇怪!!

使用特权

评论回复
6
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;

为何接受不到值啊?很奇怪,难道没有人知道吗?

使用特权

评论回复
7
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;

改成这样,如果收到数据,则指示灯亮。发觉灯是亮的,但数据还是没接受到。

使用特权

评论回复
8
entepino|  楼主 | 2013-3-8 11:30 | 只看该作者
怀疑是不是接受数据和使用此数据不在一个process中,会有影响,所以就把两个process合并,发觉还是不好使,奇怪。是不是第二个process中的clk200k的原因?

使用特权

评论回复
9
GoldSunMonkey| | 2013-3-8 21:23 | 只看该作者
继续尝试相关信号啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

649

帖子

2

粉丝