您的位置 首页 汽车

零根底学FPGA (二十一)SOPC进阶,自定义AD转化IP核规划全流程

今天带大家来设计一个自定义的IP核,我们从最基本的做起,包括datasheet 的理解,设计的整体框架,AD转换代码的编写,仿真,Avalon-MM总线接口的编写,硬件系统还是基于上次的硬件系统,

  今日带咱们来规划一个自界说的IP核,咱们从最基本的做起,包含datasheet 的了解,规划的全体结构,AD转化代码的编写,仿真,Avalon-MM总线接口的编写,硬件体系仍是依据前次的硬件体系,不过咱们不再用altera给咱们供给的IP核了,咱们要自己做一个,有时分咱们找不到他们供给的IP核,或许有些IP核是收费的,这个时分咱们就能够自己来编写自己的IP,尽管没有官方的那么规范,可是用来做一些试验仍是没什么问题的。

  这次试验我用的是本来我那块板子,由于那块板子上有AD转化芯片,而咱们前次树立的硬件体系是依据cyclone IV的硬件体系,可是这块开发板上没有AD芯片,咱们就不做软件下载的试验了,其实只要在咱们编写AD转化HDL代码的时分测验成功,那么咱们软件调试部分就应该没什么问题了,有条件的同学能够自己做这一部分。

  一、有理可依

  一切编写的代码有必要都得有理可依,要不然直接看代码那得有多苦楚啊,榜首部分先来带咱们了解一下datasheet上的东西

  咱们要操作的AD转化芯片TLC549的顶层视图

  

360桌面截图20150131201817.jpg

 

  能够看到这个芯片应该不太难操作,左面是模拟信号输入端,由于是模数转化,这边咱们就暂时能够不论,看右边有时钟信号,数字信号输出端和片选端,那么咱们需求操控的,无非便是时钟信号和片选信号了

  还有什么器材描绘什么的咱们能够自己取去看,咱们首要去看时序图

  

360桌面截图20150131203143.jpg

 

  大体上来看一下,,首先是ADC的作业时钟,它在片选信号为低电平的时分有用,接连8个周期用来将转化后的数字信号送到数据总线上,8个时钟周期往后便是转化周期,用来对模拟信号进行转化,在这期间,片选信号要拉高,关于片选信号,开端的时分有一个从高电平到低电平的跳变,然后等候一个树立时刻TSU,树立时刻完毕后ADC作业时钟开端作业,8个时钟周期后,片选拉高开端模数转化,之后片选拉低,将转化后的数据送出去。

  细节部分,能够看到当片选拉低后,咱们能够界说一个使能信号en来敞开作业时钟,从片选拉低到作业时钟有用需求一个树立时刻1.4us,这个数据鄙人面的表格中能够查到,之后是8个数据锁存周期,每一个时钟的凹凸电平延时不能小于404ns,详细也是表格中找,然后是转化周期,时刻是17us,至于转化期间的作业时钟是什么咱们能够不用关怀。

  再来看一下它的注释内容,大体意思是说转化周期需求一个17us的延时,注释B大体意思是说,当片选拉低之后,数据的第8位就主动的放到了数据总线上,剩余的7位数据在第7个时钟下降沿到来的时分就现已锁存了。

  二、编程思路

  这段时刻跟着他们在上课,听李老师讲课的时分,李老师不会将很多的时刻放到代码的编写上,而是有时分花一整节课的时刻来协助学生来构建编程的思路,包含体系架构,状况搬运图等,有了这些都东西作为衬托,咱们的代码编写就能够手到擒来,起到事半功倍的作用,假如咱们不做好事前的预备规划作业,没有一个体系的架构在咱们脑海里,上来就去写代码,就会发现越写问题越多,思路不通,处理不妥等问题,所以小墨同学回来之后也用word做了这么个状况搬运图,这个试验不是很难,状况机也没那么杂乱,便是期望起到一个抛砖引玉的进程,经过一个小小的实例,告知咱们今后在拿到一个问题后改怎样下手。尽管画的不怎样样~仍是能够看得哈~

  

360桌面截图20150201101853.jpg

 

  理一下编程思路吧,从datasheet里边咱们知道。咱们要做好这几个延时,即预备转化的延时1.4us,17us的转化延时,和404ns的ADC作业时钟凹凸电平延时等。状况机部分选用两段式状况机。将组合逻辑与时序逻辑分隔,选用独热编码。依照状况搬运图构思好状况机的编程思路。数据处理部分,为了确保数据的安稳性,能够选用边缘脉冲检测法检测ADC作业时钟的上升沿,在每一个上升沿将转化后的数据一位一位锁存,由于数据是串行输入,还要用到串并转化的思维,这些编程办法前面都现已介绍过,就不逐个讲解了。

  代码风格部分,个人感觉这一套代码比起曾经有了一些前进,至少看起来思路清晰,注释合理,数据处理恰当,语法直白,没有用到一些很别扭的语法等。详细还需求广大读者自己去领会,也期望你们能够喜爱~

  代码部分就不逐个讲解了,源代码会附在文章后边,咱们能够自行消化

  三、仿真与验证

  

