数字系统设计复习笔记:第六篇
逻辑模块
感觉超前进位加法器和乘法器是难点。不知道考试会怎么考。还是需要理解才行。
全加器
数据流描述
1 | module full_adder (a, b, cin, sum, cout); |
行为级描述
1 | module add_4(A, B, sum, C); |
我还是更喜欢这个。
加法器链的弊端:太慢!因为进位在整个1-bit加法器链上激起了波动。
超前进位加法器
参考PPT P12
1 | //数据流形式8-bit carry lookahead adder |
- 同理,16 位的二进制超前进位加法电路可用 4 个四位二进制超前进位加法电路再加上超前进位形成逻辑来构成,依次类推可以设计出 32 位和64 位的加法电路。
- 如果设计的是 32 位或 64 位的加法器,延迟就会更大。为了加快计算的节拍,可以在运算电路的组合逻辑层中加入多个寄存器组来暂存中间结果。也就是采用数字逻辑设计中常用的流水线(pipeline)办法,来提高运算速度,以便更有效地利用该运算电路。
乘法器
数据流描述
- 被乘数的每一位都要与乘数的低阶位b0相乘产生一行部分积。
- 然后,被乘数的每一位都被乘数的b1位所乘,产生的部分积向左移动一个bit位。这个过程对b2和b3重复进行。
- 然后,部分积被加在一起,形成乘积。任何一列的进位输出都被加到相应的下一个高阶列(不在同一行内横向传播),这称为Wallace Tree(华莱士树)。
我和它谈笑风生(指数据流)
放代码也没啥意义。理解最重要。
行为级描述
1 | module mult_4(X, Y, Product); |
简单吧?
比较器
1 | module compare_n ( |
多路器
实在没啥好讲的。要知道怎么用always
写输出随着输入改变而改变的多路器。注意敏感列表,避免锁存器。case啊嗯
1 | //下面是带使能控制信号nCS的数据位宽可由用户定义的(8位)八路数据通道选择器模块: |
总线操作、流水线
总线操作
适当的总线位宽,配合适当并行度的运算逻辑和步骤就能显著地提髙专用信号处理逻辑电路的运算能力。
拼起来就完事了
流水线
- 流水线(pipeline)的设计方法在高性能、需要经常进行大规模运算的系统中得到广泛的应用,如CPU 、GPU等。高性能的DSP(数字信号处理)系统也使用了流水线设计技术。
- 所谓流水线设计实际上是把规模较大、层次较多的组合逻辑电路分为几个级,在每一级插入寄存器组并暂存中间数据。K 级的流水线就是从组合逻辑的输入到输出恰好有 K个寄存器组(分为 K 级,每一级都有一个寄存器组),上一级的输出是下一级的输入而又无反馈的电路。
和 嵌入式 里也有相同的知识点,如加速比等。
例1
建立一个流水线电路的Verilog模型,计算三个输入流(a、b和c)中相应数值的平均值。流水线包括三个阶段:第一阶段对a和b的数值进行求和,并保存c的数值;第二阶段对保存的c的数值进行加法;第三阶段除以3。输入和输出都是有符号的定点数字,索引从5到-8。
1 | module average_pipeline ( |
为什么除法可以这样子写?
因为这是一个定点数:小数点在索引为0的地方。
索引[5:0]为整数部分,[0:-8]为小数部分,而
14'b00000001010101
的后八位正是0.333。(为什么?)
例2
4 级流水线方式的8位全加器
1 | module pipeline ( |
看的有点头大。理解最重要。
数据流控制
1 | module multiplier |
对于同步时序逻辑,。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Esing的小站!
评论
WalineGitalk