想必学习Altera家FPGA的小码农们都会有一个共同的困扰吧,那就是Nios II该不该学的问题。这个问题说白了,就是学Nios II到底有没有用。观点1、无用论,常常会听FPGA群里的某位前辈说道,目前市场上用Nios II做产品的几乎没有,学了压根没用;观点2、Nios II属于嵌入式软核,使用C语言代码编程,简化了系统设计的复杂度。
关于Nios II的讨论虽然有以上两种观点,但是实际上,支持观点1的人数绝对明显多于观点2的人数。在此,先暂时不表明我个人的观点,我们先来分析一下FPGA系统的常规设计结构。
FPGA系统,顾名思义,其核心是一块FPGA芯片。但是光有这么一块芯片是不可能满足系统设计的要求的。我们还需要其他子模块,他们与FPGA共同组成一个系统。常见的子模块有:电源转换模块(供电模块),下载模块,数码管,LED灯等等。我们不可能一一说全,但是我们可以大致将这些模块分为几类,至于电源模块,下载模块和其他不涉及到编程设计的模块不算在这些分类里面。
从图中,可以看到5个模块类型。一休哥与FPGA接触了1年多,所完成的FPGA项目中,也难逃出这些模块。
- 传感器模块:摄像头,AD等;
- 存储模块:SRAM、SDRAM和DDR等;
- 显示模块:VGA接口、HDMI接口、数码管和LED等,DA和蜂鸣器也属于这类;
- 通信模块:USB系列,以太网系列和串口等;
- 算法模块:信号处理类,图像处理类等。
可以说,我们学习FPGA,就是学习用FPGA来控制上述5类模块。这也是我们学习FPGA的目的,和难点所在。其中,关于存储模块的使用是非常重要的一点,因为FPGA芯片本身的内存资源十分有限,因此我们需要借助片外的存储器来完成存储操作。自然而然的,当FPGA系统的规模越大,FPGA需要实时处理和存储的数据量也就越多,存储模块的使用就显得格外重要了。
举一个简单的例子,使用VGA显示一副图片(也就是我上一个帖子中所讲的),在那个例子中,我们没有用到片外存储芯片,使用的是FPGA片内的内存资源。由于可用的资源太少,我们只显示了一副174*179的8bit图片。自然的,那么问题来了,我们想要显示更大分辨率的,颜色更丰富的图片该怎么办呢?
①使用SDRAM呀,再接一个分辨率大颜色深度高的摄像头,来一个实时传输图片数据给FPGA,由于摄像头的数据输入速率和VGA显示的数据读取速率有很大不同,需要让FPGA用SDRAM来缓存摄像头的数据,然后让VGA来读取SDRAM中缓存的数据。再给SDRAM来一个乒乓存储的操作,结果是相对完美的,解决这一问题了。
可是,大家有没有想过这一问题,上述过程的代码量是较为庞大的,而且Altera没有提供关于SDRAM的控制代码,可以说,我们需要几乎百分百的编程代码,不容丝毫马虎。所以这个工程量对于刚入门的小白来说是巨大的,目前网络上也涌现了大批SDRAM的控制代码,这些都是十分宝贵的资料,但是由于SDRAM的操作较为复杂,想完全理解SDRAM,实现SDRAM的控制,大家还需要花较长的时间刻苦学习。(题外话,一休哥以后也会讲述SDRAM的控制原理和代码哦,先提前预告下~)
②如果想暂时绕开SDRAM的控制该如何做呢。答案还是Altera。Altera虽然没有提供SDRAM控制的Verilog代码,但是在Nios II中有一个操作十分简单的SDRAM控制器IP核。因此我们可以通过Nios II来间接控制SDRAM,我个人认为,这是Nios II最具有吸引力的一个优点。
讲到这里,我也要表明我对文章开始的那个问题的个人见解了。如果你是Altera家FPGA的学习者,但是你还没有接触过Nios II,那么很遗憾,没有调查就没有发言权,你还不能发表观点;如果你学过一点Nios II,会使用PIO IP核来完成一些简单的操作,如点亮LED灯、数码管。那么也很抱歉,你还没有掌握Nios II真正的精髓所在——自定义IP核;讲真,只有当你学会了如何自定义IP核时,你才算真正了解Nios II,到了那个时候,你才算有资格,有能力说出你的有价值的观点。
学Nios II到底有没有用,这是一个个人的问题。什么叫有用? 我认为应该指的是有没有价值。这种价值不是货币,没有无法统一度量。有没有价值取决于每个人的价值观(需要通过更丰富的工作经验来提升个人的价值观)。所以…,你觉得没用就没用,我觉得有用就有用。
欢迎大家扫描下方的二维码添加关注,一休哥的个人公众号:一休哥FPGAer,QQ:932903610