360桌面截图20150201104725.jpg

 

  上面是前仿真的进程,从波形来看和咱们的规划符合,用标尺量一下,延时参数也和咱们规划的共同

  按理说咱们下一步需求进行时序束缚部分,可是咱们的这个规划是us级的,即便不做时序束缚也是能够的,可是究竟我规划的是一个IP核,为了安稳起见仍是做一下时序束缚比较好。说实话,时序束缚部分,个人感觉是一门巨大上的学识,变化无常,有些都是经验值,你问一个工程师为什么是这样束缚,有时分或许他也答不上来。之前也触摸过静态时序剖析的常识,可是一向不敢写,感觉仍是学的不怎样样吧,想回去今后学内存这方面的时分再去好好研究一下它~

  下面是后仿真的波形图

  

360桌面截图20150201105459.jpg

 

  能够看到,波形跟咱们的规划符合,也没有呈现什么不合理的规划什么的,能够下板验证了

  

360桌面截图20150201112110.jpg

 

  能够看到,当咱们扭动滑动变阻器的时分,相应的模拟量被转化成数字量并在数码管上显现了

  四、Avalon-MM总线接口规划

  咱们知道,咱们规划的这个IP核是要挂到Avalon-MM总线上的,作为一个从机,总线需求经过片选信号来拜访总线上挂的这些IP,因而,咱们也需求给咱们的IP规划一个和总线通讯的接口

  

360桌面截图20150201112634.jpg

 

  咱们规划AD转化的IP核的片选信号低电平有用,当片选信号有用的时分,假如再来一个读信号,那么,数据就会被总线读走,送至CPU

  

360桌面截图20150201112833.jpg

 

  五、自界说IP

  好了,下面咱们就能够来界说咱们自己的IP了

  先将咱们方才规划好的AD转化的.V文件复制到咱们硬件体系的目录中,并养成一个好的习气,新建一个文件夹,并命名为IP,今后咱们规划的IP都能够放到里边

  

360桌面截图20150201113109.jpg

 

  翻开咱们之前硬件体系的sopc builder,双击左上角的NEW component ,在HDL file一栏中增加咱们的adc.v文件,

  

360桌面截图20150201113557.jpg

 

  在signal一栏中,依据端口的类型装备端口,时钟复位信号不用说,其间咱们的与总线接口部分的端口归于总线的从机端口,咱们需求把它界说为avalon_slave_0端口类型,信号类型设置为低电平片选,低电平读就好,其他端口设置为conduit类型,信号类型设置为export,由于咱们是用来输出到外部器材的端口

  

360桌面截图20150201113703.jpg

 

  在接口一栏中,咱们能够设置一些相关参数,一般为默许就好,为了咱们数据的安稳性,咱们能够把读延时周期设置为4个,确保它有满足的时刻去处理数据

  

360桌面截图20150201114206.jpg

 

  然后点击finish,双击咱们生成的IP核将它增加到体系工程中即可,然后从头生成硬件体系

  六、硬件体系生成

  将生成的新的硬件体系的例化接口声明好,这样在咱们的规划顶层又多了这样一个模块,依照常规剖析归纳,时序束缚,分配管脚,这样咱们的硬件体系就规划好了

  

360桌面截图20150201115046.jpg

 

  七、软件部分

  由于我的硬件体系上没有AD芯片,这儿就只简单说一下软件代码,不做下板调试了

  软件部分只讲一下主函数部分,看下图

  

360桌面截图20150201121233.jpg

 

  代码很简单,便是每隔一段时刻将收集到的值在窗口打印,不过有个问题需求解释一下,有人会问,咱们在自界说IP的时分不是界说了片选端和读信号么,为什么咱们没有对它进行操作就能够读数据了呢?

  其实咱们是不需求对咱们的外设进行片选或许读写使能的,由于咱们的avalon-MM总线一次只能拜访一个从机,咱们给出了咱们AD转化的IP的地址,就默许片选了这个模块了,又由于咱们调用了IO操作的读函数,在界说信号的时分咱们界说的是低电平,这样其实便是总线默许帮咱们选好了,咱们只需求给它一个地址,那么数据就会主动的传到总线上去。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/116273.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部