liuhui1987812 发表于 2011-7-30 20:56:31

nios中自定义指令不能正确运行的问题。

nios中的代码
#include <stdio.h>
#include "sys/alt_timestamp.h"
#include "alt_types.h"
int main()
{
    alt_u32 t0, t1;
    alt_u32 a,b,c;
    a=0xff00ff00;
    b=0xf0f0f0f0;
    alt_timestamp_start();
    t0 = alt_timestamp();
    usleep(1*1000*1000);
    t1 = alt_timestamp();
    printf("时间戳t0 = %ld \n", t0);
    c=ALT_CI_CI_NAND_INST(a,b);
    printf("时间戳t1 = %ld \n", t1);
    printf("时间戳(t1-t0) = %ld \n", (t1-t0));
    printf("c=%x\n",c);
    printf("\n");
    printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
    printf("时间戳(t1-t0)花费 %f 秒\n",(double)(t1-t0)/alt_timestamp_freq());
   
    t0 = alt_timestamp();
    printf("时间戳t0 = %ld \n", t0);   
   c=~(a&b);
   t1 = alt_timestamp();
    printf("时间戳t1 = %ld \n", t1);
    printf("时间戳(t1-t0) = %ld \n", (t1-t0));
    printf("c=%x\n",c);
    printf("\n");
    printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
    printf("时间戳(t1-t0)花费 %f 秒\n",(double)(t1-t0)/alt_timestamp_freq());   
   
    return 0;   
}

输出的结果是
时间戳t0 = 544
时间戳t1 = 200526785
时间戳(t1-t0) = 200526241
c=0

系统时钟频率是 50000000 Hz
时间戳(t1-t0)花费 4.010525 秒
�奔浯羣0 = 202361089
时间戳t1 = 202588334
时间戳(t1-t0) = 227245
c=fff0fff

系统时钟频率是 50000000 Hz
时间戳(t1-t0)花费 0.004545 秒

输出的第一个C值为0,说明自定义的指令没有正确运行,第一个时间戳(t1-t0) = 200526241 和第二个时间戳(t1-t0) = 227245 相比,更加说明程序运行有问题。希望大家帮忙看下哪个地方出问题?
我参考了网上部分网上资源
【原创】SOPC用户自定义指令设计之软件篇
http://blog.ednchina.com/chactor/190749/message.aspx
【原创】SOPC用户自定义指令设计之硬件篇
http://blog.ednchina.com/chactor/190504/message.aspx

实验用到的工程文件ourdev_662344KK8CTK.rar(文件大小:7.12M) (原文件名:A13_SDRAM_50M_HZ.rar)
自定义指令参考的文档ourdev_662345NTMLQI.pdf(文件大小:242K) (原文件名:自定义指令.pdf)

liuhui1987812 发表于 2011-8-1 09:58:16

由于在代码中使用了延迟usleep(1*1000*1000); 导致了第一个时间戳的值比第二个时间戳的值大,
我讲代码改过后
    alt_timestamp_start();
    t0 = alt_timestamp();
    //usleep(1*1000*1000);
   
    printf("时间戳t0 = %ld \n", t0);
    c=ALT_CI_CI_NAND_INST(a,b);
    t1 = alt_timestamp();
    printf("时间戳t1 = %ld \n", t1);
    printf("时间戳(t1-t0) = %ld \n", (t1-t0));
    printf("c=%x\n",c);
    printf("\n");
    printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
    printf("时间戳(t1-t0)花费 %f 秒\n",(double)(t1-t0)/alt_timestamp_freq());
   
    t0 = alt_timestamp();
    printf("时间戳t0 = %ld \n", t0);   
    c=~(a&b);
    t1 = alt_timestamp();
    printf("时间戳t1 = %ld \n", t1);
    printf("时间戳(t1-t0) = %ld \n", (t1-t0));
    printf("c=%x\n",c);
    printf("\n");
    printf("系统时钟频率是 %ld Hz\n", alt_timestamp_freq());
    printf("时间戳(t1-t0)花费 %f 秒\n",(double)(t1-t0)/alt_timestamp_freq());   
在nios中运行的结果显示是

nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)

时间戳t0 = 545
时间戳t1 = 92058
时间戳(t1-t0) = 91513
c=0

系统时钟频率是 50000000 Hz
时间戳(t1-t0)花费 0.001830 秒
时间戳t0 = 1501120
时间戳t1 = 1657374
时间戳(t1-t0) = 156254
c=fff0fff

系统时钟频率是 50000000 Hz
时间戳(t1-t0)花费 0.003125 秒
但是用自己定义的指令算出的结果还是不正确,大家能不能帮忙看下。

liuhui1987812 发表于 2011-8-1 20:43:23

不好意思。我在ci_nand.v中少加一段代码导致了程序不能运行
assign result=~(dataa&datab);
加上这段代码就行了,非常抱歉,当时太粗心了。
页: [1]
查看完整版本: nios中自定义指令不能正确运行的问题。