最近调试了一下FPGA程序中一个数字电位器模块,FPGA向数字电位器写数据,电位器输出一定范围的电压,以替换PCB板子上面的可调电阻,实现软件调节电位。本来我主要做DSP的,但是一般我们的板子上都是DSP+FPGA,所以需要能看懂FPGA代码,与FPGA进行通信,有时还需要自己修改FPGA代码,因此也不得不学习一些FPGA编程调试的知识。
用过FPGA的一般都知道Quartus软件仿真和硬件仿真,软件仿真可以使用波形仿真,包括时序和功能仿真,也可以使用Modesim编写激励文件进行仿真;硬件仿真的话就要用到SignalTap II Logical Analyzer内部逻辑分析仪,但是使用In-System Memory内部存储器的却很少,但是我们进行模块调试的时候却很有用。
首还是要将FPGA工程编译好,要调试某一个某块的时候,模块的符号添加到顶层原理图文件,将模块的一般输入先接好,比如时钟Clk、复位nRst,将其他的输入如使能en、数据datain、地址addr、控制信号分别接到不同的内部存储器模块,然后将所有要观察的信号添加到SignalTap中去,这样仿真的时候可以实时改变内部存储器,来改变模块的输入,通过内逻观察是否正确,以达到硬件调试的目的。
创建内部存储器,在Quartus中双击原理图空白位置或通过菜单打开MegaWizard Plug-In Manager向导,libraries中选择安装文件下megafunctions -> gates -> lmp_constant,设置模块名字、数据位数,添加信号名字来创建一个新的存储器模块。如果在工程中使用了不止一个lmp_constant需要设置信号名字以区分不同的信号,方便SignalT