0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog:for循環(huán)的綜合實現(xiàn)

冬至子 ? 來源:IC的世界 ? 作者:IC小鴿 ? 2023-10-09 16:31 ? 次閱讀

1.采用for循環(huán)來計算1的數(shù)量

采用for循環(huán)語句,逐個bit位判斷是否為1,為1則累加,否則保持不變,最終輸出輸入信號中1的數(shù)量。

module try_top #(
    parameter   DATA_WIDTH    =       8                                       ,   //
    parameter   CNT_WIDTH     =       ($clog2(DATA_WIDTH)+1)                      //
)
(

    input                                               clk                                     ,   //
    input                                               rst_n                                   ,   //
    input               [DATA_WIDTH-1:0]                data_in                                 ,   //
    output  reg         [CNT_WIDTH-1:0]                 one_cnt                                     //

);


always@(*) begin
    one_cnt  =    'b0             ;   
    for(int i=0; i< DATA_WIDTH;i=i+1) begin : one_cnt_gen
        if(data_in[i])
        one_cnt             =          one_cnt + 1'b1    ;  
else
        one_cnt             =          one_cnt         ;   
    end
end

endmodule

綜合實現(xiàn)--實際就是一團組合邏輯

module try_top ( clk, rst_n, data_in, one_cnt );
input [7:0] data_in;
output [3:0] one_cnt;
input clk, rst_n;
wire   n12, n13, n14, n15, n16, n17, n18, n19, n20, n21, n22;

NAND3_X1N_*Cell_TYPE*   U12 ( .A(n22), .B(n14), .C(n13), .Y(n20) );
AND2_X1N_*Cell_TYPE*   U13 ( .A(n14), .B(n13), .Y(n21) );
OA1B2_X1N_*Cell_TYPE*   U14 ( .B0(n14), .B1(n13), .A0N(n21), .Y(one_cnt[0])
         );
ADDF_X1N_*Cell_TYPE*   U15 ( .A(data_in[7]), .B(data_in[6]), .CI(n12), .CO(
n17), .S(n14) );
ADDF_X1N_*Cell_TYPE*   U16 ( .A(data_in[1]), .B(data_in[0]), .CI(data_in[2]), 
.CO(n16), .S(n12) );
ADDF_X1N_*Cell_TYPE*   U17 ( .A(data_in[3]), .B(data_in[5]), .CI(data_in[4]), 
.CO(n15), .S(n13) );
ADDF_X1N_*Cell_TYPE*   U18 ( .A(n17), .B(n16), .CI(n15), .CO(n18), .S(n22) );
INVP_X1R_*Cell_TYPE*   U19 ( .A(n18), .Y(n19) );
NOR2_X1F_*Cell_TYPE*   U20 ( .A(n20), .B(n19), .Y(one_cnt[3]) );
AOI21_X1N_*Cell_TYPE*  U21 ( .A0(n20), .A1(n19), .B0(one_cnt[3]), .Y(
one_cnt[2]) );
OA21_X1N_*Cell_TYPE*   U22 ( .A0(n22), .A1(n21), .B0(n20), .Y(one_cnt[1]) );
endmodule

image.png

2.綜合實現(xiàn)解讀

綜合工具基本原理也是for循環(huán)不斷計算,提取電路結(jié)構,只不過最后一級for循環(huán)的電路結(jié)果會覆蓋之前的計算結(jié)果,for循環(huán)結(jié)束,電路結(jié)構也就確定了。

因此綜合工具要求for循環(huán)的次數(shù)一定是固定值,而不能是個變量。

此處需要注意的是:除了協(xié)議中明確規(guī)定是屬于測試類的語法格式,其他語法格式理論上都是可以綜合的,關鍵在于綜合工具是否支持。所以是否可綜合完全取決于綜合工具的版本迭代。

3.人工實現(xiàn)解讀

剛才說過了綜合工具的實現(xiàn)方式,接下來我們試試人工翻譯for循環(huán)。

為了簡化分析流程,以DATA_WIDTH為2為例進行講解。首先進行窮舉操作,列出所有的情況,因為dat_in只有2bit,所以本案例中只有4種情況,然后計算cnt_one的表達式,將cnt_one的表達式進行邏輯化簡,最終得出電路圖。

image.png

image.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1343

    瀏覽量

    109926
  • for循環(huán)

    關注

    0

    文章

    61

    瀏覽量

    2490
