一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

FPGA的算法解析1:整數(shù)操作與加減法器

FPGA之家 ? 來(lái)源:FPGA之家 ? 2023-02-13 15:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一. 整數(shù)的概念

整數(shù)在 IEEE 的規(guī)定上有短整數(shù) short integer , 中整數(shù) integer 和 長(zhǎng)整數(shù) long integer ,它們之間的關(guān)系如下:

7ecdd8d2-a924-11ed-bfe3-dac502259ad0.jpg

為了方便討論,下面均以短整數(shù)作為例子。

原碼:最高為符號(hào)位,之后是數(shù)值位。

+62 的原碼表示為 00111110
-62 的原碼表示為 10111110

補(bǔ)碼:正數(shù)和0的補(bǔ)碼與原碼相同,負(fù)數(shù)的補(bǔ)碼是將其原碼的符號(hào)位保持不變,對(duì)數(shù)值位逐位求反,然后在最低位加一。對(duì)補(bǔ)碼求補(bǔ)就可以得到原碼。

+6 的原碼表示為 00000110            +6 的補(bǔ)碼表示為 00000110 
-5 的原碼表示為 10000101            -5 的補(bǔ)碼表示為 11111011

補(bǔ)碼的運(yùn)算規(guī)則:在FPGA的底層,有符號(hào)數(shù)都是按照補(bǔ)碼來(lái)存儲(chǔ)的。補(bǔ)碼有一個(gè)特別的好處就是可以將減法轉(zhuǎn)換為加法,從而將加減法統(tǒng)一。

7-5:
7 的補(bǔ)碼是 00000111,-5 的補(bǔ)碼是 11111011 ,7 + (-5) = 00000111 + 11111011 = (1)00000010
由于只有8位,因此將進(jìn)位舍去得到加和的結(jié)果為 00000010,恰好是 2 的補(bǔ)碼
3-4:
3 的補(bǔ)碼是 00000011,-4 的補(bǔ)碼是 11111100 ,3 + (-4) = 00000011 + 11111100 = 11111111
得到加和的結(jié)果為 11111111,恰好是 -1 的補(bǔ)碼

溢出:兩個(gè)補(bǔ)碼相加時(shí),如果產(chǎn)生的和超出了有效數(shù)字位所表示的范圍,則計(jì)算結(jié)果會(huì)出錯(cuò),解決的方法是擴(kuò)大字長(zhǎng)。

二. 簡(jiǎn)單的加法與減法操作

通過(guò)上面的討論,我們可以很容易的看到,從理論上講在底層對(duì)補(bǔ)碼只用加法就可以完成加法與減法的操作,但是由于我們?cè)谏蠈邮菍?duì)行為進(jìn)行描述,因此也是要用到減法的。

module adder8(sum,ina,inb);
// 定義輸入輸出變量,這個(gè)加法器不考慮進(jìn)位,只需要對(duì)輸入數(shù)據(jù)進(jìn)行最高位擴(kuò)展
output [8:0] sum;
input [7:0] ina,inb;
assign sum = {ina[7], ina} + {inb[7],inb};
endmodule

7ee031d0-a924-11ed-bfe3-dac502259ad0.png

module subber8(dif,ina,inb);
        // 定義輸入輸出變量,這個(gè)減法器不考慮借位,只需要對(duì)輸入數(shù)據(jù)進(jìn)行最高位擴(kuò)展
output [8:0] dif;
input [7:0] ina,inb;
assign dif = {ina[7], ina} - {inb[7],inb};
endmodule

7efef61a-a924-11ed-bfe3-dac502259ad0.png

這是對(duì)有符號(hào)數(shù)設(shè)計(jì)的加減法器,可以看到上面的加減法都完成的很棒,并沒(méi)有產(chǎn)生溢出的問(wèn)題。

三. 采用流水線操作的加法器(耗時(shí)角度考慮)

7f1328e2-a924-11ed-bfe3-dac502259ad0.jpg

這是一個(gè)四級(jí)流水線加法器的框圖,上面的加法器采用5級(jí)鎖存、4級(jí)加法的結(jié)構(gòu)。每一個(gè)加法器實(shí)現(xiàn)2位數(shù)據(jù)和上一個(gè)進(jìn)位的相加,整個(gè)加法器只受2位全加器的工作速度的限制,平均完成一個(gè)加法運(yùn)算只需要一個(gè)時(shí)鐘周期的時(shí)間,需要注意的是由于有四級(jí)流水線,因此這個(gè)加法器在輸出第一個(gè)計(jì)算值的時(shí)候有四個(gè)時(shí)鐘周期的延時(shí)。這里只給出無(wú)符號(hào)數(shù)的流水線加法器的模型,都寫出來(lái)太長(zhǎng)了(其實(shí)我也沒(méi)有寫 )。代碼寫的比較繁瑣,但是邏輯更清楚,主要是當(dāng)做學(xué)習(xí)流水線結(jié)構(gòu)的例子,真正在工程中用的話感覺(jué)還是調(diào)IP核吧。

