在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

最少需要幾個加法器IP才可以實現累加器的功能呢?

sanyue7758 ? 來源:Vuko-wxh ? 2023-08-18 09:38 ? 次閱讀

已知一個加法器IP,其功能是計算兩個數的和,但這個和延遲兩個周期才會輸出。現在有一串連續的數據輸入,每個周期都不間斷,試問最少需要例化幾個上述的加法器IP,才可以實現累加的功能。

設計分析

實現累加器的加法器例化的個數。按照原文大佬的設計方法,因為數據連續且加法器的延遲周期是2,使用使用一個實現累加,會有一半的數據丟失。那這樣設計他就將奇數偶數的數據進行了分開做一級累加,然后第二級將奇數偶數的累加結果再累加。這樣做共需消耗3個加法器。

這樣設計當然沒問題,但是這樣設計是否是最少呢?我先拋出我的思考,我認為在允許少量邏輯設計的情況下,最少需要例化兩個上述的加法器IP可以實現累加。

如果比較極限的情況下,一個都可以,先把一串數據使用寄存器緩存,然后一個一個取出來慢慢算即可,但這樣是不太可取的,首先,數據是連續的并沒有給出數據的極限長度,也就是說不論用任何涉及存儲結構進行緩存,都沒法確保該次數據能完全被存儲。如果題目改成一串連續數據輸入,長度最大為10,那我認為用寄存器緩存這樣的設計是合理的。

設計架構

回到設計思路:用兩個加法器的結構如圖示。

997a1744-3d13-11ee-ac96-dac502259ad0.png

設計實現

加法器設計

假設兩個時鐘周期延時加法器代碼如下,通過例化加法器進行構建累加器。