收藏 人收藏

    評論

    相關推薦

    verilog HDL 可綜合模型的結(jié)構

    。 建立可綜合模型的原則 要保證Verilog HDL賦值語句的可綜合性,在建模時應注意以下要點: (1)不使用初始化語句。 (2)不使用帶有延時的描述。 (3)不使用循環(huán)次數(shù)不確定的
    發(fā)表于 10-20 08:10

    Verilog綜合子集

    Verilog綜合子集
    發(fā)表于 04-01 12:44

    verilog 循環(huán)以及@(clock)的綜合

    1,在一個verilog程序里,如果循環(huán)是一個循環(huán)次數(shù)不可定的循環(huán),那么它能被綜合工具綜合嗎2,
    發(fā)表于 02-03 15:29

    討論Verilog語言的綜合問題

    在本篇里,我們討論 Verilog 語言的綜合問題,Verilog HDL (Hardware Description Language) 中文名為硬件描述語言,而不是硬件設計語言。這個名稱提醒我們
    發(fā)表于 07-29 07:42

    Verilog HDL綜合實用教程

    Verilog HDL 綜合實用教程第1章 基礎知識第2章 從Verilog結(jié)構到邏輯門第3章 建模示例第4章 模型的優(yōu)化第5章 驗證附錄A 可綜合的語言結(jié)構附錄B 通用庫
    發(fā)表于 07-20 11:21 ?86次下載
    <b class='flag-5'>Verilog</b> HDL<b class='flag-5'>綜合</b>實用教程

    Verilog HDL數(shù)字設計與綜合(第二版)

    電子發(fā)燒友網(wǎng)站提供《Verilog HDL數(shù)字設計與綜合(第二版).txt》資料免費下載
    發(fā)表于 04-04 15:57 ?0次下載

    綜合Verilog語法和語義

    綜合Verilog語法和語義(劍橋大學,影?。?第七版
    發(fā)表于 05-21 14:50 ?27次下載
    可<b class='flag-5'>綜合</b>的<b class='flag-5'>Verilog</b>語法和語義

    Verilog HDL數(shù)字設計與綜合課件(第二版)

    介紹Verilog HDL數(shù)字設計與綜合的課件
    發(fā)表于 12-23 10:58 ?0次下載

    如何設計可綜合Verilog代碼和應該遵循什么原則

    在接觸Verilog 語法參考手冊的時候,我們發(fā)現(xiàn)其提供了一組非常豐富的功能來描述硬件。所以大家往往會疑惑那些Verilog語句是可綜合的,那些是只能用于寫Testbench的,其實,參考手冊中只有
    發(fā)表于 04-20 10:59 ?4501次閱讀

    Verilog綜合循環(huán)語句

    Verilog中提供了四種循環(huán)語句,可用于控制語句的執(zhí)行次數(shù),分別為:for,while,repeat,forever。其中,for,while,repeat是可綜合的,但循環(huán)的次數(shù)需
    發(fā)表于 10-13 12:23 ?1.9w次閱讀

    如何使用Verilog HDL描述可綜合電路?

    1、如何使用Verilog HDL描述可綜合電路 Verilog 有什么奇技淫巧?我想最重要的是理解其硬件特性。Verilog HDL語言僅是對已知硬件電路的文本描述。所以編寫前: 對
    的頭像 發(fā)表于 04-04 11:19 ?4152次閱讀
    如何使用<b class='flag-5'>Verilog</b> HDL描述可<b class='flag-5'>綜合</b>電路?

    Verilog邏輯設計中的循環(huán)語句和運算符

    “ 本文主要分享了在Verilog設計過程中一些經(jīng)驗與知識點,主要包括循環(huán)語句(forever、repeat、while和for)、運算符?!?/div>
    的頭像 發(fā)表于 03-15 11:41 ?5053次閱讀

    Verilog循環(huán)語句簡介

    在這篇文章中,我們討論了可以在verilog中使用的不同類型的循環(huán) - for循環(huán),while循環(huán),forever循環(huán)和repeat
    的頭像 發(fā)表于 04-15 09:19 ?2988次閱讀

    Verilog常用的循環(huán)語句及用途

    本文主要介紹verilog常用的循環(huán)語句,循環(huán)語句的用途,主要是可以多次執(zhí)行相同的代碼或邏輯。
    的頭像 發(fā)表于 05-12 18:26 ?2257次閱讀

    verilog中for循環(huán)是串行執(zhí)行還是并行執(zhí)行

    的for循環(huán)也是并行執(zhí)行的。 Verilog中的for循環(huán)可以用來實現(xiàn)重復的操作,例如在一個時鐘周期中對多個電路進行操作。在循環(huán)內(nèi)部,多個語
    的頭像 發(fā)表于 02-22 16:06 ?2604次閱讀