QUARTUS II版本:9.0
FPGA型号:EP2C8Q208
配置芯片:EPCS4
SDRAM型号: HY57V28820HCT-H
FLASH型号 :TE28F320J3
之前已经接触QUARTUS II比较长的时间了,也遇到过不少问题,有些比较简单解决后就忘了,现在把能记得起来列在前面几个。后面的是自己后续遇到的问题的集锦...
1.多模块或多进程驱动同一信号http://www.cnblogs.com/Efronc
Error (10028): Can't resolve multiple constant drivers for net "FLASH_A[7]" at led.v(32)
用Verilog描述电路时,一个信号只能在一个进程中驱动,如果在多个进程中对其驱动的话将产生如上错误。解决方法为可以另加一个信号,通过在另一个进程中监视这个信号做出相应的动作。
2.多功能管脚的设置http://www.cnblogs.com/Efronc
在用FLASH分配完管脚后编译出现如下错误:
Error: Can't place multiple pins assigned to pin location Pin_108 (IOC_X34_Y2_N0)
Info: Fitter preparation operations ending: elapsed time is 00:00:00
Error: Can't fit design in device
Error: Quartus II Fitter was unsuccessful. 2 errors, 0 warnings
Error: Quartus II Full Compilation was unsuccessful. 4 errors, 56 warnings
原因是不能分配给多功能管脚PIN_108。
这是由于PIN_108是一个多功能管脚,还有一个功能是nCEO,也是默认的功能。如果要用它当普通IO,需要提前设置一下:assignments>device>device and pin options>dual-purpose pins里面把nCEO设置成use as regular i/o就可以了。
3.CLK 连接http://www.cnblogs.com/Efronc
SOPC综合后资源占用LE只有几百,警告数量数百。http://www.cnblogs.com/Efronc
原因一般是CLK的连接有问题。CPU在没有时钟的情况下形同虚设,在综合时被综合掉,产生大量警告。
4.负载电容(load capacitance)警告http://www.cnblogs.com/Efronc
Warning: Found 8 output pins without output pin load capacitance assignment
load capacitance和IO输出结构有关的设置,用来控制波形的上升下降沿的控制,用于阻抗匹配防止产生过冲.低速电路一般不需要考虑.
消除此警告要在assignment>assignment editor>下指定负载电容。如下图所示:
以下是对此设置的英文介绍:
Specifies the capacitive load, in picofarads (pF), on output pins for each I/O standard. Note: These settings affect FPGA pins only. To specify board trace, termination, and capacitive load parameters for use with Advanced I/O Timing, use the Board Trace Model tab. Capacitive loading is ignored if applied to anything other than an output or bidirectional pin, or if Advanced I/O Timing is enabled.
5.行波时钟警告http://www.cnblogs.com/Efronc
分频计数作为了另外一个电路的时钟,这种用法叫做行波时钟。在FPGA设计中是不推荐的,所以在综合时会产生警告:
Warning: Found 2 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew.
关于FPGA时钟,多说几句。FPGA设计中一般都会使用一个主时钟,也就是晶振的时钟。时序逻辑用到的各种时钟都是通过这个主时钟分频得到的。如果一个时钟驱动的逻辑门比较多的话,为了增加它的驱动能力就需要将它设置成全局时钟。多个时钟在FPGA内部是可以同时工作的,但是使用的时候要注意时序问题。
关于全局时钟,再多说几句。23,24,27,28是EP2C8Q208的四个全局时钟管脚。他们比一般的IO管脚驱动能力更强,通常建议将时钟信号绑定在这些管脚上,以保证时钟信号的驱动质量.4个管脚是等效的,可以用不同时钟同时驱动他们,这样FPGA内部可以工作在多个时钟域下,不同电路由不同时钟来驱动.
6.仿真时存储器初始化http://www.cnblogs.com/Efronc
在使用FPGA内部的RAM时,会有一个初始化文件.mif,给RAM加上初始值或当作ROM用,因此仿真时必须把相应数据导入,首先要把mif文件转换为.hex文件或.rif文件。
在Quartus II环境下,打开mif文件,点Save As,选择Hexadecimal(Intel-Format) File(*.hex),或者点击Export,用Save as type选择RAM Initialization File (*.rif),也可能在命令行下输入:
mif2rif <mif_file> <rif_file>
打开ram模块文件,找到lpm_file或init_file,指向刚刚生成的hex文件或rif文件。
lpm_ram_dp_component.lpm_file = "path"
使用hex文件时,不需要compiler directives,使用rif文件时,需要加入USE_RIF,如下
vlog -work alter_mf altera_mf.v +define+USE_RIF=1
这样就完成了数据导入。