色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    5390

    瀏覽量

    121901
  • 存儲器
    +關注

    關注

    38

    文章

    7553

    瀏覽量

    164909
  • 仿真器
    +關注

    關注

    14

    文章

    1020

    瀏覽量

    84153
  • 加法器
    +關注

    關注

    6

    文章

    183

    瀏覽量

    30336
  • 累加器
    +關注

    關注

    0

    文章

    50

    瀏覽量

    9529

原文標題:仿真測試

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

收藏 人收藏

    評論

    相關推薦

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

      運算放大器構成加法器 可以分為同相加法器和反相加法器
    發表于 08-05 17:17 ?3.2w次閱讀
    運算放大器的同相<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 ?5624次閱讀

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

    十進制加法器,十進制加法器工作原理是什么?   十進制加法器可由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 ?6369次閱讀
    <b class='flag-5'>加法器</b>是如何<b class='flag-5'>實現</b>的

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

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

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

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

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

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

    基于FPGA實現Mem加法器

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

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

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

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

    串行加法器和并行加法器是兩種基本的數字電路設計,用于執行二進制數的加法運算。它們在設計哲學、性能特點以及應用場景上有著明顯的區別。
    的頭像 發表于 05-23 15:06 ?3023次閱讀
    主站蜘蛛池模板: 好紧好湿太硬了我太爽了小说 | 国产在线播放精品视频 | 久久久久婷婷国产综合青草 | 动漫美女被爆挤奶歪歪漫画 | 欧美日韩国产在线一区二区 | 性xxx欧美| yellow片在线观看免费观看动漫 | 亚洲伊人色综合久久天天伊人 | 亚洲成在人线视频 | 国产精品视频yy9099 | www.中文字幕在线观看 | 欧美重口绿帽video | 在线免费观看亚洲视频 | 体内精69xxxxxx喷潮 | 又色又爽又黄gif动态视频 | 超碰97超碰在线视频哦 | 久久成人国产精品一区二区 | 天天看学生视频 | 偷拍国产精品在线播放 | 久久高清一本无码 | 国产小视频在线高清播放 | 给个男人都懂的网址2019 | 伊人久久伊人 | 国产 亚洲 中文字幕 在线 | 国产成人亚洲综合无 | 久拍国产在线观看 | 国产超碰AV人人做人人爽 | 琪琪色在线播放 | 国产精品视频国产永久视频 | 色欲AV精品人妻一区二区麻豆 | 国产日韩在线欧美视频 | 欧洲精品不卡1卡2卡三卡四卡 | 亚洲理论片在线中文字幕 | 欧美黑人巨大videos免费 | 无码国产成人777爽死在线观看 | 亚洲第一天堂无码专区 | 一个人色导航 | 黑丝女仆恋上我 | 十分钟免费视频大全在线观看 | 国产精品高潮AV久久无码 | jk制服啪啪网站 |