技术论坛

  • FPGA

    Xilinx大学计划官方FPGA开发板(DIGILENT全球唯一原厂) & Pmods积木式传感器

    发帖数

    274
    热门板卡官方约束文件(.xdc)汇总
    Digilent板卡的约束文件及例程其实都可以在github.com/Digilent下载,但常常有小伙伴表示不知道在哪里下载。这里就把热门板卡Basys3,Nexys4DDR,Zybo,Arty,Pynq的约束文件汇总一下,方便大家使用。
    发布于 06-16
  • 开源微控制器(LabVIEW支持)

    树莓派(Raspberry Pi)、BeagleBone Black、chipKIT

    发帖数

    40
    LabVIEW+树莓派:超声波测距模块
    今天讲一款Digilent的超声波测距模块:PmodMAXSONAR。(这个模块使用了MaxBotix®LV-MaxSonar®-EZ1™的单换能器超声波测距仪。用户可以测量6-225英寸范围内的物体距离,精度为1英寸。距离数据可通过多种方式输出,包括UART,PWM和模拟信号。)这里只讲如何通过Linx的UART函数来接收超声波模块回传的数据并解析数据。模块资料地址:htt://www.digilent.com.cn/roducts/roduct-modmaxsonar.html上图是该模块的资料,从图中可以得到该模块每次输出5个字节的串口数据包,格式为:第1个字节(帧头):R第2-4个字节(数据帧):3个字节的距离数据第5个字节(帧尾):回车符(0D,\r)所以我们可以大致使用以下(下图)思路编程:(以下代码仅供参考,实际应用另加调试。)如上图所示:1.使用UARTOen.vi打开串口,默认设置为channel0;波特率9600...树莓派刚好也是这样的参数设置,所以不额外连线(如果是Arduino2560,则从channnel1开始)。2.通过条件结构判断是否出错,出错就重新配置串口,提高容错率。3.以比模块发送数据快的速率去读串口缓冲区,使用UARTGetBytesAvailable.vi来获取树莓派串口缓冲区数据的字节总数,连接至UARTRead.vi,以此达到缓冲区有多少字节的数据,就读取多少字节的数据的效果,这个方法在上位机编程中也经常用到。(也可以延时相对长一点的时间,每次读取几十个字节的数据,再去解析)4.由于这里树莓派对串口缓冲区数据的处理速率比模块的数据发送速率快,所以当串口缓冲区没有数据时,或者串口数据丢包,程序解析出来的数据就为“0”,数据会非常不稳定(对实际应用影响会很大),所以使用反馈节点(作用相当于移位寄存器),把每次有效的数据保存至下一次,如果串口还没有收到下一次的数据,或者发生数据丢包,缓冲区字节数小于数据包的字节数“5”,则继续使用反馈节点保存的上一次的有效数据。这样能有效保证数据的稳定。5.最后使用十进制字符串至数值转换函数,再将数值乘以2.54(1英寸=2.54cm),得到以厘米为单位的距离数据。上图为接线示意图,由于该模块是自动连续运行进行测量的,所以TX引脚源源不断的向外发送数据,所以只需将该模块的TX引脚,接到树莓派的RX引脚,再加上两根电源线搞定。以下为实物接线图,非常简单。觉得不错的小伙伴可以关注微信公众号“李比希LabVIEW工作室”哦!
    发布于 05-31
  • 口袋仪器

    Analog Discovery 2、Analog Discovery、Digital Discovery、Electronics Explorer

    发帖数

    42
    【DIGILENT官方资料】OpenScope MZ 官方入门指导手册
    DIGILENTOenScoeMZ是一款便携式多功能可编程仪器模块,可与最新推出的WaveFrormsLive搭配使用。【官方入门指导教程】请见附件。有需要的用户请自取。【官方视频版快速入门教程】请点击:htt://www.digilent.com.cn/studyinfo/62.html
    发布于 06-18

