NIOS2配置EP3C16F484C6的epcs进行flash烧写出现以下错误 error code:8 for command:nios2edsbin......

NIOS2配置EP3C16F484C6的epcs进行flash烧写出现以下错误 error code:8 for command:nios2edsbin......,第1张

同问,我也是能用hardware运行,但是无法下载到EPCS,上面提示No EPCS registers found:tried looking at addresses,然后说了几个地址,我对照Qsys建立的软核,地址没错啊,就是分配给EPCS的地址,困扰两天了,同求解!

我的Q921410450,感谢!

你看看编译结果提示,看看程序占用了多少RAM空间。如果你使用的是片内RAM,可以尝试加大一点,让程序能装下;如果FPGA RAM有限,没法加大了,可以设置system library properties,勾上Reduce device drivers、Small C library、Lightweight device driver API,这样可以节省程序空间。另外printf函数费内存,最好不要用。

这种问题,有可能是头文件出错了,首先检查头文件的语法,其次检查头文件引用BSP中的变量名称是否对应,例如基地址,头文件中指针指向的基地址和BSP中系统文件定义的基地址,以及QSYS中模块的名称要对应,否则头文件找不到BSp中的内容,我是这么改的,大家可以试试!

说明你的FPGA程序重新编译过,但是你没有在niosII的软件工程中重新生成bsp文件。

建议你:重新编译一次FPGA程序,完毕后在niosII eds中右键单击左侧工程->Nios II->Generate BSP,然后再重新build一下nios II的软件。

systemh文件中包含了你在SOPC builder系统中所添加所有外设的信息,包括外设地址、中断号什么的

sopc builder创建系统后会生成sopcinfo文件(80版本以上)。

系统生成systemh文件有两种方式:

在NIOS II IDE(EDS)中选择创建的cpu,选择一个模板,编译以后会生成一个systemh文件

另外一个方法是在“Nios II Command Shell”中,在有sopcinfo的文件夹下运行

sopc-create-header-files --single systemh

来生成。

本质上两种方式是一样的,IDE也是调用这个命令来生成systemh文件的。

步骤1 在SOPC Builder中例化Interval Timer核:

1 在SOPC Builder中例化Interval Timer核,命名为sys_clk_timer。

图1 例化Interval Timer核

注意:命名为sys_clk_timer只是为了和BSP中sys_clk_timer一致,也可以命名为其他名称。

图2 BSP中的相关设置

2 配置Interval Timer核

图3 配置Interval Timer核

Timerout period配置为1ms,表示每个tick是1ms;关于tick的概念,后面会提到。Timer counter size默认为32位。Hardware options可以自行配置;因为此处只是用到了sys_clk_timer服务,所以选择默认选项之一Simple periodic interrupt即可,即简单的周期中断。关于Timerout period的概念,手册中的介绍如下,大家可自行阅读。

图4 手册中的Timerout period的概念

注意:由于Writeable period选项没有用,所以Timerout period是固定的。

步骤2 NIOS II EDS中编写相应的C程序

1 查看systemh中的相应内容

#define ALT_MODULE_CLASS_sys_clk_timer altera_avalon_timer

#define SYS_CLK_TIMER_ALWAYS_RUN 1

#define SYS_CLK_TIMER_BASE 0x1002000

#define SYS_CLK_TIMER_COUNTER_SIZE 32

#define SYS_CLK_TIMER_FIXED_PERIOD 1

#define SYS_CLK_TIMER_FREQ 125000000u

#define SYS_CLK_TIMER_IRQ 2

#define SYS_CLK_TIMER_IRQ_INTERRUPT_CONTROLLER_ID 0

#define SYS_CLK_TIMER_LOAD_VALUE 124999ULL

#define SYS_CLK_TIMER_MULT 00010

#define SYS_CLK_TIMER_NAME "/dev/sys_clk_timer"

#define SYS_CLK_TIMER_PERIOD 1

#define SYS_CLK_TIMER_PERIOD_UNITS "ms"

#define SYS_CLK_TIMER_RESET_OUTPUT 0

#define SYS_CLK_TIMER_SNAPSHOT 0

#define SYS_CLK_TIMER_SPAN 32

#define SYS_CLK_TIMER_TICKS_PER_SEC 1000u

#define SYS_CLK_TIMER_TIMEOUT_PULSE_OUTPUT 0

#define SYS_CLK_TIMER_TYPE "altera_avalon_timer"

第5行,固定的Timerout period,为1;第13行,是Timerout period的单位。

第17行,由于每个tick是1ms,因此1s有1000个ticks。

第6行,Nios II软核的输入时钟频率,此处为125MHz。

2 示范程序

#include "systemh" // SOPC Builder配置后的存储映射头文件

#include "altera_avalon_pio_regsh" // PIO核的存储映射头文件

#include "alt_typesh" // Altera的数据类型

#include "sys/alt_alarmh" // Interval Timer核的驱动头文件

#include "unistdh" // NULL

// 用户回调函数

alt_u32 timer_CallBackFunc(void context);

alt_alarm timer_addr; // 指向结构体alt_alarm的指针

alt_u32 ticks_num = 100; // 100 ticks 1 ms/tick = 100 ms

int main()

{

/

函数功能:启动sys_clk_timer服务

函数备注:#include "sys/alt_alarmh"

入口参数:timer_addr,指向结构体alt_alarm的指针

ticks_num,每隔ticks_num执行一次回调函数

timer_CallBackFunc,用户回调函数

context,传给用户回调函数的参数,此处为NULL

/

alt_alarm_start(&timer_addr, ticks_num, timer_CallBackFunc, NULL);

while(1);

return 0;

}

