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) 由于在代码中使用了延迟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 秒
但是用自己定义的指令算出的结果还是不正确,大家能不能帮忙看下。 不好意思。我在ci_nand.v中少加一段代码导致了程序不能运行
assign result=~(dataa&datab);
加上这段代码就行了,非常抱歉,当时太粗心了。
页:
[1]