加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 加法器相关
    •  
    • 分频电路相关
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

备战秋招[一]

2020/12/01
219
阅读需 8 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

加法器相关

半加器全加器的区别在于,是否有进位输入端,可以直观地理解为,半加器是两个一比特相加,而全加器是三个一比特相加,输出结果和进位信号。

 

半加器

半加器的真值表如下图

输入 输出
A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

其逻辑表达式为

根据逻辑表达式,可以使用如下门电路实现

全加器

全加器真值表如下

输入 输出
A B Ci C S
0 0 0 0 0
0 1 0 0 1
1 0 0 0 1
1 1 0 1 0
0 0 1 0 1
0 1 1 1 0
1 0 1 1 0
1 1 1 1 1

其逻辑表达式为:

使用门电路搭建

 

使用加法器计算 7bit 中 1 的数量,最少用几个?

有 7 个 1bit 的数,为他们编号,从 b0 到 b6,一共七个。

使用 1bit 全加器可以将 3 个 bit 相加,得到 2bit 的结果,那么 b0,b1,b2 使用一个加法器,b3,b4,b5 使用一个加法器。

现在 7 个 1bit 变成了 2 个 2bit 和一个 1bit(b6)。

然后使用一个 2bit 全加器将两个 2bit 数进行相加,1bit 的 b6 作为进位输入。相加后结果为 3 位,最大可以表示到 7 个 1bit。

而 2bit 全加器可以有 2 个 1bit 全加器组成,所以一共使用 4 个 1bit 全加器可以完成 1 的数量的统计。

 

行波进位加法器

以 4bit 的行波进位加法器为例,需要使用 4 个 1bit 加法器实现,如下图所示。在进行加法运算时,首先准备好的是 1 号全加器的 3 个 input。而 2、3、4 号全加器的 Cin 全部来自前一个全加器的 Cout,只有等到 1 号全加器运算完毕,2、3、4 号全加器才能依次进行进位运算,最终得到结果。这样进位输出,像波浪一样,依次从低位到高位传递, 最终产生结果的加法器,也因此得名为行波进位加法器(Ripple-Carry Adder,RCA)。

如果将全加器内部打开,我们可以看到,关键路上有 9 个门,门延迟非常高

 

超前进位加法器

为了改进行波仅为加法器的延迟问题,可以将全加器的进位信号转化为 G 和 P 以及本级进位输入组成的逻辑。如下图

将四个加法器串联,迭代可以得到

可以看到,每一级的进位都不依赖于上一级的进位,因此不需要等待上一个加法器完成计算,超前得到进位结果。同时,显然如果要实现大位宽加法器,逻辑将会变得更加复杂。

通过超强进位的方法,实现四位全加器的原理图如下

单 bit 全加器的输出改为输出 P、G 和 S,而每一级的进位可以有下方的逻辑得到。因此最终延迟为 4 个门。

对比行波进位加法器(RCA)和超前进位加法器(CLA)

- RCA CLA
结构特点 低位全加器的 Cout 连接到高一位全加器 Cin 每个全加器的进位输入并不来自于前一级的全加器,而是来自超前进位的逻辑
优点 电路布局简单,设计方便 计算 Ci+1 的延迟时间固定为三级门延迟,与加法器的位数无关
缺点 高位的运算必须等待低位的运算完成,延迟时间长 如果进一步拓宽加法器的位数,则电路变得非常复杂

 

分频电路相关

偶数分频

偶数分频器的实现简单,用计数器在上升沿或者下降沿计数,当计数器的值等于分频系数的一半或等于分频系数时,信号翻转。偶数分频器分频原理如下图所示:

上图的的分频系数是 4,就是 4 分频。电路原理是用一个上升沿计数的计数器,每次计数到 2 时输出信号 clkout 翻转一次,每次计数到 4 时 clkout 再翻转一次,一直周期重复下去。其他的偶数分频器原理也是一样。

如果偶数分频系数是 2 的幂,就可以用 2 分频器级联得到;例如 4 分频就是两个 2 分频级联,下图就是用两个 2 分频器级联得到 4 分频器。

 

奇数分频

如果不要求占空比为 50%的话,也比较容易实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到 1 时,输出时钟进行翻转,计数到 2 时再次进行翻转。即在计数值在邻近的 1 和 2 进行了两次翻转。这样实现的三分频占空比为 1/3 或者 2/3。

对于实现占空比为 50%的 N 倍奇数分频,可以分解为两个通道:

•上升沿触发进行模 N 计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2 再次进行翻转得到一个占空比为非 50%奇数 N 分频时钟;•下降沿触发进行模 N 计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2 时,输出时钟再次翻转生成占空比非 50%的奇数 N 分频时钟。

将这两个占空比非 50%的 N 分频时钟或运算,得到占空比为 50%的奇数 n 分频时钟。

具体例子:5 分频等占空比,可以通过待分频时钟下降沿和上升沿触发 0~4 计数,

•对于待分频时钟的上升沿,当计数器 cnt1 计数到 1 时,clk_p 翻转;当计数器计数到 3(1 + (5 - 1) / 2 = 3)时,clk_p 再次反转;•对于待分频时钟的下降沿,当计数器 cnt2 计数到 1 时,clk_n 翻转;当计数器计数到 3(1 + (5 - 1) / 2 = 3)时,clk_n 再次反转;•然后下降沿产生的 5 分频时钟和上升沿产生的 5 分频时钟进行或运算,即可得到占空比为 50%的 N 分频时钟。

这种方法可以实现任意的奇数分频。

下面给出 5 分频的具体代码:

`timescale 1ns/1ps
module CLK_DIV5(    input   clk_i,    input   rst_n,    output  clk_o    );    reg [2:0] cnt1,cnt2;    reg clk_p,clk_n;
//*********************//MAIN CORE//*********************        always @(posedge clk_i,negedge rst_n)    if(!rst_n) begin        cnt1 <= 3'b0;        clk_p <= 1'b0;    end     else begin        if(cnt1 == 3'b100) begin            cnt1 <= 3'b0;            clk_p <= clk_p;        end        else begin            cnt1 <= cnt1 + 1'b1;            if(cnt1 == 3'b1 || cnt1 == 3'b11)                clk_p <= ~clk_p;        end    end
always @(negedge clk_i,negedge rst_n)    if(!rst_n) begin        cnt2 <= 3'b0;        clk_n <= 1'b0;    end     else begin        if(cnt2 == 3'b100) begin            cnt2 <= 3'b0;            clk_n <= clk_n;        end        else begin            cnt2 <= cnt2 + 1'b1;            if(cnt2 == 3'b1 || cnt2 == 3'b11)                clk_n <= ~clk_n;        end    end
    assign clk_o = clk_p | clk_n;endmodule

 

分数分频

对于要求相位以及占空比严格的分数分频(小数分频),建议采用模拟电路实现。而使用数字电路实现只能保证尽量均匀,在长时间内进行分频。

对于一个分数,把他它分为整数部分和小数部分的形式。例如 N=M.D>1 分频,分为整数 M 和小数 D,我们使用 M 分频和 M+1 分频来构成 M.D 分频。

设 M 分频的次数为 N1,M+1 分频的次数为 N2。

将 M 分频进行 N1 次和 M+1 分频进行 N2 次,那么在 M*N1+(M+1)*N2 个周期内,整体可以看作(M*N1+(M+1)*N2)/(N1+N2)=N 分频。

可以通过均匀分布 M 分频和 M+1 分频,使得相位较为均匀。

结构图可以参考下图

相关推荐

电子产业图谱