/

函数功能:用户回调函数

函数备注:用户自己编写

入口参数:context, 从alt_alarm_start()传来的参数

出口参数:ticks_num, sys_clk_timer服务的周期数

/

alt_u32 timer_CallBackFunc(void context)

{

static alt_u8 temp = 0; // static 定义时,只可赋值一次

IOWR_ALTERA_AVALON_PIO_DATA(Q_LED_BASE, temp);

temp = ~temp; // 翻转temp

return ticks_num; // 返回下一次sys_clk_timer服务的ticks_num

}

对应前面提到的Simple periodic interrupt,34行到40行的用户回调函数,可以看作是定时器中断服务程序;23行的alt_alarm_start()可以看作是定时器中断的注册函数。ticks_num有什么用呢,前面已经提到1个tick是1ms(SOPC Builder中配置的),那么一旦定时器使用alt_alarm_start()运行起来,回调函数就会每ticks_num1ms/tick执行一次。

注意:第36行,用户回调函数内,变量的声明必须加上关键字static,以防止被编译器优化以致错误出现。第23行的ticks_num为首次sys_clk_timer服务的ticks_num;第39行的ticks_num为下一次sys_clk_timer服务的ticks_num;两者可以不同;读者可以在第36行用数字替换试试。还有每个tick的时间只与SOPC Builder中的配置有关,和Nios II软核的输入时钟没有太大的关系。

至于为什么叫回调函数,我们可以打开sys/alt_alarmh,查看相关函数的原型。此处由于水平有限,不做相关解析。请读者自行分析。

/

"alt_alarm" is a structure type used by applications to register an alarm

callback function An instance of this type must be passed as an input

argument to alt_alarm_start() The user is not responsible for initialising

the contents of the instance This is done by alt_alarm_start()

/

typedef struct alt_alarm_s alt_alarm;

/

alt_alarm_start() can be called by an application/driver in order to register

a function for periodic callback at the system clock frequency Be aware that

this callback is likely to occur in interrupt context

/

extern int alt_alarm_start (alt_alarm the_alarm,

alt_u32 nticks,

alt_u32 (callback) (void context),

void context);

/

alt_alarm_stop() is used to unregister a callback Alternatively the callback

can return zero to unregister

/

extern void alt_alarm_stop (alt_alarm the_alarm);

/

Obtain the system clock rate in ticks/s

/

static ALT_INLINE alt_u32 ALT_ALWAYS_INLINE alt_ticks_per_second (void)

{

return _alt_tick_rate;

}

/

alt_sysclk_init() is intended to be only used by the system clock driver

in order to initialise the value of the clock frequency

/

static ALT_INLINE int ALT_ALWAYS_INLINE alt_sysclk_init (alt_u32 nticks)

{

if (! _alt_tick_rate)

{

_alt_tick_rate = nticks;

return 0;

}

else

{

return -1;

}

}

/

alt_nticks() returns the elapsed number of system clock ticks since reset

/

static ALT_INLINE alt_u32 ALT_ALWAYS_INLINE alt_nticks (void)

{

return _alt_nticks;

}

是该Generate BSP?还是该BSP Editor或者该Build Project其执行顺序又是如何呢?Introduction使用环境:Windows XP SP3 + VirtualBox 412 + Quartus II 110自从使用Nios II SBT,每次Qsys或者FPGA的RTL做修改後,就一直犹豫到底要只执行Build Project就好还是要先Clean Project还是必须先执行Generate BSP那BSP Editor也要执行吗因为有时总会有些不可预期的错误产生,一直到我看到[1] Nios II Software Build Tools的p4-30的Revising Your BSP章节,所有的疑问才豁然开朗。建议你也完整的看一下[1] Nios II Software Build Tools的Revising Your BSP章节。本文只是个人理解下的总结,不能取代Altera的官方资料。Generate BSP:其执行流程如下:值得注意的是Generate BSP会重新根据sopcinfo去产生drivers /HAL,也就是说若你在Qsys移除了某个IP,Generate BSP会自动帮你删除drivers / HAL相关的档案,且你之前若手动对drivers / HAL的C code做了修改,Generate BSP也会重新覆盖过去,所以不建议手动去修改drivers / HAL的C code,应该由Generate BSP自动去产生即可。BSP Editor:修改settingsbsp的设定,主要是偏韧体方面的设定。Clean Project:相当於make clean,会将所有的object files删除,由於若你在Qsys删除某个IP,在Generate BSP会删除该IP的drivers / HAL档案,却不会删除该IP的object files,因此必须手动用Clean Project删除。Build Project:相当於make all,会重新根据Makefile编译所有档案。Conclusion大部分的人都知道最後是Clean Project与Build Project,这点问题不大,但Generate BSP与BSP Editor该谁先执行呢总结其流程如下:

你用的是破解文件吧?

正确的安装步骤是:

1安装Quartus主程序文件,完全安装

2安装Device_family器件文件,按需安装

3安装Model_sim或Nios EDS,按需安装

4俊龙科技破解,学习用,你懂的

5enjoy it :)

以上就是关于NIOS2配置EP3C16F484C6的epcs进行flash烧写出现以下错误 error code:8 for command:nios2eds/bin/......全部的内容,包括:NIOS2配置EP3C16F484C6的epcs进行flash烧写出现以下错误 error code:8 for command:nios2eds/bin/......、请教高手,FPGA中生成的SOPC小系统,在Nios ii中编译时提示出错,该怎么解决啊、求大神,NIOS2里面玩个LED闪烁~~在EDS里面编程出现错误,undefined reference to `main'等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10127110.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存