使用modelsin对quartus II仿真时遇到问题的解决方法

使用modelsin对quartus II仿真时遇到问题的解决方法
使用modelsin对quartus II仿真时遇到问题的解决方法

1、FFT core可以设置成两种不同的引擎结构,四输出(Quad——output)和单输出(signal output),对于要求转换时间尽量小的应用,四输出的是最佳的结构,对于要求资源尽量小的应用,单输出的引擎结构比较合适,为了增加吞吐量,可以采用并行引擎结构。

FFT core支持的数据流:

FFT core支持三种I/O数据流结构,连续(streaming)、缓冲突发(buffered burst)、突发(burst)。连续I/o数据流允许处理连续输入数据,输出连续复数数据流,而不中断输入和输出数据;缓冲突发结构于连续相比,需要更少的存储资源,但是这是以减少平均吞吐量为代价的;突发数据流的操作于缓冲突发的方法基本上一致,但是突发方式需要更少的存储资源,这也是以降低吞吐量为代价的、。2、用modelsim对fft模块进行仿真的时候出现此类问题的解决方法:

** Error: (vsim-3033) E:/Quartus II projects/fft_1024_t/fft_1024_ip.v(92): Instantiation of 'asj_fft_sglstream_fft_130' failed. The design unit was not found.

出现这种情况,

第一可能是quartus破解不完整,导致有些库已经器件不能够使用,重新破解,在破解的时候有时候可能有好几个网卡,则选择前两个网卡号对license.dat进行破解。

在完整破解的时候,在仿真的时候需要加进去.vo文件以及测试文件,顶层文件,同时将生成fft核的时候产生.hex,.txt文件,在进行仿真的时候需要将其放到所建的modelsim工程文件夹下面。

第二种情况就是在不同版本的quartus上建立了ip核,比如说在9.0上建立的文件,在8.0上进行综合编译,就会出现这样的问题。解决方法就是在现有的版本上重新建一个fft核之后进行仿真,应该就可以解决问题了。

3、在高版本的quartus中打开低版本的quartus工程的时候,存储原来quartus 工程的路径不要包含汉字,否则会造成打不开文件的情况。

4、在modelsim中对rom核进行仿真的时候可能会出现这样的问题:

#warning:(vsim—3524)【FOFIR】—Failed to open file’simulation_ip.hex’for reading. #No such file for directory.(error=ENOENT)

出现这样的情况是因为在quartus 中建立的是.mif的文件,但是在modelsim中

进行仿真的时候识别的是.hex文件,不会识别.mif文件,所以需要首先将他们转换成.hex格式的文件,然后将其拷到modelsim工程下面。

同时,缺少一个文件,convert_hex2ver.dll,所以需要将其加到modelsim下的win32目录中,同时在modelsim中找到modelsim.ini文件,找到List of dynamically loaded objects for Verilog PLI applications;然后在下面一行中加上

Veriuser =D:\modelsim\program\win32\convert_hex2ver.dll(convert_hex2ver.dll 的保存路径)。

这样处理之后就可以进行modelsim的仿真了。

5、在verilog中进行编译的时候可能会出现这样的警告:

Warning (10230): Verilog HDL assignment warning at mult.v(98): truncated value with size 32 to match size of target (15)。

这是因为在前面的语句中没有指定出错的这条语句的位宽,所以会导致出现这样的错误,按照定义的位宽的长度指定所需要变量的位宽,这样的警告就会消失。

6、verilog中如何进行截位:

在quartus中,做完fft或者ifft操作之后,会使得结果的位宽比输入数据的位宽扩大一倍,在进行处理时,会造成fpga的资源的大量消耗,为了避免这个问题,就需要对操作完的数据进行截位处理,处理方法如下:

首先在matlab中得到操作完成之后的复数的实部和虚部的绝对值的最大两个数,变成二进制之后看其位宽,对于无符号数,这个数如果超过了65535,则用这个数除以2^n,选择合适的n值,使得结果在0—65535之间,然后需要截位的部分就是(m:n),m为最大的这个值的位宽。具体的verliog语言的书写方式为:Datin_width=16,Datout_width=31;

Assign datout_real[Datin_width-1]=source_real[Datout_width-1];

assign datout_real[Datin_width-2:0]=source_real[29:15];

assign datout_imag[Datin_width-1]=source_imag[Datout_width-1];

assign datout_imag[Datin_width-2:0]=source_imag[29:15];

如上例中,输入数据位16位,进行fft运算之后的结果最大的值是29位的,所以从15—29进行截位操作。

6、verilog语言中模块之间是并行的,但是在always模块中逻辑是按照指定的顺

序执行的。Initial块只执行一次,而always块不断的反复执行,直到整个仿真过程的结束.

7、interger型为整形寄存器,存储有符号的整形数。

相关主题
相关文档
最新文档