赞
踩
前言:
会让你选择使用哪一个.V文件,确认后会自动生成端口,并在文件夹里面生成一个.m文件。对了,我是用VERILOG写的,要求里面不能有大写字母和某些关键字,不然会报错。(虽然VIVADO能编译通过)
4.先写了一个很简单的代码实验一下,已经成功输出波形。输入只有一个触发信号,输出了一个计数器和一个固定数,我理解的是黄色的那个IN,OUT端口相当于AD和DA,把输入转换成数字信号送给FPGA,再把输出转换成模拟信号显示在示波器上面。
输出波形如下图:
5.专门说一下时钟的问题
simulink的时钟是在system generator里面设置的,导入的balck box没有时钟引脚,但是导入的信号信号必须成对出现才能识别,所以在.V文件里面要加一个时钟的使能引脚,这样在导入的时候就不会把时钟引脚识别成信号引脚了。
6.如果在主程序内又调用了其它.v文件,则需要人为修改生成的**_config.m文件。
7.好像MATLAB里面不能使用下降沿,我的奇分频模块用了上升沿和下降沿分别计数,但是只出来了上升沿的变化,下降沿好像没有生效。
8.每次更改了主程序的.V文件后,好像必须重新生成_config.m文件,不然就会报错?(不需要,是我文件名写错了)
小结:
就目前学习情况来看,个人觉得simulink和testbench的区别主要以下几点:
以上都是个人观点,simulink和testbench我都属于新手,有不同看法或者更方便用法的欢迎交流。
2022 02 10:今天才知道原来testbench仿真时对有些输出控制信号不用写逻辑代码,可以通过查看仿真结果,在出错的时间点直接写控制信号。比如我的仿真卡死在5865010ns处,查到原因是spi返回状态不对,可以直接用以下方式给输入信号赋值。
//----FLASH工作卡死在RFLAG_STA---// +503650//spi_status[7] == 'b1时跳下一状态
initial
begin
#5865010 io_n25_sdio_reg <= 4'hf;
#60 io_n25_sdio_reg <= 4'hf;
#60 io_n25_sdio_reg <= 4'hf;
#240 io_n25_sdio_reg <= 4'hf;
#60 io_n25_sdio_reg <= 4'hf;
end
不用我用了之后,发现这样做的好处是对有些复杂的模块不需要了解其功能,只需要知道他为什么出错,就可以跳过这一段。但是也存在一些不好的地方:
1.如果有些问题是循环出现的,比如说是状态机卡死在某个状态,有可能会不断出现,就必须重复写很多段这个代码
2.就是主程序代码如果有改动,有可能会导致出错的时间点变了,又必须重新去改时间。
如果是在testbench里面用逻辑代码实现,就不会有这些问题。所以还是看实际情况使用吧。
2022.07.08
今天用simulink仿真时碰到一个问题,在用DDS Compiler 6.0这个IP核时,如果用固定频率仿真就没问题,如果使用里面的可变频率输入时就会出错。
开始一直以为是IP核有问题,版本不对或者什么的,后来发现是这个频率输入端口的问题,他要求必须是32位定点数,我如果
把这个NCO送其它数据格式就出现如下提示:
Input port 's_axis_config_tdata_pinc' is expected to be UFix_32_32, but is Bool
Error occurred during "Rate and Type Error Checking".
如果我发送定点数,就直接报错什么IP核调用失败。
报错如下:
ERROR: [USF-XSim-62] 'elaborate' step failed with error(s). Please check the Tcl console output or 'C:/Users/lij2/AppData/Local/Temp/xlsim62c7c60e/hdl_netlist/xelab.sim/sim_1/behav/xsim/elaborate.log' file for more information. Please refer to 'C:/Users/lij2/AppData/Local/Temp/xlsim62c7c60e/vivado.log' for more details.
去log文件里面查出来是,还没找到原因。
ERROR: [VRFC 10-147] xbip_pipe_v3_0_5.xbip_pipe_v3_0_5_viv_comp failed to restore
ERROR: [VRFC 10-213] Registering Dependencies Error: The primary unit 'xbip_pipe_v3_0_5_viv_comp' could not be found during restore
--------------------------------------------------------------分割线------------------------------------------------------------------------------------
1)这个问题在别人电脑上没有出现,应该还是simulink设置的原因。
2)把这个编译成IP核后,在VIVADO上仿真时,也报错了,感觉 和MATLAB报错是一样的。
不过VIVADO里面有解决办法,这里直接引用别人的文章
结果按照这个设置后能进仿真界面了,但是仿真是报致命警告
ERROR: [Simulator 45-1] A fatal run-time error was detected. Simulation cannot continue.
--------------------------------------------------------------分割线------------------------------------------------------------------------------------
没办法,没找到原因,把DDS Compiler 6.0这个IP核改成固定频率了,然后生成IP核,能够在VIVADO里面正常运行。又遇到一个新的问题,就是想在一个自定义IP核(IP1)里面使用MATLAB生成的这个IP核(IP2),但是每次重新打开工程时都会找不到这个IP核,在网上查了一个方法,https://blog.csdn.net/weixin_42553916/article/details/121137954,不过照着做了还是没有解决,个人觉得是因为编辑自定义IP1时没有把IP2的目录正确导入。然后解决办法是新建一个工程,把IP1和IP2弄在一起,然后再生成一个新的IP3,这样在其它工 程里面调用IP3,就不然出现IP2找不到的问题了。
PS:在设置IP端口时需要手动设置CLK和RESET端口参数,不然VIVADO不能自动识别,把CLK连接到这个端口上就会报错。
2023.11.09
Matlab在编译生成IP时,同时会生成一个ZIP的压缩包,在VIVADO里面添加IP核时,直接添加这个ZIP文件就可以了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。