FPGA助学系列—例程篇】
红外遥控信号—片上逻辑分析仪的使用
很想试一下红外遥控,拿起遥控器才发现我并不知道红外的协议,而从淘宝上获取的资料杯水车薪,互联网上的资料又泥沙俱下,各种协议纷至沓来。唉......
无奈之下,只好亲自动手使用STP一看究竟了。STP的全称叫做Signal TapII Logic Analyzer。其基本功能是使用片上的memory做存储,将FPGA内部的信号从JTAG口上发出到PC上观看。
该软件集成在Quartus中,装上了Quartus之后就会自动安装好了。
1、调用的方法是:
图1
2、打开界面如下
图2
3、基本上的数据设置和数据观察都在这里完成了,
注意左下角观察和设置界面的切换; 右上角的是下载功能,和Program是一样的; 左上角的则是运行和停止 4、设置窗口如下:
图3
这一页要多说一些了:
时钟选择 这里指逻辑分析仪的内置时钟了,还记得真正的逻辑分析仪吗?那个时钟采样率可以调节到几MHz到上GHZ,这里只可以用你FPGA里的内部时钟,需要强调的是,时钟并不是越高越好的,因为这也是消耗FPGA资源的,当你用的是Cyclone、Spartan之流时建议时钟不要超过200MHz,RAM自己考虑。如果使用的是高端的Virtex和Stratix那么可以设置到400MHz。此处是指最大时钟,如果RAM你用的多相应的要下降哦!
RAM深度 Sample Depth一栏可选,注意FPGA内部RAM资源是固定的,而你观察的信号越多则深度就越少,很好理解吧!红外观察只需要一个信号,因此选择128K深度也没有问题,但是如果还要看一个32bit计数器什么的,可能深度只能设置到4K左右了。完成编译后可以在信息栏中看到RAM资源的占用了。
设置触发条件 这里设置的是当触发条件满足时,信号会被采集和显示,用没用过逻辑分析仪的都知道,不用多说了!
增加观测信号量 这一步非常重要!(其实是废话,不加看什么)
其中的Filter是指在各种FPGA阶段里出现的信号,例如综合前、综合后、Port、PIN等等,我没细看,反正常选下面那个,然后点击List这一阶段的所有信号就会出现信号列表中了。然后点击你需要的信号选定就行。
观测信号量之进阶 如果你玩过KEIL之类的C编译器肯定记得优化等级选项吧,编译器会根据优化等级将内部信号进行优化,如果一个信号仅仅用来观测,而没有做任何其他用途时很可能被优化掉,除非你设置优化的等级很低。
这里我想说的是综合器拥有一双火眼金睛,是个非常严格的优化指导老师。你熟悉的变量在这里常常看不到,这也是很多人抱怨不好用的原因之一,但如果你了解了这个过程,那你可以很轻松的驾驭整个过程,保卫萝卜,哦不保卫消失的信号,看到任意想看的信号。
第一个方法,如果你很熟练情况下,可以告诉综合器哪些信号需要Keep,但要说的是即使这样在逼不得已的情况下这个信号也可能保不住!这个讲起来有的啰嗦了,所以我这样形容:如果你知道我也不用说,如果你不知道,我说了你也不知道,所以我不说了:)
第二个方法,直接将信号引入端口,增加一个空管脚作为你希望观测的信号;
第三个方法,增加一些冗余的逻辑,比如增加一级寄存器之类的,最终使用方法二,保证不被优化,这样做的目的是不用增加一堆的无用管脚,只需要将这些寄存器都都用上即可。
先想到这几个,各位网友如果还有大招,请赐招!
图4
差不多就说这么多了,经过这些设置,就能观测红外的数据了。来吧,看一下成果
图5
按不同的按键得到不同的波形,这下什么协议都不要了,仅凭图6这张珍贵的淘宝卖家手绘版的手稿就可以猜出编码方式进行采集显示了。来吧,一起试试!
图6
[
本帖最后由 kdy 于 2013-8-8 00:21 编辑 ]