verilog hdl数字集成电路设计原理与应用_从“茴”的四种写法看FPGA设计

为什么使用PLD器件?
    众所周知,徒手连接74门来实现数字系统是一件枯燥的事情,即使在现代的EDA工具上使用Block Diagram连接各种单元模块也会费时费力。如果是一个小小的数字钟那还很好办,随着电路复杂度的增加,实现也变得更加困难。因此70-80年代人们创造了各种PLD器件,使用EDA工具在计算机上进行RTL级描述或进行Schematic Design,最后通过编译综合生成Bit流下载到PLD器件中。现代的PLD器件发展到什么程度呢,在2019年,Intel和Xilinx各自推出了号称“世界上最大的FPGA器件”:2019年8月Xilinx推出Virtex UltraScale+ VU19P FPGA 16nm工艺,集成约350亿个晶体管,约900万个逻辑单元。2019年11月Intel推出Stratix 10 GX 10M FPGA,14nm工艺,集成约433亿个晶体管,约1020万逻辑单元。如此庞大的器件,这上面的数字逻辑如果以传统的74门的方式实现,工作量以及实物的体积和功耗会达到不可思议的程度。使用这样的器件进行开发时,就必须借助EDA工具来完成了。(FPGA器件拥有1000万逻辑单元是什么概念?入门使用的Altera EP4CE6或者Xilinx XC6SLX9器件的资源连1万逻辑单元都达不到,最大的FPGA逻辑资源数量至少是入门款的1000倍)

VCU118 Evaluation Kit:

40eedddbc07829bca0324e47e45b3872.png

VIRTEX FPGA:

ac950228bdc705918fd377780a73b133.png

     (图片来自xilinx.com)

常见的PLD器件:
    PLD器件分类众多,我们按它的配置方式分类,一种是易失性的基于SRAM工艺的器件FPGA,需要外部的配置芯片,还有一种基于FLASH或EPROM工艺的CPLD器件,无需外部配置芯片。这两种器件各有各的优势,常见的搭配案例有:使用CPLD和Flash存储器实现FPGA的配置,合理地利用了CPLD器件的非易失性。相对于FPGA,CPLD器件也有它的缺点,比如资源不会很多,速度也不会很快,最大的逻辑器件是FPGA而不是CPLD,这些是由器件的结构决定的。两者各有优缺点,而不是哪种“更好”。

数字系统的设计流程:
    一个ASIC数字系统的设计过程:Idea->行为级描述->RTL描述->门级网表->物理版图,如果我们的设计最终是下载到CPLD或FPGA中:Idea->行为级描述->RTL描述->综合->布局布线->配置固化(下载到器件)上述流程中的行为级描述未必是HDL代码,也可以是原理图(Block Diagram/Schematic)或者IP核。
这个设计流程是给复杂的数字系统设计做参考的。在在做一些小的工程时,比如一个流水灯或者数字钟,就不必那么复杂。

关于HLS:
    行为级描述通常使用计算机高级语言,用这些语言描述一些思路和算法,很多EDA软件的开发者提供了可将这些高级语言程序的行为级描述代码直接转化成HDL代码的高层次综合工具(HLS)。关于HLS的使用也存在很多争议,有兴趣的可以移步这个号称人均年薪百万的知乎平台看看。https://www.zhihu.com/question/320190011/answer/679538501

怎样理解HDL?
    很多人在最初接触HDL时常尝试以“程序”的思维来理解HDL,甚至因为Verilog和C语言有些地方比较相似,将二者比较进而理解。这是越学越难,给自己找坑的一种路线。反之,尝试以电路框图(Block Diagram/Schematic)的方式理解Verilog才是开启学习Verilog的正确路线,再多抽象的讲解也不如看看RTL图来得实在。我们不应把每条语句单纯理解为计算机程序中的“执行”,理解为生成电路更合适。
当初学者看到一行行的代码时一定会愈发头痛,因为这比框图更加抽象难以理解。然而当他们渐渐掌握这种“抽象的”设计方式后,一定会觉得十分快速高效。

用Verilog写一个最简单的数据选择器:

dc65d6a418df22c03b36307a08c63161.png

    为什么学习FPGA要从这些基本的数字模块开始?这有助于抽象的HDL和数字电子技术的结合。虽然它们实现了一些FPGA逻辑单元里存在的一些东西,看起来很荒唐,但是这一举动存在学习的意义。这个二选一数据选择器有两个数据输入端口,一个选择输入端口,和一个数据输出端,很好理解。

论“茴”的四种写法:
    众所周知,“茴”有四种写法,这个数据选择器也有很多种写法。

76530f8b840b314307366cc934239605.png

76530f8b840b314307366cc934239605.png

be55cd708266bf2dbacd77fa0256f713.png

e9cc01e1c1c1508fbddeb4004c58477e.png

    无论哪种写法,最后生成的电路功能是相同的,甚至很多时候电路也是完全相同的,满足设计的需求,在功能电路方面即可认为是没有区别。但是在程序的维护,可读性方面就会有所不同。这个就要看个人的选择。初学者可以尝试用不同的写法来理解程序,也是加深HDL语法印象的一种方法。

跑FPGA工程综合时太慢怎么办?
    如果是单片机的程序可能很快就编译成功了,而FPGA工程的综合与仿真总是十分漫长,随着工程量的增加,器件资源的增加,动辄几十分钟甚至几个小时,几十个小时。我们如果有几片不同的FPGA,可以把一些想法在小一点的FPGA上验证后再移植到大的FPGA上来,这能缩短很多时间。另一方面,在等综合的空余做一些其他的事情,比如画画PCB,看看文档手册,这样“消磨”一下时光免得浪费。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值