娱乐平台-娱乐天地[拉菲II]-用户登录注册

温故而知新:从电路里来,到Verilog里去!

2017-11-11 09:13 网络整理


4. 定制器件,细节入手
FPGA才是“上得厅堂,下得厨房,安得系统,打得流氓”的多面手,其结构如图8所示。


图8 某FPGA的功能结构图


其中包括可编程输入输出单元(IOB,Input Output Block)、可配置逻辑块(CLB,Configurable Logic Block)、数字时钟管理模块(DCM,Digital Clock Management) 和嵌入式块RAM(BRAM,Block RAM) 等部分。这个里面与Verilog语言设计电路有关的部分是CLB,揭开CLB的盖头来,您老将会看到如图9所示的一副尊容。以Xilinx公司的FPGA器件为例,CLB由多个(一般为2个或4个)相同的Slice(这个词还真不好翻译,查了半天度娘,看到唯一靠点谱的说法是逻辑片)和附加逻辑构成。其中,Slice是基本的逻辑电路实现单元,属于中等后面介绍;外围电路中,开关网络主要完成一般信号的可配置连接,快速连接线进行时钟和复位等关键信号的连接。


图9 Xilinx公司FPGA中CLB的结构图


Slice的结构如图10所示,一个Slice由两个4/6输入的LUT(查找表,Look Up Table)、进位算术逻辑、D触发器和函数复用器组成。算术逻辑包括一个异或门和一个专用与门,一个异或门可以使一个Slice实现2bit全加操作,专用与门用于提高乘法器的效率(这个后文书有详细讲解,这里属于“看热闹”的内容);进位逻辑由专用进位信号和函数复用器(MUXC)组成,还包括两条快速进位链,用于提高CLB模块的处理速度,用于实现快速的算术加减法操作。4输入LUT用于实现组合逻辑运算。


图10 Xilinx公司某款FPGA Slice的结构


同学们有没有感到惊讶呢?如果有,说明你的《数字电子技术》的学费没白交。说好的用于组合逻辑的门级电路呢?还有编码器、译码器等等,等等?这些器件都没有,怎么设计组合逻辑啊?“风萧萧兮易水寒,虞兮虞兮奈若何?”


LUT本质上就是一个RAM,里面存着真值表。目前FPGA中,多数采用4输入的LUT,所以每一个LUT可以看成一个有4 位地址线的 的RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,EDA软件会自动计算逻辑电路的所有可能结果,并把真值表事先写入 RAM。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。对于输入高于4比特的输入,EDA软件会自动把输入拆分成若干LUT,最后联合输出。(真值表是什么,这个不用讲了吧。不懂的人,数电考试肯定作弊的,回去重修!)官方说法是:“由于基于LUT的FPGA具有很高的集成度,其器件密度从数万门到数千万门不等,可以完成极其复杂的时序与逻辑组合逻辑电路功能,所以适用于高速、高密度的高端数字逻辑电路设计领域” 。所以本书介绍的结构竟然是流行趋势,好极好极!


最后来看一看开发流程里面的“综合”这个过程,那些“优化”什么的亮瞎钛合金狗眼的概念,对于FPGA的组合逻辑方面还存在吗?我们估计独立思考。贫道闻到了退化的味道。这也不是说EDA软件没用,LUT组合方面的算法还是可圈可点的嘛。


5. 语言缺陷,电路子集
Verilog设计之初就号称可以一次打两只鸟:设计和验证,殊不知这两个方向的思路却相差很大。数字逻辑的设计是基于数电的,受限制于电路器件的特性;反观数字逻辑系统的验证,这是一个纯粹软件仿真的活计,工程师更加喜欢一般程序设计语言的思路。在老衲参与的很多技术讨论里面发现,这“两鸟”不仅仅没有打到,这把“米”是一定“蚀”了。大多数初学者完全分不清那些可以综合,那些不可以。


老僧也在总结这个现象的原因,吾称之为:“教不得法,学不得法”。“教不得法”是指,很多关于Verilog的书继承了程序语言教材的结构,把语句分为:算术运算、条件判断和循环等等部分,完全不区分可综合性,这样有误导的嫌疑;“学不得法”是一个历史原因,大多数学习者实际上具有很强的程序语言,例如C语言,的基础,这反而是有害的。人的思维是有习惯性的,Verilog的形式又与C语言很类似,所以多数人都把C语言设计里面的习惯不自觉的带入了Verilog语言的电路实现。于是乎,综合软件上报的错误“如滔滔江水,绵绵不绝”,实现与想象不一致也是“如黄河泛滥,一发不可收拾”。以上是一家之言啊,切勿对号入座,否则必有受伤者,老衲不负责医药费!


数字电路和程序语言的区别,别告诉我您不知道。下面姑且总结几条,叫大家以后面试的时候,可以说得头头是道。

为您推荐