FPGA从零开搞————第三天(管中窥豹)
时间:10-02
整理:3721RD
点击:
上周搬家,家里的网络刚刚修好,更新耽搁了很久啊,接下来继续FPGA从零前进,走你。
上次说要看FPGA的AD采集卡实例。
在看了Verilog的基本语法后,就开始迫不及待的想看看实例怎么应用的。打开工程后傻眼了,这个project是用VHDL编写的而不是我前段时间看的Verilog啊。无奈,只好找了一本VHDL的电子书看一看,这次我是直接看的代码,遇到不认识的标识符,语法等等,就回去看电子书。所以效率非常低,这就是所谓的空中楼阁啊。(还是不建议像我一样的初学者刚开始就看两种语言,大牛除外,先把基本的设计思想,代码是怎么跑的这些搞懂,语言的话只是工具,当你了解了FPGA具体在干什么的时候,再来挑选所需语言)
在了解了每一行的代码的意思后,又回过头来看这个工程,还是看不懂(不能用学单片机、ARM的思维去学FPGA),以前跑AD在单片机或者ARM上调用一下库函数就OK,根本不理会什么时序的东西,现在发现走不通。
调整了下思维,FPGA的设计是非常模块化的感觉,那就先搞懂每个模块的用途。
这个AD片子是个50MSPS,14位8通道的一个小东西。然后大体看了下datasheet的时序图和引脚定义。大体包含了模拟输入,数字输出,时钟(由FPGA提供),数据输出时钟(用来读取采样的数据),帧数据输出时钟(也就是输出1帧1帧的数据,也就是14位),串行时钟和数据。
这时候就有点了解了,工程里先进行最顶层模块的的设计(VHDL用实体entity这么个关键词,我表示快混淆概念了啊-。-),主要是端口的说明,也就是与AD片子的接口,时钟(各种时钟)、8路数据输入等等,反正这个就对应了与AD的接口关系。
可以把实体这部分看做一个系统的大方框,主要用来定义方框与外设的接口,相当于main函数。(都是个人理解,仅供参考,欢迎指正)
接下来是结构体的定义(用来说明实体这个大方框中的东西具体怎么工作的)。
包含这么几部分:
1:信号说明
2:元器件定义
3:进程(逻辑关系说明)
4:元器件例化(感觉元器件就像定义了有个水果,这个例化具体说明这个水果是叫什么名字,苹果、桃子等等)
over,整体框架就出来了,主要是FPGA和AD的接口对应关系,还有顶层的逻辑关系(选择读取哪个通道的数据)
然后就纳闷了,这就能控制AD读取数据了?什么时候读取AD采样的值?什么时候把每一帧数据读过来?当然不够。
所以,就有了下面的步骤:
再单独写一个文件,把每个通道看做一个单独的AD元件,再写一个小框架,并把每个小框架的端口对应到大框架中的那个元件的端口。
然后再这个小框架中就可以定义逻辑电路了,对着AD时序图,比如在数据时钟上升沿采集数据等等。
从大到小,一步一步定义模块。
最后编写一个约束文件,把定义的端口,映射到FPGA管脚上。
总结下:
就像C程序中的多文件一样,main函数调用子函数,一级一级编写。
困惑:
1:类属性generic是嘛玩意,没有这个会有什么影响?
AD这个暂时看到这,主要是想了解下FPGA的工程是怎么实现具体应用的,准备回归夏宇闻的书本,和ISE的使用阶段。
最后一点,资料不要下了一大堆不看,抓住一个合适的再延伸(后来者引以为戒阿,不过有时还是控制不住,下载一大堆在那蒙灰。-。-)
上次说要看FPGA的AD采集卡实例。
在看了Verilog的基本语法后,就开始迫不及待的想看看实例怎么应用的。打开工程后傻眼了,这个project是用VHDL编写的而不是我前段时间看的Verilog啊。无奈,只好找了一本VHDL的电子书看一看,这次我是直接看的代码,遇到不认识的标识符,语法等等,就回去看电子书。所以效率非常低,这就是所谓的空中楼阁啊。(还是不建议像我一样的初学者刚开始就看两种语言,大牛除外,先把基本的设计思想,代码是怎么跑的这些搞懂,语言的话只是工具,当你了解了FPGA具体在干什么的时候,再来挑选所需语言)
在了解了每一行的代码的意思后,又回过头来看这个工程,还是看不懂(不能用学单片机、ARM的思维去学FPGA),以前跑AD在单片机或者ARM上调用一下库函数就OK,根本不理会什么时序的东西,现在发现走不通。
调整了下思维,FPGA的设计是非常模块化的感觉,那就先搞懂每个模块的用途。
这个AD片子是个50MSPS,14位8通道的一个小东西。然后大体看了下datasheet的时序图和引脚定义。大体包含了模拟输入,数字输出,时钟(由FPGA提供),数据输出时钟(用来读取采样的数据),帧数据输出时钟(也就是输出1帧1帧的数据,也就是14位),串行时钟和数据。
这时候就有点了解了,工程里先进行最顶层模块的的设计(VHDL用实体entity这么个关键词,我表示快混淆概念了啊-。-),主要是端口的说明,也就是与AD片子的接口,时钟(各种时钟)、8路数据输入等等,反正这个就对应了与AD的接口关系。
可以把实体这部分看做一个系统的大方框,主要用来定义方框与外设的接口,相当于main函数。(都是个人理解,仅供参考,欢迎指正)
接下来是结构体的定义(用来说明实体这个大方框中的东西具体怎么工作的)。
包含这么几部分:
1:信号说明
2:元器件定义
3:进程(逻辑关系说明)
4:元器件例化(感觉元器件就像定义了有个水果,这个例化具体说明这个水果是叫什么名字,苹果、桃子等等)
over,整体框架就出来了,主要是FPGA和AD的接口对应关系,还有顶层的逻辑关系(选择读取哪个通道的数据)
然后就纳闷了,这就能控制AD读取数据了?什么时候读取AD采样的值?什么时候把每一帧数据读过来?当然不够。
所以,就有了下面的步骤:
再单独写一个文件,把每个通道看做一个单独的AD元件,再写一个小框架,并把每个小框架的端口对应到大框架中的那个元件的端口。
然后再这个小框架中就可以定义逻辑电路了,对着AD时序图,比如在数据时钟上升沿采集数据等等。
从大到小,一步一步定义模块。
最后编写一个约束文件,把定义的端口,映射到FPGA管脚上。
总结下:
就像C程序中的多文件一样,main函数调用子函数,一级一级编写。
困惑:
1:类属性generic是嘛玩意,没有这个会有什么影响?
AD这个暂时看到这,主要是想了解下FPGA的工程是怎么实现具体应用的,准备回归夏宇闻的书本,和ISE的使用阶段。
最后一点,资料不要下了一大堆不看,抓住一个合适的再延伸(后来者引以为戒阿,不过有时还是控制不住,下载一大堆在那蒙灰。-。-)
小编威武
这学习经验杠杠的啊!看来我自己也得逼自己一把了
谢谢分享!支持
经验要一点一点积累出来
不知道小编硬件是哪家的?特权老师的?还是自己Diy?之前做单片机和ARM的,现在想学习FPGA,希望和你多交流,向你多学习~
硬件是公司以前做的项目留下的,都是针对具体应用的,没有买开发板,有开发板的话上手应该快一些。多多交流,共同进步^__^
好文章,深受启发。
非常不错,谢了!
小编竟然是西安的?