//加法器IP
moduleadder
#(parameterDATA_WIDTH=8)(
inputclk,
inputrst_n,
input[DATA_WIDTH-1:0]a_in,
input[DATA_WIDTH-1:0]b_in,
outputreg[DATA_WIDTH-1:0]out
);
reg[DATA_WIDTH-1:0]sum;
always@(posedgeclkornegedgerst_n)begin
if(rst_n=='d0)begin
sum<=?'d0;
??????out?<=?'d0;
????end
????else?begin
??????sum?<=?a_in?+?b_in;
??????out?<=?sum;
????end
??end
endmodule

累加器設計

//累加器實現
moduleadder_for_acc
#(parameterDATA_WIDTH=8)
(
inputclk,
inputrst_n,
input[DATA_WIDTH-1:0]din,
inputdin_valid,
outputregdout_valid,
outputreg[DATA_WIDTH-1:0]dout
);

reg[DATA_WIDTH-1:0]din_r0;

//打一拍
always@(posedgeclkornegedgerst_n)begin
if(rst_n=='d0)begin
din_r0<=?'d0;
????end
????else?if(din_valid==1'B1)begin
??????din_r0<=?din;
????end
????else?begin
??????din_r0<='d0;
????end
??end

??//adder0_valid信號
??reg?adder0_valid;
??always?@(posedge?clk?or?negedge?rst_n)begin
????if(rst_n?==?'d0)begin
??????adder0_valid?<=?'d0;
????end
????else?if(din_valid==1'B1)begin
??????adder0_valid<=!adder0_valid;
????end
????else?begin
??????adder0_valid<='d0;
????end
??end

??wire[DATA_WIDTH-1:0]?a_in?=?(adder0_valid?&&?din_valid)?din:0;
??wire[DATA_WIDTH-1:0]?b_in?=?(adder0_valid)?din_r0:0;
??wire[DATA_WIDTH-1:0]?ab_sum;

??adder?adder0_dut?(
????.clk??(clk???),
????.rst_n(rst_n?),
????.a_in?(a_in??),
????.b_in?(b_in??),
????.out??(ab_sum)
??);
??//第一級加法器輸出有效信號
??reg?[1:0]adder0_valid_dly;
??wire?ab_sum_valid?=?adder0_valid_dly[1];
??always?@(posedge?clk?)?begin
??????adder0_valid_dly<={adder0_valid_dly[0],adder0_valid};
??end

??wire?[DATA_WIDTH-1:0]?sum_in;
??wire?[DATA_WIDTH-1:0]?ab_sum_in?=?(ab_sum_valid)?ab_sum:0;
??wire?[DATA_WIDTH-1:0]?accsum_in?=?(ab_sum_valid)?sum_in:dout;

??adder?adder1_dut?(
????.clk??(clk??????),
????.rst_n(rst_n????),
????.a_in?(ab_sum_in),
????.b_in?(accsum_in),
????.out??(sum_in???)
??);
??
??//第二級加法器輸出有效信號
??reg?[3:0]din_valid_r0;
??reg?[1:0]adder1_valid_dly;
??wire?adder1_outvld?=?adder1_valid_dly[1];
??always?@(posedge?clk?)?begin
????adder1_valid_dly<={adder1_valid_dly[0],ab_sum_valid};
??end
??//輸出
??always?@(posedge?clk?)?begin
????din_valid_r0<={din_valid_r0[2:0],(din_valid?||?adder0_valid)};
??end
??always?@(posedge?clk?or?negedge?rst_n)?begin
????if(rst_n?==?'d0)begin
??????dout?<=?'d0;
??????dout_valid?<=?'d0;
????end
????else?if(adder1_outvld?==?1?&&?(din_valid_r0[3]==1?&&?din_valid_r0[2]==0))begin
??????dout?<=?sum_in?;
??????dout_valid?<=?'d1;
????end
????else?begin
??????dout?<=?dout?;
??????dout_valid?<=?'d0;
????end
??end

endmodule

代碼架構設計

打拍:先對數據用寄存器緩存一拍,輸入數據暫時用in[i]表示,緩存。

第一級加法器輸入選擇valid:因為前級積累一拍的數據,設計valid用于指示加法器的輸入數據。

第一級加法器信號輸入:根據valid信號進行選擇數據輸入。

調用第一級加法器,同時對輸入valid信號進行打兩拍處理,指示有效的輸出數據。

第二級加法器信號輸入:根據valid信號進行選擇數據輸入。

調用第二級加法器,同時對輸入valid信號進行打兩拍處理,指示有效的輸出數據。

輸出結果和valid信號。

經過分析,目前設計延時是4拍,也即兩級,這里dout和valid使用的是時序邏輯輸出,所以在輸入valid拉低后的第五個時鐘周期輸出正確的結果。

仿真測試

設計仿真測試代碼對代碼進行測試,這里使用了遞增數測試代碼可用性,在實際測試時,可通過改變DATA_LEN的大小測試單次遞增累加后的結果,后續結果依次遞增為第一次的N倍。

`timescale1ns/1ps
moduleadder_for_acc_tb;

//Parameters
localparamDATA_WIDTH=8;
localparamDATA_LEN=5;
//Ports
regclk=1;
regrst_n=0;
reg[DATA_WIDTH-1:0]din;
regdin_valid=0;
wiredout_valid;
wire[DATA_WIDTH-1:0]dout;

adder_for_acc
#(
.DATA_WIDTH(
DATA_WIDTH)
)
adder_for_acc_dut(
.clk(clk),
.rst_n(rst_n),
.din(din),
.din_valid(din_valid),
.dout_valid(dout_valid),
.dout(dout)
);
always@(posedgeclkornegedgerst_n)begin
if(rst_n=='d0)begin
din<=?'d0;
??????din_valid?<=?'d0;
????end
????else?if(dout_valid?==?1)begin
??????din?<=?'d0;
??????din_valid?<=?'d1;
????end
????else?if(din?==?DATA_LEN)begin
??????din?<=?din;
??????din_valid?<=?'d0;
????end
????else?if(din?!=?DATA_LEN)begin
??????din?<=?din?+?1;
??????din_valid?<=?'d1;
????end
????else?begin
??????din?<=?din;
??????din_valid?<=?'d0;
????end
??end

??always?#5??clk?=?!?clk?;
??initial?begin
????begin
??????#100;
??????rst_n?=?1;
??????#1000;
??????$finish;
????end
??end

?
endmodule

仿真截圖

99a5d2c6-3d13-11ee-ac96-dac502259ad0.png

仿真分析

在圖示仿真可知,累加器功能正常,在din_valid信號拉低后第五拍可得到輸出結果,功能正常。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5398

    瀏覽量

    122709
  • 存儲器
    +關注

    關注

    38

    文章

    7610

    瀏覽量

    165868
  • 仿真器
    +關注

    關注

    14

    文章

    1027

    瀏覽量

    84635
  • 加法器
    +關注

    關注

    6

    文章

    183

    瀏覽量

    30520
  • 累加器
    +關注

    關注

    0

    文章

    50

    瀏覽量

    9600

原文標題:仿真測試

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    運算放大器的同相加法器和反相加法器

      運算放大器構成加法器 可以分為同相加法器和反相加法器
    發表于 08-05 17:17 ?3.3w次閱讀
    運算放大器的同相<b class='flag-5'>加法器</b>和反相<b class='flag-5'>加法器</b>

    IP加法器

    IP加法器
    發表于 08-14 14:24

    什么是加法器?加法器的原理是什么 ?

    什么是加法器?加法器的原理是什么 反相加法器等效原理圖解析
    發表于 03-11 06:30

    計算機累加器加法器功能嗎,累加器是什么_累加器的作用及原理介紹 精選資料推薦

    累加器的概念在中央處理中,累加器(accumulator)是一種寄存,用來儲存計算產生的中間結果。如果沒有像累加器這樣的寄存
    發表于 08-30 08:57

    加法器,加法器是什么意思

    加法器,加法器是什么意思 加法器 :  加法器是為了實現加法的。  即是產生數的和的裝置。加數
    發表于 03-08 16:48 ?5667次閱讀

    十進制加法器,十進制加法器工作原理是什么?

    十進制加法器,十進制加法器工作原理是什么?   十進制加法器可由BCD碼(二-十進制碼)來設計,它可以在二進制加法器的基礎上加上適當的“
    發表于 04-13 10:58 ?1.4w次閱讀

    FPU加法器的設計與實現

    浮點運算的核心運算部件是浮點加法器,它是實現浮點指令各種運算的基礎,其設計優化對于提高浮點運算的速度和精度相當關鍵。文章從浮點加法器算法和電路實現
    發表于 07-06 15:05 ?47次下載
    FPU<b class='flag-5'>加法器</b>的設計與<b class='flag-5'>實現</b>

    同相加法器電路原理與同相加法器計算

    同相加法器輸入阻抗高,輸出阻抗低 反相加法器輸入阻抗低,輸出阻抗高.加法器是一種數位電路,其可進行數字的加法計算。當選用同相加法器時,如A輸
    發表于 09-13 17:23 ?5.8w次閱讀
    同相<b class='flag-5'>加法器</b>電路原理與同相<b class='flag-5'>加法器</b>計算

    加法器是如何實現

     verilog實現加法器,從底層的門級電路級到行為級,本文對其做出了相應的闡述。
    發表于 02-18 14:53 ?6469次閱讀
    <b class='flag-5'>加法器</b>是如何<b class='flag-5'>實現</b>的

    超前進位加法器是如何實現記憶的

    行波進位加法器和超前進位加法器都是加法器,都是在邏輯電路中用作兩個數相加的電路。我們再來回顧一下行波進位加法器
    發表于 08-05 16:45 ?1893次閱讀
    超前進位<b class='flag-5'>加法器</b>是如何<b class='flag-5'>實現</b>記憶的<b class='flag-5'>呢</b>

    數字設計筆試Verilog手撕代碼—累加器

    實現累加器加法器例化的個數。按照原文大佬的設計方法,因為數據連續且加法器的延遲周期是2,使用使用一個實現
    的頭像 發表于 06-02 16:35 ?3378次閱讀
    數字設計筆試Verilog手撕代碼—<b class='flag-5'>累加器</b>

    加法器的原理及采用加法器的原因

    有關加法器的知識,加法器是用來做什么的,故名思義,加法器是為了實現加法的,它是一種產生數的和的裝置,那么
    的頭像 發表于 06-09 18:04 ?5495次閱讀

    基于FPGA實現Mem加法器

    前段時間和幾個人閑談,看看在FPGA里面實現一個Mem加法器怎么玩兒
    的頭像 發表于 10-17 10:22 ?819次閱讀
    基于FPGA<b class='flag-5'>實現</b>Mem<b class='flag-5'>加法器</b>

    加法器的原理是什么 加法器有什么作用

    加法器是數字電路中的基本組件之一,用于執行數值的加法運算。加法器的基本原理和作用可以從以下幾個方面進行詳細闡述。
    的頭像 發表于 05-23 15:01 ?4495次閱讀
    <b class='flag-5'>加法器</b>的原理是什么 <b class='flag-5'>加法器</b>有什么作用

    串行加法器和并行加法器的區別?

    串行加法器和并行加法器是兩種基本的數字電路設計,用于執行二進制數的加法運算。它們在設計哲學、性能特點以及應用場景上有著明顯的區別。
    的頭像 發表于 05-23 15:06 ?3463次閱讀
    主站蜘蛛池模板: 欧美性狂猛bbbbbxxxxx | 国产妇女在线 | 国产网站黄 | 加勒比一区二区三区 | 性生交大片免费一级 | 欧美操bb | 999毛片免费观看 | 久久777国产线看观看精品卜 | 波多野结衣在线观看一区二区 | 免费在线观看视频 | yy4080一级毛片免费观看 | 国产四虎| 国产欧美日韩haodiaose | 美女张开大腿让男人捅 | 26uuu另类亚洲欧美日本一 | 亚洲理论在线观看 | 国产精品天天看 | 久操久操久操 | 婷婷成人丁香五月综合激情 | 免费人成黄页在线观看1024 | 国产色婷婷精品综合在线 | 久热网| 国产精品一区二区三区四区 | 久久国产午夜精品理论篇小说 | 大香伊在人线免费 | 人人澡 人人澡 人人看 | 亚洲综合五月天欧美 | 亚洲邪恶天堂影院在线观看 | 国模私拍在线观看 | 亚洲一区二区三区播放在线 | 日操夜操天天操 | 天天做天天爱夜夜爽 | 精品国产乱码久久久久久浪潮 | 中文字幕777| 成年人视频黄色 | 久久99精品久久久久久臀蜜桃 | 欧美αv日韩αv另类综合 | 高清国产在线观看 | 久久国产免费福利永久 | 欧美高清免费一级在线 | 国产精品一区二区综合 |