安路SparkRoad开发板测评(3) 官方DEMO测试
[复制链接]
这次评测活动随TD软件提供了一些Demo例子,简单观摩一下。
前5个demo是和LED相关的,算是最入门级的吧。其中稍微复杂的就是第4个,7段数码管显示驱动的。因为除了点亮之外,还要用到译码逻辑、动态显示切换技术。来看一下例子怎么做的:
输入只有一个:时钟;输出是4位数码管的8个笔段端和4个公共端的驱动信号。顶层模块定义了一个计数器cnt用于0.1秒的定时;sm_bit1_num, sm_bit2_num, sm_bit3_num和sm_bit4_num分别构成10进制计数器,例如
cnt_w用于动态显示的定时,sm_bit_reg和sm_seg_num分别是动态显示驱动的锁存。具体作用可以从下面代码看出来:
也就是说,cnt_w寄存器的bit17,bit16决定点亮四位数码管的哪一位(共阳或共阴数码管的特点决定只能亮一位),sm_bit_reg锁存驱动输出:它只有1位是0,其余三位是1,确定要亮的数码管。sm_seg_sum 是此刻要显示的数字,但它是二进制编码的,还没有对应到笔段,还需要一个译码器,在这里:
经过综合以后,TD给出了逻辑的组成:
重点:包含了72个D触发器,也就是寄存器。看看代码中reg的定义,一共是25+4*4+18+4+8=71个(addr这个定义了没有用,sm_seg_reg是组合逻辑没有寄存器),还多用了一个?注意到还有一个rst_n模块,里面有4个寄存器,因此总共是75个,TD综合后少了3个,估计是优化掉了。在log里面看不到更具体的信息,是哪些优化扔掉了。
Gate级的资源占用报告:
最关键的指标是LE的占用。FPGA的容量是已LE个数为参照的。在这个简单demo中,虽然用了72个寄存器(这里看来最后优化到68个),但因为组合逻辑占用更多,一共消耗了163了LE资源,不过这对于EG4S20还不到1%的占用而已。
下面看一下 uart_loopback这个demo. 顾名思义,是实现一个UART收发逻辑,将接收到的字符转发出去。这里就不贴代码了,因为例子用了模块层次结构,不妨用TD软件的Schematic Viewer来看一下效果。
TD带的图形化查看工具,简单的还可以看看,并且,有的线路显示已经重叠在一起了。逻辑再稍微多一点,比如双击my_uart_rx查看,就满屏的线和符号,难以看出来什么了。
粗略看一下代码,大概能推断 speed_setting 这个模块(用了两个实例)是从高速时钟产生波特率参考时钟的,它还需要my_uart_rx或my_uart_tx给一个bps_start“开始”信号决定第一个位的参考时间。my_uart_rx检测到有通信,才启动接收过程,收到一字节数据后通知my_uart_tx进行一次发送。
测试一下它的工作情况:先看I/O分配
我以为会用板上的USB串口,但根据管脚查电路图,并不是。RX/TX 是连到扩展I/O排针 RP_IO27和RP_IO25的。我就单独用一个FT232的串口小板连上来测试喽,顺便接示波器查看。当然也可以改一下工程里面的引脚约束,使用SparkRoad板载的CP2102 USB虚拟串口。
连好后在PC上打开串口终端,设置9600 baud, 8-N-1格式,键入字符,的确可以看到回显。用示波器来抓一下波形:
此时发送接受的字符是U, ASCII是0x55,即二进制01010101. 注意到UART是LSB在前,并且要加上START位和STOP位,数据线上按顺序是0101010101. 通过测量脉冲宽度可以算出波特率。黄色线是USB串口发出的信号,青色线是FPGA回送的。示波器测量结果说明FPGA发出的波特率偏低了,大约是9200.
虽然通信没有错(UART有一定容忍度,况且这里没有持续发送),时钟设置是有问题的。我注意到代码中输入时钟名称是ext_clk_25m,即需要25MHz的时钟,但是SparkRoad上只有一只24MHz的有源晶振,的确这里就拿24MHz来当25MHz用了(Demo没有考虑到板子实际情况啊),换算一下正好是这样的误差。
第7个demo叫做uart_rd_ram的在uart_loopback基础上又改了一点,将收到的字符送到ram_rw_control,似乎是要写进RAM再读出来的意思。不深究了,看看别的好玩的。
第8个demo叫VGA_Demo, 是利用了SparkRoad上的VGA输出口了。从代码量上看,这仍是一个比较简单的逻辑,包含三个模块:时钟,显示数据,显示输出。RGB三个颜色分量的数据是直接给FPGA外部的芯片的,FPGA再给几个控制信号就可以了。
显示的数据是由x,y坐标通过算式拼出来的,可以做简单的条纹,也可以做出了看似规律不明显的图案。
还有个摄像头相关的demo我没配件就不测试了。SDRAM的demo以后再研究。
第12个demo叫做Game,是这里面最复杂的一个。它实现了一个简单的游戏机!
游戏机的核心是一个CPU(没有GPU了),也可以把它作为一个小CPU的范例来学习。
看起来这个游戏机CPU只有A, B, C, D四个8-bit寄存器,有ALU可以运算,但是指令集很小。Demo里面除了代码有中文注释外,没有提供任何文档。
游戏的内容,就是这个CPU执行的程序,是二进制代码供综合到ROM模块中去的,因此也无从知道怎么编写游戏。尽管如此,看看这个demo代码也能受点启发的。
小结:SparkRoad所附的demo和板上资源基本对应,比较简单,容易看懂,介绍也简单。作为演示可以,不够展现这个板子的强大,不丰富。话说回来,要精通FPGA也不能靠几个Demo来的是不是,要搞得多还得用的人多,比如社区项目多那样。
|