第一招:查找表。汉语名字叫查找表,(英文名字叫“Chazhaobiao”?您小沈阳看多了。)英文叫LUT,Look Up Table。是一种最简单的实现结构,传统上被贴上了大面积的标签(具体分析见本讲座“踏雪寻熊”一节),很少被待见(L兄哭了:“我招谁惹谁了,凭什么不用我啊?”)。在我们最初学习《数字电路》的时候,应该最常用的方法了。是否还记得,大家曾经乐此不疲的化简卡诺图,这就是查找表法了。现在EDA软件发达了,简化卡诺图工作不需要大家操心,计算机帮我们做的很好的,这对LUT是个好消息。
最后,时分复用的手段是“多次重复利用有关的运算器件”。
前两个要点是第二招适用的场景,第三点是时分复用的实战招式(对方招架时,收斧头,献斧纂,攻击对方的脸。)。
同学们,我们来解剖时分复用的结构。时分复用在流程上,很类似程序语言,运算不是以前我们介绍硬件描述语言那样并行进行的,而是按照一定顺序串行完成的。这个顺序,是设计人员按照系统的要求设计的,一般用时序图的形式表现。由于硬件描述语言的特殊性,在采用时分复用的单元里面,一般需要一个计数器来控制时序。
以下用一个简单的例子来说明时分复用的方法,计算 e = a + b + c + d。时序图如下,我们在节拍0(计数器为0),计算x = a + b;我们在节拍1,计算e = e + c;;我们在节拍2,计算e = e + d。
好了,下来是设计代码(为了简化,就不写常规操作和计数器部分,只写操作有关的部分了):
…
case (counter)
2’b00: e = a + b;
2’b01: e = e + c;
2’b10: e = e + d;
endcase
…
简单吧?对不起这位仁兄,来人啊,拖出去给我打。还真的以为是程序语言了,这个实现里面还是三个加法器,而不是一个加法器的复用。
还是看看正解吧:
…
assign x = y + z;
…
case (counter)
2’b00: #2 y = a; #2 z = b; #2 e = x;
2’b01: #2 y = e; #2 z = c; #2 e = x;
2’b10: #2 y = e; #2 z = d; #2 e = x;
endcase
…
这才是用一个加法器,实现了3次加法。在实际设计种,还需要注意的是加法的进位问题。这个和时分复用关系不大,为了突出重点,就忽略了。