创客圈

  • 创客小组(项目集散地)

    这里不仅有灵感与创意,更有实践、激情、与同道。创者无畏!

    发帖数

    22
    基于Basys3的2048小游戏
    首先十分感谢Digilent论坛提供的这次机会,我跟大家分享的是我设计的一款小游戏:基于Basys3的2048小游戏。游戏功能:游戏界面由4×4的16个方格组成,每个方格中可以存放一个数字。玩家通过操纵Basys3开发板的上下左右四个方向键和中央的reset键,控制方格中的数字移动。界面由VGA和Pmod接口oled两种方式显示。游戏成功时显示笑脸,失败时显示骷髅。游戏过程中,玩家每按动一次方向键,所有数字按照这个方向移动一次,该方向上相邻相同的数字合并为原来的2倍,并在反方向随机生成一个新的数字。玩家目标是在游戏中拼出2048或更高的数字,即为游戏成功。DIY动手指南:Ste1:材料准备硬件:Basys3开发板VGA连接线以及VGA显示器(可选)sh1106驱动的oled显示屏一块软件:Vivado2016.2Ste2:系统框架系统主要由以下几个模块构成,游戏主状态机、游戏数据寄存器{S16}、移动模块move、随机产生模块gen、随机数生成器ran、VGA驱动模块和oled驱动模块。Ste3:程序设计接下来分模块进行分析。1、按键去抖对每个按键设计了一个32位长的FIFO,按键值从低位进入直至高位溢出。每过10ms,FIFO被完全刷新一次,只有当32位为FFFFFFFFh时认为输入为1,00000000h时认为输入为0。2、游戏数据寄存器用4×4=16个4bit寄存器,存放16个格子中的数据,记为{S16},以【log2对数】形式存放。即如果格子中是512,则存放9;如果格子中是128,则存放7。特例是0用0来存放。这种存放的特点是,可以节约寄存器数量,而且原本的加法128+128=256可以用加1来表示:7+1=8。寄存器位置定义如下:3、游戏主状态机游戏主状态机中,主要操纵数据寄存器{S16}的数值,通过对这个寄存器中数值的改变来实现游戏的进行。状态机分为4个状态:检测按键+移动,产生随机数,游戏状态检测,游戏失败死循环。其中游戏状态检测时,检查当前游戏是否已经结束或成功,如果成功,游戏不中断,玩家可以继续下去,如果已经结束,则跳入游戏失败的死循环中,结束游戏。4、移动逻辑组合电路本游戏有4种移动方式,即上下左右,每次移动4条线,但本质都是相同的,只需要一个模块即可完成。如下图所示move(i3,i2,i1,i0,o3,o2,o1,o0)我们默认向右移动。(为什么呢?因为当我们调用这个模块时,可以以各种方向调用:如果向右移动,则调用move(15,14,13,12)向右,如果向左移动,则调用move(12,13,14,15)向右即可,还可以调用move{15,11,7,3}向下,调用move{1,5,9,13}向上等等。)那么向右移动时,用f3~f0判断这四位是否为空,通过对f3~f0的16种情况的mux来决定输出的值,如果有相同则合并后输出。(其实这个模块就是一个大mux)例如,下图所示,左图右移后,变为右图。再例如:2,2,4,8右移后变为0,4,4,8,再右移变为0,0,8,8再右移变为0,0,0,165、随机数生成器和随机产生模块随机数产生器为随机产生模块gen服务。随机数生成器产生3组随机数,分别为8bit,12bit和16bit。分别对应2空格、3空格和4空格的情况。例如,如果右移后的图片如下图所示,那么黄色格子里的2就是在最左列3空格情况下随机产生的一个位置。我们还是默认向右移动,那么最左边的四个格子(15,11,7,3)即可交给gen,在空白出产生一个随机位置的“2”。这里需要注意的是,2048游戏中规定必须是“有效移动”后才产生一个数字,以杜绝有投机的玩家一直按同一个方向键可以作弊的情况。这一逻辑只需要对上一步中move前后做一下对比即可。6、VGA显示模块640×480分辨率,25MHz的时钟信号。其中扫描时,将VGA坐标的后两位[1:0]舍去,即可将640×480像素变为160×120的色块。(注:源码中的VGA画图一段和oled画图一段看上去很复杂,其实是画点的方式比较奇怪,两种画法都是先将132x64的点阵水平划分为8条,每条8行,再以每列为1个byte的方式画出来。。。那么为什么要这么复杂呢?因为oled的sh1106驱动就是这么要求的,我先做了oled,后面vga就直接引用了~)Ste4:演示见视频~
    发布于 03-07
  • 竞赛 & 活动

    DIGILENT全可编程创新创业设计大赛(DDC)、江苏省虚拟仪器竞赛、极客DIY限时挑战等

    发帖数

    15
    Zynq-7000 linaro怎么修改系统的静态IP
    Zynq-7000板跑的的是Linaro案例的linaro,一直修改不了静态IP,求大神解答
    发布于 06-05
  • 工科街(校园话题区)

    一条纯粹属于在校工科生的话题街。尽情释放内心的小怪兽,海侃校园内外,闲聊天南地北

    发帖数

    22
    知乎问答 | 学习FPGA将来的出路在哪里?
    来源:知乎答主:秦冕、Evan172原提问如题,已经初步了解了一下,但由于没有接触到比较正式的项目,比较迷糊一点,如果可能的话,请举例说明...❖~答主:秦冕~自己也只是即将毕业的学生,简单说一下自己了解的情况。希望能和大家多多交流。01各大军工研究所以及部分科研机构(14所,29所,航天所,天文台等)。这部分可以说是最对口的,因为这些单位大量应用FPGA,工作环境不予置评;02做仪器的相关公司(41所,泰克),这个也是非常对口,高速信号发生器、频谱仪、示波器都需要FPGA直接实现,本身仪器也就是采集预处理系统,FPGA应用最适合的地方;03做ASIC逻辑,或者叫做前端,这个是就业市场最大的,上海这边有AMD,英伟达,高通,海思,展讯等等众多IC厂商,ASIC逻辑和做FPGA基本上一样;04做相关算法,FPGA只是实现工具,应用在上面的算法才是关键,应用多的算法领域有通信相关的(射频到基带),图像,通用信号处理等。在大多公司中都是有专门负责算法的部门,包括通信,数据通信,IC等。当然做算法要比做逻辑门槛高;05这几年比较新的硬件加速领域,主要应用面对数据中心,包括网络,搜索等领域,国内少数大公司在做,国外已经有一些新兴的小公司在做这方面的研究了。Xilinx和Altera也都在推这方面的市场,感觉FPGA的可编程以及低功耗(相对)的特点,这方面将来应该有很不错的发展。06众多中小型公司做的嵌入式系统;07如果接触硬件多的话也可以走硬件工程师方向,这就是另外一条路了。有什么不对的地方还请指正。❖~答主:Evan172~01在国内FPGA最大的应用市场还是通信类,几大厂商的重要收入来源还是华为、中兴、阿朗、烽火等,基本上可以直接呼叫原厂AE上门支持那种。算法类(如各种FIR)、接口类(如CPRI、Interlaken、XAUI、PCIE、GE、SRIO等),其它还有gluelogic等。FPGA在里面作为产品的一部分,所以会有成本的考虑,够用就好,有时上高端的片子,有时上低端的,属于RD的一部分,地位还比较高。02在芯片厂商那里做FPGA原型验证,一般大点的IC公司会有个team或一二人专门负责做这块,把其它人设计来的代码上原型跑跑,相对来说工作比较轻松,只要环境搭好了,再来新的项目也是改改接进来跑跑流程的事情。一般都有外购或自己开发的原型平台,FPGA都是最高端的,以Xilinx居多,Altera也不少,如果工程设计量太大,往往还涉及到多颗FPGA切割的问题,另外,还有会大量子卡配合使用。原型验证工程师在这类公司比ASICdeisgn/verification可能稍低一点,看各公司具体情况吧,再者这些职位些互转也不难,或者同时从事几块工作的人也不在少数吧。03进入FPGA厂商当FAE或CAE,比如Xilinx/Altera/Lattice。中国的国情嘛,大家都知道,干几年技术大家就开始彷徨何去何从了,做IT的说超过30岁再写代码就写不过年轻人了,FPGA、电子、嵌入式等门槛更高些、需要时间积累的,可以放宽些,大致就是35岁以后就想着转管理层、接近市场之类的(其实真实情况也没这么恐怖,身边40岁以上做一线coding的也很多,如系统工程师、架构工程师、专家等),那去厂商做FAE/CAE是很好的选择。这里面又分原厂、代理的AE,原厂的位置毕竟有限,周围只有少数同事,认识的或听说过的进去了,一般他们招人都不对外公开,靠内推吧。另外说个额外吧,FAE与CAE的区别,简而言之,FAE就是出台的,要陪着sales跑客户的,有的划分到marketing部位,而CAE就是坐台的,不怎么出去。FAE一般盯着几个客户,所有与客户相关的非商务事情,他基本是接口人,所以要靠近客户,尽快响应,如北京上海深圳一般会有FAE蹲守;而CAE一般专深于某项技术,比如FPGA相关的,有熟悉EDAtools的,有熟悉硬件的,有熟悉HDLcoding、仿真、综合设定的,还有的熟悉DDR、USB、PCIE等具体协议的,全国或全球的与之相关的问题都汇总到这几个CAE手上来。也有分为售前和售后,现在大家讲究长久合作,细水长流,不是大宗物品讲究一锤子买卖。04其它专业场合,比如医疗设备业、多媒体或图形图像处理业,比如西门子医疗、飞利浦医疗、国内的联影在长期招收FPGA工程师,在这里FPGA作为工业控制的一部分吧。另外,在摄像头相关领域或其它图形处理,FPGA用得也很广,可以说是目前的热点应用之一吧,如安防领域的海康威视等。还有其它的工业用品相关的领域,主要是控制、嵌入式、图形图像处理、传输等,比如无人机大疆科技也在招FPGA啦。05加一个汽车电子方向,最近一两年,明显感觉FPGA在汽车电子方面的应用多起来了,Lattice开放过相关的职位;汽车运动控制相关的电子装置,以前一直使用单片机或MCU完成,有新项目开始考虑使用FPGA或CPLD来实现,有里面工作的同学向我咨询可行性了……汽车电子是这些年较热的话题,并且看形势还会继续热下去,FPGA在上面的应用,主要是原先单片机或MCU在实时性或功能的实现上已经不满足要求,开始由FPGA来实现了。主要特点是:工作环境恶劣,在高温、潮湿的环境下、并且对稳定性等要求极高,对FPGA的容量和性能要求较低,单片价格不会高,但是都是量产啊。这块觉得大有可为。06仿真加速器这块,动不动千万元以上的大箱子设备,很贵,一般小公司用不起。其实这与原型验证有区别也有联系,有FPGA经验的人做仿真加速器也能较快上手。我现在就是M公司做AE,有机会再写写emulator相关的回答。近来FPGA原型验证平台和硬件仿真器一起,受到了极大的关注。一个证据就是三大EDA厂商都在这块发力,C、M很多年前就有自己的硬件仿真器产品,而S很早就把HAPS纳入旗下。2012年S收购了Zebu,C也推出自己的原型平台,M最近也加入战团。再加上二线、三线厂商的产品,以及客户自己自制的板子,这块发展在加速。07硬件加速、并行计算等,这块逐渐发展过程中吧,比如Intel把Altera收购了,很大个着重点就在此。08各大院校、研究所,把这个单独拿出来说吧,上面列的基本是市场经济下的领域,非市场经济的研究所还是有较大不同。经费大多是国家拨款,或者航天航空雷达电子工业等面向军工方向的,这几年在里面待遇也提升不少,在二线城市里比较有吸引力吧。年轻工程师可能会遇到种情况:因为技术比较新,年纪大些的人不太会用,所以所有的事情都会压到年轻工程师头上,想找人帮忙别人也不会啊,几乎是全能手了。关于这个话题,如若你有任何见解,欢迎讨论分享哦!
    发布于 06-16