module pipeadder8(cout,sum,ina,inb,cin,clk,rst_n);
// 定義輸入輸出變量
output [7:0] sum;
output cout;
input [7:0] ina,inb;
input cin,clk,rst_n;
reg [7:0] tmpa,tmpb,sum;
reg cout;
reg tmpci,firstco,secondco,thirdco;
reg[1:0] firsts;
reg[5:0] firsta,firstb;
reg[3:0] seconds;
reg[3:0] seconda,secondb;
reg[5:0] thirds;
reg[1:0] thirda, thirdb;
// 這里進(jìn)行第0級(jí)數(shù)據(jù)緩存
always@(posedge clk or negedge rst_n) begin
if(!rst_n) {tmpa,tmpb,tmpci} <= {8'd0,8'd0,1'b0};
else {tmpa,tmpb,tmpci} <= {ina,inb,cin};
end
// 這里進(jìn)行第1級(jí)數(shù)據(jù)緩存,并且完成最低兩位以及進(jìn)位位的加法
always@(posedge clk or negedge rst_n) begin
if(!rst_n) {firstco,firsts,firsta,firstb} = {1'b0,2'd0,6'd0,6'd0};
else begin
{firstco,firsts} <= tmpa[1:0] + tmpb[1:0] + tmpci;
firsta <= tmpa[7:2];
firstb <= tmpb[7:2];
end
end
// 這里進(jìn)行第2級(jí)數(shù)據(jù)緩存,并且完成次低兩位以及進(jìn)位位的加法
always@(posedge clk or negedge rst_n) begin
if(!rst_n) {secondco,seconds,seconda,secondb} = {1'b0,4'd0,4'd0,4'd0};
else begin
{secondco,seconds} <= {{1'b0,firsta[1:0]} + {1'b0,firstb[1:0]} + firstco, firsts};
seconda <= firsta[5:2];
secondb <= firstb[5:2];
end
end
// 這里進(jìn)行第3級(jí)數(shù)據(jù)緩存,并且完成次次低兩位以及進(jìn)位位的加法
always@(posedge clk or negedge rst_n) begin
if(!rst_n) {thirdco,thirds,thirda,thirdb} = {1'b0,6'd0,2'd0,2'd0};
else begin
{thirdco,thirds} <= {{1'b0,seconda[1:0]} + {1'b0,secondb[1:0]} + secondco, seconds};
thirda <= seconda[3:2];
thirdb <= secondb[3:2];
end
end
// 這里進(jìn)行第4級(jí)數(shù)據(jù)緩存,并且完成次次次低兩位以及進(jìn)位位的加法
always@(posedge clk or negedge rst_n) begin
if(!rst_n) {cout,sum} = {1'b0,8'd0};
else {cout,sum} <= {{1'b0,thirda[1:0]} + {1'b0,thirdb[1:0]} + thirdco, thirds};
end


endmodule

7f23b1f8-a924-11ed-bfe3-dac502259ad0.png

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

    關(guān)注

    1645

    文章

    22042

    瀏覽量

    618247
  • 加法器
    +關(guān)注

    關(guān)注

    6

    文章

    183

    瀏覽量

    30757
  • 減法器
    +關(guān)注

    關(guān)注

    1

    文章

    26

    瀏覽量

    17130

原文標(biāo)題:FPGA的算法解析1:整數(shù)操作與加減法器

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    數(shù)字電路中加法器減法器邏輯圖分析

    多位二進(jìn)制減法器,是由加法電路構(gòu)成的;在加法電路的基礎(chǔ)上,減法與加法采用同一套電路,實(shí)現(xiàn)加減法共用。
    發(fā)表于 09-01 16:02 ?2.4w次閱讀
    數(shù)字電路中加<b class='flag-5'>法器</b>和<b class='flag-5'>減法器</b>邏輯圖分析

    減法器電路與原理 減法器電路圖分享

    減法器是一種電路,它可以實(shí)現(xiàn)二進(jìn)制數(shù)字的減法運(yùn)算。減法器的工作原理基于位運(yùn)算和進(jìn)位/借位機(jī)制。
    的頭像 發(fā)表于 02-19 09:36 ?1.1w次閱讀
    <b class='flag-5'>減法器</b>電路與原理 <b class='flag-5'>減法器</b>電路圖分享

    如何設(shè)計(jì)一個(gè)16比特的減法器呢?

    減法電路是基本集成運(yùn)放電路的一種,算術(shù)運(yùn)算電路主要包括數(shù)字**加法器電路、數(shù)字減法器電路、數(shù)字乘法器電路和數(shù)字除法器電路。
    的頭像 發(fā)表于 02-19 10:00 ?1345次閱讀
    如何設(shè)計(jì)一個(gè)16比特的<b class='flag-5'>減法器</b>呢?

    超長(zhǎng)數(shù)加減法運(yùn)算器及相關(guān)指令設(shè)計(jì),實(shí)現(xiàn)精確計(jì)算

    8位單片機(jī)能夠?qū)崿F(xiàn)超長(zhǎng)數(shù)計(jì)算嗎?我說(shuō):"只要存儲(chǔ)器夠大,按照下面的方法設(shè)計(jì)的加減法運(yùn)算器及指令,就能夠編寫程序完成。"1。用全加器搭建一個(gè)8位加法器;2。將最低下進(jìn)位前連接一個(gè)1位寄存
    發(fā)表于 09-22 03:09

    減法器設(shè)計(jì)異常

    如圖用op07做的減法器,不管正向輸入端和反向輸入端如何輸入,輸出都不滿足減法器的理論值,求大神指導(dǎo)下謝謝?。?!
    發(fā)表于 02-14 15:09

    哪一個(gè)是減法器?負(fù)反饋在減法器電路中的原理?

    https://bbs.elecfans.com/forum.ph ... 1&extra=#pid6113991我的問(wèn)題是減法器電路中,需要負(fù)反饋嗎?
    發(fā)表于 08-31 19:46

    基于單片機(jī)如何去實(shí)現(xiàn)20以內(nèi)整數(shù)加減法訓(xùn)練呢

    基于單片機(jī)如何去實(shí)現(xiàn)20以內(nèi)整數(shù)加減法訓(xùn)練呢?有哪些具體要求以及操作步驟呢?
    發(fā)表于 11-02 07:00

    本的二進(jìn)制加法/減法器,本的二進(jìn)制加法/減法器原理

    本的二進(jìn)制加法/減法器,本的二進(jìn)制加法/減法器原理   兩個(gè)二進(jìn)制數(shù)字Ai,Bi和一個(gè)進(jìn)位輸入Ci相加,產(chǎn)生一個(gè)和輸出Si,以及一個(gè)進(jìn)位輸
    發(fā)表于 04-13 11:11 ?5385次閱讀

    加減法電路

    加減法電路 利用一個(gè)差動(dòng)輸入的運(yùn)放就可同時(shí)實(shí)現(xiàn)加減法運(yùn)算,這種運(yùn)算電路如圖5.4-3所示。
    發(fā)表于 04-22 17:50 ?1.1w次閱讀
    <b class='flag-5'>加減法</b>電路

    減法器電路

    減法器電路 一個(gè)通常的應(yīng)用就是用于去除立體聲磁帶中的原唱而留下伴音(在錄制時(shí)兩通道中的原唱電平是一樣的,但是伴音是略有不同的)。
    發(fā)表于 04-24 10:45 ?1w次閱讀
    <b class='flag-5'>減法器</b>電路

    帶輸入緩沖的減法器電路

    帶輸入緩沖的減法器電路
    發(fā)表于 09-04 21:32 ?3135次閱讀
    帶輸入緩沖的<b class='flag-5'>減法器</b>電路

    8位加法器減法器設(shè)計(jì)實(shí)習(xí)報(bào)告

    8位加法器減法器設(shè)計(jì)實(shí)習(xí)報(bào)告
    發(fā)表于 09-04 14:53 ?134次下載

    C語(yǔ)言教程之整數(shù)加減法練習(xí)

    C語(yǔ)言教程之整數(shù)加減法練習(xí),很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-22 17:45 ?0次下載

    基于OP07的減法器設(shè)計(jì)

    基于OP07的減法器設(shè)計(jì)
    發(fā)表于 05-15 09:17 ?13次下載

    FPGA常用運(yùn)算模塊-加減法器和乘法器

    本文是本系列的第二篇,本文主要介紹FPGA常用運(yùn)算模塊-加減法器和乘法器,xilinx提供了相關(guān)的IP以便于用戶進(jìn)行開(kāi)發(fā)使用。
    的頭像 發(fā)表于 05-22 16:13 ?6376次閱讀
    <b class='flag-5'>FPGA</b>常用運(yùn)算模塊-<b class='flag-5'>加減法器</b>和乘<b class='flag-5'>法器</b>