1.采用for循環來計算1的數量
采用for循環語句,逐個bit位判斷是否為1,為1則累加,否則保持不變,最終輸出輸入信號中1的數量。
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
綜合實現--實際就是一團組合邏輯
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
2.綜合實現解讀
綜合工具基本原理也是for循環不斷計算,提取電路結構,只不過最后一級for循環的電路結果會覆蓋之前的計算結果,for循環結束,電路結構也就確定了。
因此綜合工具要求for循環的次數一定是固定值,而不能是個變量。
此處需要注意的是:除了協議中明確規定是屬于測試類的語法格式,其他語法格式理論上都是可以綜合的,關鍵在于綜合工具是否支持。所以是否可綜合完全取決于綜合工具的版本迭代。
3.人工實現解讀
剛才說過了綜合工具的實現方式,接下來我們試試人工翻譯for循環。
為了簡化分析流程,以DATA_WIDTH為2為例進行講解。首先進行窮舉操作,列出所有的情況,因為dat_in只有2bit,所以本案例中只有4種情況,然后計算cnt_one的表達式,將cnt_one的表達式進行邏輯化簡,最終得出電路圖。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Verilog
+關注
關注
28文章
1345瀏覽量
109996 -
for循環
+關注
關注
0文章
61瀏覽量
2495
發布評論請先 登錄
相關推薦
verilog HDL 可綜合模型的結構
。 建立可綜合模型的原則 要保證Verilog HDL賦值語句的可綜合性,在建模時應注意以下要點: (1)不使用初始化語句。 (2)不使用帶有延時的描述。 (3)不使用循環次數不確定的
發表于 10-20 08:10
討論Verilog語言的綜合問題
在本篇里,我們討論 Verilog 語言的綜合問題,Verilog HDL (Hardware Description Language) 中文名為硬件描述語言,而不是硬件設計語言。這個名稱提醒我們
發表于 07-29 07:42
Verilog HDL綜合實用教程
Verilog HDL 綜合實用教程第1章 基礎知識第2章 從Verilog結構到邏輯門第3章 建模示例第4章 模型的優化第5章 驗證附錄A 可綜合的語言結構附錄B 通用庫
發表于 07-20 11:21
?86次下載
如何設計可綜合的Verilog代碼和應該遵循什么原則
在接觸Verilog 語法參考手冊的時候,我們發現其提供了一組非常豐富的功能來描述硬件。所以大家往往會疑惑那些Verilog語句是可綜合的,那些是只能用于寫Testbench的,其實,參考手冊中只有
發表于 04-20 10:59
?4541次閱讀
Verilog可綜合的循環語句
Verilog中提供了四種循環語句,可用于控制語句的執行次數,分別為:for,while,repeat,forever。其中,for,while,repeat是可綜合的,但循環的次數需
發表于 10-13 12:23
?1.9w次閱讀
如何使用Verilog HDL描述可綜合電路?
1、如何使用Verilog HDL描述可綜合電路 Verilog 有什么奇技淫巧?我想最重要的是理解其硬件特性。Verilog HDL語言僅是對已知硬件電路的文本描述。所以編寫前: 對
Verilog邏輯設計中的循環語句和運算符
“ 本文主要分享了在Verilog設計過程中一些經驗與知識點,主要包括循環語句(forever、repeat、while和for)、運算符。”
Verilog中循環語句簡介
在這篇文章中,我們討論了可以在verilog中使用的不同類型的循環 - for循環,while循環,forever循環和repeat
verilog中for循環是串行執行還是并行執行
的for循環也是并行執行的。 Verilog中的for循環可以用來實現重復的操作,例如在一個時鐘周期中對多個電路進行操作。在循環內部,多個語
評論