quartus II 8.0平台下的疑难杂症与一些笔记


USB-Blaster问题:

USB-Blaster Driver 驱动Vista x64环境下无法安装

直接原因:兼容性问题
可能根本原因:quartus II 8.0的驱动不含签名,而Vista x64只认带签名的驱动。
解决方案:请使用XP x32环境。

更换quartus版本无法安装USB-Blaster Driver驱动,提示“名称已用作服务名或服务显示名”

直接原因:7.2版本与8.0版本的驱动不通用
根本原因:windows驱动卸载卸不干净
解决方案:注册表删除
**同时装有7.2与8.0时,只能使用7.2的驱动

Quartus II 8.0 问题:

Internal Error: Sub-system: HDB, File: /quartus/db/hdb/hdb_inst_name.cpp, Line: 11432
Error accessing data member. Not data member owner
Stack Trace:
0x2853D : HDB_SYN_INSTANCE_NAME::set_m_children + 0x1D (DB_HDB)

End-trace

Quartus II Version 8.0 Build 215 05/29/2008 SJ Full Version
解决方案:删除db下所有文件,重建工程。

quartus 引脚相关

引脚手工批量导入的方法(可避免自动导入全部引脚造成的大量警告)
直接修改.qsf文件,在尾部添加引脚定义,形如:
set_location_assignment PIN_AD15 -to iCLK_50
set_location_assignment PIN_T29 -to iKEY[0]
set_location_assignment PIN_W27 -to oLEDG[0]
set_location_assignment PIN_W25 -to oLEDG[1]
set_location_assignment PIN_W23 -to oLEDG[2]
set_location_assignment PIN_Y27 -to oLEDG[3]
set_location_assignment PIN_Y24 -to oLEDG[4]
set_location_assignment PIN_Y23 -to oLEDG[5]
set_location_assignment PIN_AA27 -to oLEDG[6]
set_location_assignment PIN_AA24 -to oLEDG[7]

**使用自动导入引脚时必须注意:
Assignments->Device..->Device and Pin Options…->Unused Pins: As output driving ground 改为 As input tri-stated
解决Nios II无响应
Assignments->Device..->Device and Pin Options…->Dual-Purpose->nCEO: Use as programming pin 改为 Use as regular I/O
解决AD25引脚无法分配

**仿真前务必先产生网表

DE2-70开发板SOPC Builder的配置:

on-chip memory 大小1.1Mb 测试100kB,实际使用57KB正常
SSRAM 选CY7C1380C SSRAM 大小2MB 默认即可
FLASH 选Flash Memory(CFI) 大小8M 自定义:地址宽度 22 数据宽度 16 wait 100
SDRAM 选SDRAM Controler 大小64MB 自定义:数据宽 32 chip 1 bank 4 row 13 col 9
Issue one refresh command every: 7.8125 us
Delay after powerup, before initialization : 200 us
PIO
LEDG 数据宽度 9 output port only
LEDR 数据宽度 18 output port only
KEY 数据宽度 4 input port only
SW 数据宽度 18 input port only

NIOS II8.0 问题:

Error parsing project STF file

The software settings (STF) file associated with this project is damaged. This may be fixed by copying your source files into a new C/C++ application project. For more details see the error log.
直接原因:nios工程路径中含有空格!
根本原因:JDK6的bug 参见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6506304
解决方案:由于NIOS II使用含有该bug的JDK6的进行开发,固仅更换JRE无效……请避免工程路径中的空格
,这意味着不能使用”我的文档”等地存放工程。

常用nios II template空间占用情况

hello_world 使用jtag_uart作为标准输出的情况(以下空间占用与Nios软件配置中选择on-chip memory、SSRAM、SDRAM、FLASH无关,与SOPC builder建立的硬件配置有关,官方给出的大小是~69 kbytes)

名称 优化参数1 优化参数2 优化参数3 优化参数4
hello_world 默认(-O0) 默认(-O0) -Os -Os
hello_world_syslib 默认(-O0) -Os 默认(-O0) -Os
空间占用 66KB 56KB 38KB 28KB

Hello MicroC/OS-II 使用jtag_uart作为标准输出的情况(以下空间占用与Nios软件配置中选择on-chip memory、SSRAM、SDRAM、FLASH无关,与SOPC builder建立的硬件配置有关)

名称 优化参数1 优化参数2 优化参数3 优化参数4
hello_ucosii 默认(-O0) 默认(-O0) -Os -Os
hello_ucosii_syslib 默认(-O0) -Os 默认(-O0) -Os
空间占用 127KB 102KB 100KB 75KB

使用jtag_uart作为标准输出与使用lcd作为标准输出的区别:

在system.h中:

#define ALT_STDOUT “/dev/lcd”
#define ALT_STDOUT_TYPE “altera_avalon_lcd_16207”
#define ALT_STDOUT_BASE 0x00011000
#define ALT_STDOUT_DEV lcd

#define ALT_STDOUT “/dev/jtag_uart”
#define ALT_STDOUT_TYPE “altera_avalon_jtag_uart”
#define ALT_STDOUT_BASE 0x00011010
#define ALT_STDOUT_DEV jtag_uart

**使用lcd作为标准输出时必须注意
Reduced device drivers前面的勾不能去掉,否则LCD无响应

数据类型
“alt_types.h”中
#ifndef ALT_ASM_SRC
typedef signed char alt_8;
typedef unsigned char alt_u8;
typedef signed short alt_16;
typedef unsigned short alt_u16;
typedef signed long alt_32;
typedef unsigned long alt_u32;
typedef long long alt_64;
typedef unsigned long long alt_u64;
#endif

LED控制相关

使用在<io.h>中的IORD、IOWR
(注意是/altera/80/ip/nios2_ip/altera_nios2/HAL/inc/io.h,不是/altera/80/quartus/bin/cygwin/usr/include/io.h)
#define IORD(BASE, REGNUM)
__builtin_ldwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)))
#define IOWR(BASE, REGNUM, DATA)
__builtin_stwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)), (DATA))

altera_avalon_pio_regs.h中的总线读写
#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)
实际以巨集IORD与IOWR实现。