登录   |   注册
    准考证打印   论文投票   报考指南   论文辅导   软考培训   郑重申明  
您现在的位置:  首页 > 通信学苑 > 数据通信 >> 正文
正文
实现拆分大组合逻辑的方法过程讲解
来源:尚大教育-通信学院 作者:辉辉 时间;2013-01-17 点击数: 尚大软考交流群:376154208
可以通过流水线的方式分拆组合逻辑,这也是一种提高芯片速度的一种方式。

    图1是很多为了提高系统时钟采用的拆分大组合逻辑的方法,但是没有提供具体如何拆分的实例。我觉得实例才是重要的。但我不明白在写代码时,如何知道这样写会被综合成一个很大的逻辑,一些简单的可以想到(比如大的计数器应该分成多个来做),但是更复杂的实在是不好理解。

    可以通过流水线的方式分拆组合逻辑,这也是一种提高芯片速度的一种方式。 在组合逻辑中间插入寄存器,设计成流水。 很典型的例子就是调度器,如果做64调度器,可能中间的延时太长,不能满足系统速度要求,这时候就可以做成一级16调度,一级4调度,来完成64调度的功能。

    用加法器做例子,设输入ABCD输出OUT 上半部分就是: ut = A+B+C+D;

    下半部分就是:

    always @(posedge clk)

    begin

    sumreg1 <= sum1;

    sumreg2 <= sum2;

    sumreg3 < = sum3; end

    assign sum1 = A+B;

    assign sum2 = C+D;

    assign sum3 = sumrge1+sumreg2;

    assign UT = sumreg3;

    通常建议使用下半部分的算法,如果可以使用流水线。

    通常是这样的,没有例子看起来是不好理解,但是一有具体的例子就非常清楚了。我也来学着给个计数器的例子计数255,如果用一个寄存器来计那么需要开的深度为8的,如果拆分为两个那么只需容量为4的两个寄存器,所需的逻辑较小,不知道对不对。

    reg[3:0]ad1;

    reg[3:0]ad2;

    always @(posedge clk)

    if(!rest)

    begin

    out<=0;

    ad1<=0;

    ad2<=0;

    end

    else

    if(ad1==15)

    begin

    ad2<=ad2+1;

    ad1<=0;

    end

    else

    if (ad2==15)

    begin out<=1;

    end

    else

    ad1<=ad1+1;

    ad1加满后去触发ad2加。

    always @(posedge clk)

    if (reset)

    counter0 = 0;

    else

    counter0 = counter0 + 1;

    always @(posedge clk)

    begin

    counterreg0 <= counter0;

    if (counterreg0 == 4'b1111)

    outreg0 <= 1;

    else

    outreg0 <= 0;

    end

    assign counter1 = counterreg1 + outreg0;

    always @(posedge clk)

    begin

    counterreg1 <= counter1;

    if (counterreg1 == 4'b1111)

    out <= 1;

    else

    out <= 0;

    end

    lflhust 写的程序没有达到逻辑拆分的目的,原因很简单,那个程序综合后生成的电路的流水线深度还是1。zf0579那个程序的流水线深度才是2,达到了拆分的目的。 作逻辑的出发点不是写HDL代码,而是在写代码前脑子里面要有你需要实现的逻辑的电路结构。

    作逻辑的出发点不是写HDL代码,而是在写代码前脑子里面要有。你需要实现的逻辑的电路结构。

来顶一下
返回首页
返回首页
上一篇:智能数据中心解决方案详细过程分析
下一篇:进行系统设计的Xilinx软件使用方法
 相关文章
 
 
跟贴共
笔 名 :   验证码:
网友评论仅供其表达个人看法,并不表明尚大教育同意其观点或证实其描述
距离2023年10月14日通信考试还有
通信各地考务机构
各省市通信报名简章