干货热帖

  • 【DIGILENT官方资料】OpenScope MZ 官方入门指导手册
    DIGILENTOenScoeMZ是一款便携式多功能可编程仪器模块,可与最新推出的WaveFrormsLive搭配使用。【官方入门指导教程】请见附件。有需要的用户请自取。【官方视频版快速入门教程】请点击:htt://www.digilent.com.cn/studyinfo/62.html
    亮了(0) 51 0 06-18
  • 知乎问答 | 学习FPGA将来的出路在哪里?
    来源:知乎答主:秦冕、Evan172原提问如题,已经初步了解了一下,但由于没有接触到比较正式的项目,比较迷糊一点,如果可能的话,请举例说明...❖~答主:秦冕~自己也只是即将毕业的学生,简单说一下自己了解的情况。希望能和大家多多交流。01各大军工研究所以及部分科研机构(14所,29所,航天所,天文台等)。这部分可以说是最对口的,因为这些单位大量应用FPGA,工作环境不予置评;02做仪器的相关公司(41所,泰克),这个也是非常对口,高速信号发生器、频谱仪、示波器都需要FPGA直接实现,本身仪器也就是采集预处理系统,FPGA应用最适合的地方;03做ASIC逻辑,或者叫做前端,这个是就业市场最大的,上海这边有AMD,英伟达,高通,海思,展讯等等众多IC厂商,ASIC逻辑和做FPGA基本上一样;04做相关算法,FPGA只是实现工具,应用在上面的算法才是关键,应用多的算法领域有通信相关的(射频到基带),图像,通用信号处理等。在大多公司中都是有专门负责算法的部门,包括通信,数据通信,IC等。当然做算法要比做逻辑门槛高;05这几年比较新的硬件加速领域,主要应用面对数据中心,包括网络,搜索等领域,国内少数大公司在做,国外已经有一些新兴的小公司在做这方面的研究了。Xilinx和Altera也都在推这方面的市场,感觉FPGA的可编程以及低功耗(相对)的特点,这方面将来应该有很不错的发展。06众多中小型公司做的嵌入式系统;07如果接触硬件多的话也可以走硬件工程师方向,这就是另外一条路了。有什么不对的地方还请指正。❖~答主:Evan172~01在国内FPGA最大的应用市场还是通信类,几大厂商的重要收入来源还是华为、中兴、阿朗、烽火等,基本上可以直接呼叫原厂AE上门支持那种。算法类(如各种FIR)、接口类(如CPRI、Interlaken、XAUI、PCIE、GE、SRIO等),其它还有gluelogic等。FPGA在里面作为产品的一部分,所以会有成本的考虑,够用就好,有时上高端的片子,有时上低端的,属于RD的一部分,地位还比较高。02在芯片厂商那里做FPGA原型验证,一般大点的IC公司会有个team或一二人专门负责做这块,把其它人设计来的代码上原型跑跑,相对来说工作比较轻松,只要环境搭好了,再来新的项目也是改改接进来跑跑流程的事情。一般都有外购或自己开发的原型平台,FPGA都是最高端的,以Xilinx居多,Altera也不少,如果工程设计量太大,往往还涉及到多颗FPGA切割的问题,另外,还有会大量子卡配合使用。原型验证工程师在这类公司比ASICdeisgn/verification可能稍低一点,看各公司具体情况吧,再者这些职位些互转也不难,或者同时从事几块工作的人也不在少数吧。03进入FPGA厂商当FAE或CAE,比如Xilinx/Altera/Lattice。中国的国情嘛,大家都知道,干几年技术大家就开始彷徨何去何从了,做IT的说超过30岁再写代码就写不过年轻人了,FPGA、电子、嵌入式等门槛更高些、需要时间积累的,可以放宽些,大致就是35岁以后就想着转管理层、接近市场之类的(其实真实情况也没这么恐怖,身边40岁以上做一线coding的也很多,如系统工程师、架构工程师、专家等),那去厂商做FAE/CAE是很好的选择。这里面又分原厂、代理的AE,原厂的位置毕竟有限,周围只有少数同事,认识的或听说过的进去了,一般他们招人都不对外公开,靠内推吧。另外说个额外吧,FAE与CAE的区别,简而言之,FAE就是出台的,要陪着sales跑客户的,有的划分到marketing部位,而CAE就是坐台的,不怎么出去。FAE一般盯着几个客户,所有与客户相关的非商务事情,他基本是接口人,所以要靠近客户,尽快响应,如北京上海深圳一般会有FAE蹲守;而CAE一般专深于某项技术,比如FPGA相关的,有熟悉EDAtools的,有熟悉硬件的,有熟悉HDLcoding、仿真、综合设定的,还有的熟悉DDR、USB、PCIE等具体协议的,全国或全球的与之相关的问题都汇总到这几个CAE手上来。也有分为售前和售后,现在大家讲究长久合作,细水长流,不是大宗物品讲究一锤子买卖。04其它专业场合,比如医疗设备业、多媒体或图形图像处理业,比如西门子医疗、飞利浦医疗、国内的联影在长期招收FPGA工程师,在这里FPGA作为工业控制的一部分吧。另外,在摄像头相关领域或其它图形处理,FPGA用得也很广,可以说是目前的热点应用之一吧,如安防领域的海康威视等。还有其它的工业用品相关的领域,主要是控制、嵌入式、图形图像处理、传输等,比如无人机大疆科技也在招FPGA啦。05加一个汽车电子方向,最近一两年,明显感觉FPGA在汽车电子方面的应用多起来了,Lattice开放过相关的职位;汽车运动控制相关的电子装置,以前一直使用单片机或MCU完成,有新项目开始考虑使用FPGA或CPLD来实现,有里面工作的同学向我咨询可行性了……汽车电子是这些年较热的话题,并且看形势还会继续热下去,FPGA在上面的应用,主要是原先单片机或MCU在实时性或功能的实现上已经不满足要求,开始由FPGA来实现了。主要特点是:工作环境恶劣,在高温、潮湿的环境下、并且对稳定性等要求极高,对FPGA的容量和性能要求较低,单片价格不会高,但是都是量产啊。这块觉得大有可为。06仿真加速器这块,动不动千万元以上的大箱子设备,很贵,一般小公司用不起。其实这与原型验证有区别也有联系,有FPGA经验的人做仿真加速器也能较快上手。我现在就是M公司做AE,有机会再写写emulator相关的回答。近来FPGA原型验证平台和硬件仿真器一起,受到了极大的关注。一个证据就是三大EDA厂商都在这块发力,C、M很多年前就有自己的硬件仿真器产品,而S很早就把HAPS纳入旗下。2012年S收购了Zebu,C也推出自己的原型平台,M最近也加入战团。再加上二线、三线厂商的产品,以及客户自己自制的板子,这块发展在加速。07硬件加速、并行计算等,这块逐渐发展过程中吧,比如Intel把Altera收购了,很大个着重点就在此。08各大院校、研究所,把这个单独拿出来说吧,上面列的基本是市场经济下的领域,非市场经济的研究所还是有较大不同。经费大多是国家拨款,或者航天航空雷达电子工业等面向军工方向的,这几年在里面待遇也提升不少,在二线城市里比较有吸引力吧。年轻工程师可能会遇到种情况:因为技术比较新,年纪大些的人不太会用,所以所有的事情都会压到年轻工程师头上,想找人帮忙别人也不会啊,几乎是全能手了。关于这个话题,如若你有任何见解,欢迎讨论分享哦!
    亮了(0) 42 0 06-16
  • 热门板卡官方约束文件(.xdc)汇总
    Digilent板卡的约束文件及例程其实都可以在github.com/Digilent下载,但常常有小伙伴表示不知道在哪里下载。这里就把热门板卡Basys3,Nexys4DDR,Zybo,Arty,Pynq的约束文件汇总一下,方便大家使用。
    亮了(0) 42 0 06-16
  • 【官方资料】PYNQ入门手册
    中文的PYNQ入门手册,需要的自取~其它资源:·PYNQ-Z1开发板试用测评·机器学习:如何在PYNQ-Z1上搭建二值神经网络(BNN)·XilinxBNN-PYNQ框架入门更多资料见www.ynq.io
    亮了(0) 260 0 05-08
  • FPGA设计总结十五条
    1、硬件设计基本原则(1)速度与面积平衡和互换原则:一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。从而实现了用面积复制换取速度的提高。(2)硬件原则:理解HDL本质(3)系统原则:整体把握(4)同步设计原则:设计时序稳定的基本原则2、Verilog作为一种HDL语言,对系统行为的建模方式是分层次的。比较重要的层次有系统级(system)、算法级(Algorithm)、寄存器传输级(RTL)、逻辑级(Logic)、门级(Gate)、电路开关级(Switch)。3、实际工作中,除了描述仿真测试激励(Testbench)时使用for循环语句外,极少在RTL级编码中使用for循环,这是因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,不能有效的复用硬件逻辑资源,造成巨大的浪费。一般常用case语句代替。4、if…else…和case在嵌套描述时是有很大区别的,if…else…是有优先级的,一般来说,第一个if的优先级最高,最后一个else的优先级最低。而case语句是平行语句,它是没有优先级的,而建立优先级结构需要耗费大量的逻辑资源,所以能用case的地方就不要用if…else…语句。补充:1.也可以用if…;if…;if…;描述不带优先级的“平行”语句。5、FPGA一般触发器资源比较丰富,而CPLD组合逻辑资源更丰富。6、FPGA和CPLD的组成:FPGA基本有可编程I/O单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等6部分组成。CPLD的结构相对比较简单,主要由可编程I/O单元、基本逻辑单元、布线池和其他辅助功能模块组成。7、BlockRAM:3种块RAM结构,M512RAM(512bit)、M4KRAM(4Kbit)、M-RAM(64Kbit).M512RAM:适合做一些小的Buffer、FIFO、DPRAM、SPRAM、ROM等;M4KRAM:适用于一般的需求M-RAM:适合做大块数据的缓冲区。Xlinx和LatticeFPGA的LUT可以灵活配置成小的RAM、ROM、FIFO等存储结构,这种技术被称为分布式RAM。补充:但是在一般的设计中,不提倡用FPGA/CPLD的片内资源配置成大量的存储器,这是处于成本的考虑。所以尽量采用外接存储器。8、善用芯片内部的PLL或DLL资源完成时钟的分频、倍频率、移相等操作,不仅简化了设计,并且能有效地提高系统的精度和工作稳定性。9、异步电路和同步时序电路的区别异步电路:电路核心逻辑有用组合电路实现;异步时序电路的最大缺点是容易产生毛刺;不利于器件移植;不利于静态时序分析(STA)、验证设计时序性能。同步时序电路:电路核心逻辑是用各种触发器实现;电路主要信号、输出信号等都是在某个时钟沿驱动触发器产生的;同步时序电路可以很好的避免毛刺;利于器件移植;利于静态时序分析(STA)、验证设计时序性能。10、同步设计中,稳定可靠的数据采样必须遵从以下两个基本原则:(1)在有效时钟沿到达前,数据输入至少已经稳定了采样寄存器的Setu时间之久,这条原则简称满足Setu时间原则;(2)在有效时钟沿到达后,数据输入至少还将稳定保持采样寄存器的Hold时钟之久,这条原则简称满足Hold时间原则。11、同步时序设计注意事项:异步时钟域的数据转换。组合逻辑电路的设计方法。同步时序电路的时钟设计。同步时序电路的延迟。同步时序电路的延迟最常用的设计方法是用分频或者倍频的时钟或者同步计数器完成所需的延迟,对比较大的和特殊定时要求的延时,一般用高速时钟产生一个计数器,根据计数产生延迟;对于比较小的延迟,可以用D触发器打一下,这样不仅可以使信号延时了一个时钟周期,而且完成了信号与时钟的初次同步。在输入信号采样和增加时序约束余量中使用。另外,还有用行为级方法描述延迟,如“#5a<=4’0101;”这种常用于仿真测试激励,但是在电路综合时会被忽略,并不能起到延迟作用。Verilog定义的reg型,不一定综合成寄存器。在Verilog代码中最常用的两种数据类型是wire和reg型,一般来说,wire型指定的数据和网线通过组合逻辑实现,而reg型指定的数据不一定就是用寄存器实现。12、常用设计思想与技巧(1)乒乓操作;(2)串并转换;(3)流水线操作;(4)异步时钟域数据同步。是指如何在两个时钟不同步的数据域之间可靠地进行数据交换的问题。数据时钟域不同步主要有两种情况:两个域的时钟频率相同,但是相差不固定,或者相差固定但是不可测,简称为同频异相问题。两个时钟频率根本不同,简称异频问题。两种不推荐的异步时钟域操作方法:一种是通过增加Buffer或者其他门延时来调整采样;另一种是盲目使用时钟正负沿调整数据采样。13、模块划分基本原则:(1)对每个同步时序设计的子模块的输出使用寄存器(用寄存器分割同步时序模块原则)。(2)将相关逻辑和可以复用的逻辑划分在同一模块内(呼应系统原则)。(3)将不同优化目标的逻辑分开。(4)将送约束的逻辑归到同一模块。(5)将存储逻辑独立划分成模块。(6)合适的模块规模。(7)顶层模块最好不进行逻辑设计。14、组合逻辑的注意事项(1)避免组合逻辑反馈环路(容易毛刺、振荡、时序违规等)。解决:A、牢记任何反馈回路必须包含寄存器;B、检查综合、实现报告的warning信息,发现反馈回路(combinationalloos)后进行相应修改。(2)替换延迟链。解决:用倍频、分频或者同步计数器完成。(3)替换异步脉冲产生单元(毛刺生成器)。解决:用同步时序设计脉冲电路。(4)慎用锁存器。解决:A、使用完备的if…else语句;B、检查设计中是否含有组合逻辑反馈环路;C、对每个输入条件,设计输出操作,对case语句设置default操作。特别是在状态机设计中,最好有一个default的状态转移,而且每个状态最好也有一个default的操作。D、如果使用case语句时,特别是在设计状态机时,尽量附加综合约束属性,综合为完全条件case语句。小技巧:仔细检查综合器的综合报告,目前大多数的综合器对所综合出的latch都会报“warning”,通过综合报告可以较为方便地找出无意中生成的latch。15、时钟设计的注意事项(1)同步时序电路推荐的时钟设计方法:时钟经全局时钟输入引脚输入,通过FPGA内部专用的PLL或DLL进行分频/倍频、移相等调整与运算,然后经FPGA内部全局时钟布线资源驱动到达芯片内所有寄存器和其他模块的时钟输入端。FPGA设计者的5项基本功:仿真、综合、时序分析、调试、验证。掌握HDL语言虽然不是FPGA设计的全部,但是HDL语言对FPGA设计的影响贯穿于整个FPGA设计流程中,与FPGA设计的5项基本功是相辅相成的。对于FPGA设计者来说,用好“HDL语言的可综合子集”可以完成FPGA设计50%的工作——设计编码。练好仿真、综合、时序分析这3项基本功,对于学习“HDL语言的可综合子集”有如下帮助:1.通过仿真,可以观察HDL语言在FPGA中的逻辑行为。2.通过综合,可以观察HDL语言在FPGA中的物理实现形式。3.通过时序分析,可以分析HDL语言在FPGA中的物理实现特性。对于FPGA设计者来说,用好“HDL语言的验证子集”,可以完成FPGA设计另外50%的工作——调试验证。1.搭建验证环境,通过仿真的手段可以检验FPGA设计的正确性。2.全面的仿真验证可以减少FPGA硬件调试的工作量。3.把硬件调试与仿真验证方法结合起来,用调试解决仿真未验证的问题,用仿真保证已经解决的问题不在调试中再现,可以建立一个回归验证流程,有助于FPGA设计项目的维护。FPGA设计者的这5项基本功不是孤立的,必须结合使用,才能完成一个完整的FPGA设计流程。反过来说,通过完成一个完整的设计流程,才能最有效地练习这5项基本功。对这5项基本功有了初步认识,就可以逐个深入学习一些,然后把学到的知识再次用于完整的设计流程。如此反复,就可以逐步提高设计水平。采用这样的循序渐进、螺旋式上升的方法,只要通过培训入了门,就可以自学自练,自我提高。市面上出售的有关FPGA设计的书籍为了保证结构的完整性,对FPGA设计的每一个方面分开介绍,每一方面虽然深入,但是由于缺少其他相关方面的支持,读者很难付诸实践,只有通读完全书才能对FPGA设计获得一个整体的认识。这样的书籍,作为工程培训指导书不行,可以作为某一个方面进阶的参考书。对于新入职的员工来说,他们往往对FPGA的整体设计流程有了初步认识,5项基本功的某几个方面可能很扎实。但是由于某个或某几个方面能力的欠缺,限制了他们独自完成整个设计流程的能力。入职培训的目的就是帮助他们掌握整体设计流程,培养自我获取信息的能力,通过几个设计流程来回的训练,形成自我促进、自我发展的良性循环。在这一过程中,随着对工作涉及的知识的广度和深度的认识逐步清晰,新员工的自信心也会逐步增强,对个人的发展方向也会逐步明确,才能积极主动地参与到工程项目中来。
    亮了(0) 178 0 04-24
  • 对Verilog初学者比较有用的整理(持续更新中...)
    先记下来:1、不使用初始化语句;2、不使用延时语句;3、不使用循环次数不确定的语句,如:forever,while等;4、尽量采用同步方式设计电路;5、尽量采用行为语句完成设计;6、always过程块描述组合逻辑,应在敏感信号表中列出所有的输入信号;7、所有的内部寄存器都应该可以被复位;8、用户自定义原件(UDP元件)是不能被综合的。一:基本Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器,还有可能被优化掉。二:Verilog语句结构到门级的映射1、连续性赋值:assign连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因此连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign语句中的延时综合时都将忽视。2、过程性赋值:过程性赋值只出现在always语句中。阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。过程性赋值的赋值对象有可能综合成wire,latch,和fli-flo,取决于具体状况。如,时钟控制下的非阻塞赋值综合成fli-flo。过程性赋值语句中的任何延时在综合时都将忽略。建议同一个变量单一地使用阻塞或者非阻塞赋值。3、逻辑操作符:逻辑操作符对应于硬件中已有的逻辑门,一些操作符不能被综合:===、!==。4、算术操作符:Verilog中将reg视为无符号数,而integer视为有符号数。因此,进行有符号操作时使用integer,使用无符号操作时使用reg。5、进位:通常会将进行运算操作的结果比原操作数扩展一位,用来存放进位或者借位。如:Wire[3:0]A,B;Wire[4:0]C;AssignC=A+B;C的最高位用来存放进位。6、关系运算符:关系运算符:<,>,<=,>=和算术操作符一样,可以进行有符号和无符号运算,取决于数据类型是reg,net还是integer。7、相等运算符:==,!=注意:===和!==是不可综合的。可以进行有符号或无符号操作,取决于数据类型8、移位运算符:左移,右移,右边操作数可以是常数或者是变量,二者综合出来的结果不同。9、部分选择:部分选择索引必须是常量。10、BIT选择:BIT选择中的索引可以用变量,这样将综合成多路(复用)器。11、敏感表:Always过程中,所有被读取的数据,即等号右边的变量都要应放在敏感表中,不然,综合时不能正确地映射到所用的门。12、IF:如果变量没有在IF语句的每个分支中进行赋值,将会产生latch。如果IF语句中产生了latch,则IF的条件中最好不要用到算术操作。Case语句类似。Case的条款可以是变量。如果一个变量在同一个IF条件分支中先赎值然后读取,则不会产生latch。如果先读取,后赎值,则会产生latch。13、循环:只有for-loo语句是可以综合的。14、设计时序电路时,建议变量在always语句中赋值,而在该always语句外使用,使综合时能准确地匹配。建议不要使用局部变量。15、不能在多个always块中对同一个变量赎值。16、函数函数代表一个组合逻辑,所有内部定义的变量都是临时的,这些变量综合后为wire。17、任务:任务可能是组合逻辑或者时序逻辑,取决于何种情况下调用任务。18、Z:Z会综合成一个三态门,必须在条件语句中赋值19、参数化设计:优点:参数可重载,不需要多次定义模块三:模块优化1、资源共享:当进程涉及到共用ALU时,要考虑资源分配问题。可以共享的操作符主要有:关系操作符、加减乘除操作符。通常乘和加不共用ALU,乘除通常在其内部共用。2、共用表达式:如:C=A+B;D=G+(A+B);两者虽然有共用的A+B,但是有些综合工具不能识别.可以将第二句改为:D=G+C;这样只需两个加法器.3、转移代码:如循环语句中没有发生变化的语句移出循环.4、避免latch:两种方法:1、在每一个IF分支中对变量赋值。2、在每一个IF语句中都对变量赋初值。5、模块:综合生成的存储器如ROM或RAM不是一种好方法,只是成堆的寄存器,很费资源。最好用库自带的存储器模块。四、验证:1、敏感表:在always语句中,如果敏感表不含时钟,最好将所有的被读取的信号都放在敏感表中。2、异步复位:建议不要在异步时对变量读取,即异步复位时,对信号赋以常数值。
    亮了(0) 237 0 04-10
