• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 實現拆分大組合邏輯的方法

    實現拆分大組合邏輯的方法

    作者: 時間:2010-06-20 來源:網絡 收藏
    圖1是很多為了提高系統時鐘采用的,但是沒有提供具體如何的實例。我覺得實例才是重要的。但我不明白在寫代碼時,如何知道這樣寫會被綜合成一個很大的,一些簡單的可以想到(比如大的計數器應該分成多個來做),但是更復雜的實在是不好理解。

    圖1


    可以通過流水線的方式分拆,這也是一種提高芯片速度的一種方式。 在邏輯中間插入寄存器,設計成流水。 很典型的例子就是調度器,如果做64調度器,可能中間的延時太長,不能滿足系統速度要求,這時候就可以做成一級16調度,一級4調度,來完成64調度的功能。

    本文引用地址:http://www.czjhyjcfj.com/article/151791.htm


    用加法器做例子,設輸入ABCD輸出OUT 上半部分就是: out = 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 OUT = 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代碼,而是在寫代碼前腦子里面要有。你需要的邏輯的電路結構。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 林周县| 天门市| 定日县| 长兴县| 普兰店市| 舟曲县| 镇平县| 伊吾县| 桐庐县| 龙陵县| 成安县| 隆化县| 大同县| 通化县| 辽宁省| 衢州市| 武义县| 滁州市| 五台县| 三河市| 竹北市| 扎赉特旗| 哈巴河县| 余庆县| 饶河县| 德钦县| 松江区| 平顶山市| 北安市| 南昌市| 台东市| 苏州市| 垦利县| 黄山市| 潢川县| 鲁山县| 化州市| 高淳县| 临西县| 夹江县| 荔浦县|