解决问题:47
干货热帖:120
会员总数:4797
总帖数:442
我要发帖

贡献榜

  • hahavchen

    创新创业教育知名圈内人

    常隐匿于江湖的资深攻城狮,拥有超过10年的半导体与测控行业产品研发、技术支持、市场拓展及区域销售经验。目前同时担任上海交通大学本科生企业导师。

    • 王斌Jr

      工程师

      Andorid工程师,书呆子

    • mysunday2

      本科生

      武汉大学在读研究生,懂一点Java,懂一点LabVIEW

    • 风雨兼程

      本科生

      热爱科研,忠于技术,渴望在LabVIEW的世界里遨游。

    • 地板

      媒体人

      资深媒体人,现任职于国内某知名电子行业媒体

  • EltonLiang

    工程师

    汽车电子方向系统集成工程师,坐标北京。精通LabVIEW与测控技术,乐于分享总结。

    • Superlava

      工程师

      国家电网工程师,对于创新创造,我是真爱粉!

    • chnwjian

      研究生

      擅长物理实时测量和ardunio

    • linon

      教师

      东南大学电子科学与工程学院

    • suo ivy

      创业者

      乐忠于机器人的创业少年

  • CC

    研究生

    擅长FPGA以及LabVIEW程序设计,拥有多年项目开发经验,曾开发过高速误码仪、自动泊车系统,研发并将PM2.5检测仪推入市场,目前致力于FPGA的图像处理研究。

    • 冰淇淋

      研究生

      略懂c语言,爱玩爱交流

    • Veritas

      电子技术爱好者

      非电类专业的在校纯技术爱好者

    • 竹杖芒鞋轻胜马

      研究生

      擅长电子电力,电源,逆变器,Matlab的同济骚年

    • 熊猫家的猫

      研究生

      热爱电子设计,熟悉LabVIEW编程,希望和大家一起学习进步。

    • 李比希

      电子技术爱好者

      喜欢LabVIEW,会点c语言,痴迷玩创,让激情碰出创意的火花!

    • 糊涂宝宝

      研究生

      精通C语言与电路设计。善于软硬件结合开发实际工程项目。

    • LabVIEWers

      工程师

      汽车电子电控领域工程师。个人信条:追求卓越。

    • 南瓜粥

      本科生

      致力于精密测量@天津大学

  • philo

    工程师

    刚毕业的新晋TI验证工程师一枚。内心埋有一个小小的希望靠技术改变世界的种子。CLD(认证LabVIEW开发工程师)持有者,并熟悉C语言与MATLAB。

    • 阳光的新手125

      研究生

      Strict coding is the boddy, smart thoughts are the soul.

    • AoduLabVer

      工程师

      华为数字视频领域工程师,技术宅,CLD,热衷LabVIEW

    • 西兰花教负责人

      创业者

      俗称“福建三本“的某985高校毕业,正不务正业地创业中

    • berwin

      创业者

      好奇主义 & 观察者 & 行动派

  • RockMOOC

    教师

    博士,现于哈尔滨工业大学任教。拥有超过8年基于FPGA的数字系统硬件设计经验,精通FPGA开发。

    • wonderm

      本科生

      熟悉LabVIEW/Matlab/Verilog,擅长STM32/K60硬件开发

    • diguaguowang

      研究生

      一直羡慕会各种编程的人,也在向着这个方向努力

    • 阿Q

      工程师

      精通FPGA的酷创达人

    • wigger

      工程师

      Digilent元老级大牛

  • Mr. D

    工程师

    部落的发起者与第一位"Digger",非典型张江男一枚。致力于为有执着有梦想的志同道合者缔造一个可以互相勾搭的中文开源技术社区。