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

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

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

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

FPGA基于線性迭代法的除法器設(shè)計(jì)

Hack電子 ? 來源:FPGA開發(fā)備忘錄 ? 作者:FPGA開發(fā)備忘錄 ? 2023-07-04 10:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01前言

FPGA實(shí)現(xiàn)除法的方法有幾種,比如直接用/來進(jìn)行除法運(yùn)算,調(diào)用IP核進(jìn)行除法運(yùn)算,但這兩種方式都有個共同的問題——都是黑盒子,在進(jìn)行時序違例處理時,往往不好操作,比如想打打拍改善下時序都不知從何下手。

02原理介紹

我們都知道商(s)= 分子(FZ)/分母(FM),該計(jì)算過程可等效于公式1

b2df245e-1a0e-11ee-962d-dac502259ad0.png

其中FM0為FM/2**fm_shift_bit后所得的取值范圍為[1,2)數(shù),通過取一個合適的fm_shift_bit的值,使得FM0的值在[1,2]之間。

同理FZ0為FZ/2**fz_shift_bit后所得的取值范圍為[1,2)數(shù),通過取一個合適的fz_shift_bit的值,使得FZ0的值在[1,2]之間。

最后經(jīng)過多次迭代后,由公式1和公式4得,

當(dāng)FM0*F1*F2*......FN=1時 s=FZ0*F1*F2*......FN*2**(fz_shift_bit-fm_shift_bit)

例子

利用線性迭代的方式計(jì)算33/9

步驟如下:
第1步:將分子分母轉(zhuǎn)換為[1,2)之間的數(shù)此時得
FZ0 =33/2**5 = 1.03125
FM0=9/2**3 = 1.125
以上部分在FPGA中相當(dāng)于右移
由公式2、3得到
fm_shift_bit = 3
fz_shift_bit = 5
第2步:利用公式進(jìn)行線性迭代,令FM0*F1*F2*......FN=FM_PRE,使FM_PRE接近于1
由第1步得FM0=1.125 
再通過公式5和公式6得
F1=2-1.125=0.875        FM1=1.125*0.875=0.984375  
F2=2-0.9875=1.0125       FM2=0.984375*1.0125=0.9966796875
F3=2-0.9966796875=1.0033203125 
迭代 3次后FM_PRE=1.125*0.875*1.0125*1.0033203125 = 0.99998897552490234375接近于1
此時由公式4得:
s=1.03125*F1*F2*F3*2**(5-3)= 3.66662624359130859375
與理論計(jì)算值誤差為4.0423075358072916666666666666667e-6

在實(shí)際過程應(yīng)用中,我們可以根據(jù)實(shí)際的誤差要求確認(rèn)迭代的次數(shù)。

01根據(jù)原理建立的matlab浮點(diǎn)數(shù)仿真模型

具體的matlab模型代碼如下所示

Code

matlab迭代運(yùn)算代碼

function s = div_float(fz, fm, itr )
%----------------------判斷結(jié)果的符號-----------------
if ((fz >= 0) && (fm >= 0)) || ((fz < 0) && (fm < 0))
 ? ?sign_flag = 0;
else
 ? ?sign_flag = 1;
end


%---------------限定分子范圍在[1,2)---------
if fz >=0
  fz = fz;
else 
  fz = -fz;
end


fz_shift_bit = 0;
if fz ~= 0
  fz_inner = fz ;
 while(fz_inner >= 2 || fz_inner < 1)
 ? ? ?if fz_inner >= 2
    fz_inner = floor(fz_inner/2);
   fz_shift_bit = fz_shift_bit + 1;
   else
    fz_inner = fz_inner * 2;
   fz_shift_bit = fz_shift_bit - 1;
  end
 end
  fz = fz/2^fz_shift_bit;
end
%fprintf('a_shift_bit = ');disp(a_shift_bit);
%---------------限定分母范圍在[1,2)---------
if fm >=0
  fm = fm;
else 
  fm = -fm;
end


fm_shift_bit = 0;
if fm ~= 0
  fm_inner = fm ;
 while((fm_inner >= 2) || (fm_inner < 1))
 ? ? ?if fm_inner >= 2
    fm_inner = floor(fm_inner/2);
   fm_shift_bit = fm_shift_bit + 1;
   else
    fm_inner = fm_inner * 2;
   fm_shift_bit = fm_shift_bit - 1;
  end
 end
  fm = fm/2^fm_shift_bit;
end
%fprintf('b_shift_bit = ');disp(b_shift_bit);
%-----------迭代過程------------------
for cnt = 0:itr-1
  f = 2 - fm;
 fz = fz * f;
 fm = fm * f;
end
%------------迭代完成后計(jì)算商-------------------
%------------當(dāng)分子分母同時等于0時,令商等于0,
%------------否則,當(dāng)符號標(biāo)志為正數(shù)時,令其等于商的最大值
if fm ~= 0
  s = fz * 2^(fz_shift_bit - fm_shift_bit);
%  fprintf('a = ');disp(a);
%  fprintf('b = ');disp(b);
%  fprintf('c = ');disp(c);
 if sign_flag == 0
   s = s;
  else
   s = -s;
%  fprintf('~c = ');disp(c);
 end
else 
  if fz == 0
   s = 0;
 else 
   if sign_flag == 0
    s = 256 - 2^-7;
   else
    s = -256;
  end
 end
end

Code

matlab仿真tb

clear;
clc;
close all;


itr = 8;
%-----------定義分子分母和商的精度---------------
delt_fz = 2^-4;
delt_fm = 2^-2;
delt_s = 2^-7;


cntwhole = 1;
for fz = -3232 - delt_fz
  for fm = -8 : delt_fm : 8 - delt_fm
    s = div_float(fz, fm, itr);
  
  s_real = fz/fm;
  
  if s_real >= 256
    s_real = 256 - delt_s;
  elseif s_real < -256
 ? ? ? ?s_real = -256;
 ? ?else 
 ? ? ? ?s_real = s_real;
 ? ?end
 ? ?
 ? ?err = abs(s_real - s);
 ? ?
 ? ?s_reg(cntwhole) = s;
 ? ?s_real_reg(cntwhole) = s_real;
 ? ?err_reg(cntwhole) = err;
 ? ?
 ? ?cntwhole = cntwhole + 1;
 ?end
end
figure;plot(s_reg);title("迭代算出的結(jié)果");
figure;plot(s_real_reg);title("理論結(jié)果");
figure;plot(err_reg);title("誤差圖");
grid on;
 ? ?

下圖迭代參數(shù)itr取不同值時的理論值與線性迭代值之間的誤差圖。

itr=8時

此時最大誤差為2.7466*10**-7

b3236c9a-1a0e-11ee-962d-dac502259ad0.png

itr=10時

此時最大誤差為7.10543*10**-15

b35d9ff0-1a0e-11ee-962d-dac502259ad0.png

itr=50時

此時最大誤差為7.10543*10**-15

b3814e5a-1a0e-11ee-962d-dac502259ad0.png

由itr分別取8,10,50后所得到的理論值與線性迭代算出的值做差所得到的誤差圖可知,并不是迭代次數(shù)越多精度越小,當(dāng)?shù)螖?shù)達(dá)到一個臨界值后,迭代的次數(shù)其實(shí)對商的影響就不是很大了。

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

    關(guān)注

    1645

    文章

    22020

    瀏覽量

    617104
  • 除法器
    +關(guān)注

    關(guān)注

    2

    文章

    14

    瀏覽量

    14017
  • 時序
    +關(guān)注

    關(guān)注

    5

    文章

    397

    瀏覽量

    37903

原文標(biāo)題:FPGA基于線性迭代法的除法器設(shè)計(jì)(一)

文章出處:【微信號:Hack電子,微信公眾號:Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    基于FPGA除法器純邏輯設(shè)計(jì)案例

    除法運(yùn)算。很多人覺得不就是除法嘛,直接打上/即可,但是,FPGA是不能正確綜合這個除法器的,綜合的結(jié)果只是一個固定數(shù)值,而不像其他微處理器。可以這么說,用
    的頭像 發(fā)表于 06-17 10:17 ?7915次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>除法器</b>純邏輯設(shè)計(jì)案例

    matlab牛頓迭代法全解

    線性方程(或方程組)問題可以描述為求 x 使得f(x) = 0。在求解非線性方程的方法中,牛頓迭代法是求非線性方程(非線性方程組)數(shù)值解的
    發(fā)表于 03-08 16:22

    問題:matlab實(shí)現(xiàn)牛頓迭代法求解非線性方程

    "matlab實(shí)現(xiàn)牛頓迭代法求解非線性方程"。通過試著運(yùn)行作者的matlab code,產(chǎn)生了如下一些疑問,請各位老師幫忙解答,不勝感謝。clearclcsyms x1 x2 x3
    發(fā)表于 07-05 02:53

    基于牛頓迭代法FPGA定點(diǎn)小數(shù)計(jì)算

    倒數(shù)運(yùn)算分為這兩個步驟則需要更多的時間開銷和空間開銷。而采用常規(guī)的浮點(diǎn)運(yùn)算單元(FPU)來求解的話,同樣需要很長的計(jì)算時間。本文介紹一種基于牛頓迭代法(又稱Newton-Raphson算法)的平方根
    發(fā)表于 07-18 07:33

    高速硬件除法器

    這是一個高速硬件除法器,要求畫出此硬件的除法器的工作流程圖。說明其工作原理特別是高速原理。要求有仿真時序波形圖并說出說明在fpga上驗(yàn)證器硬件功能。
    發(fā)表于 12-17 09:10

    參數(shù)尋優(yōu)的迭代法的基本原理是什么?伺服控制系統(tǒng)常用參數(shù)尋優(yōu)算法是什么?

    參數(shù)尋優(yōu)的迭代法的基本原理是什么?伺服控制系統(tǒng)常用參數(shù)尋優(yōu)算法是什么?
    發(fā)表于 10-13 06:38

    迭代法迭代陣譜半徑新上界

    引用雙嚴(yán)格對角占優(yōu)的概念,針對線性方程組bAx=在求數(shù)值解時常用的迭代方法,給出了Jacobi和Gauss-Seidel迭代法迭代陣譜半徑的新上界,該新上界優(yōu)于嚴(yán)格對角占優(yōu)矩陣條件下得
    發(fā)表于 11-18 00:07 ?6次下載

    物理光學(xué)迭代法計(jì)算任意形狀開口腔體RCS

    物理光學(xué)迭代法計(jì)算任意形狀開口腔體RCS:本文首先介紹了物理光學(xué)迭代法(IPO)的基本原理,并用此方法計(jì)算了簡單無遮擋開口腔體的RCS。在此基礎(chǔ)上,引進(jìn)遮擋判斷原則,計(jì)算了
    發(fā)表于 10-23 12:05 ?16次下載

    迭代法求指紋圖像中的閥值

    摘要:給出使用直方圖方法求閥值的例子;結(jié)合直方圖方法提出用于計(jì)算最優(yōu)閥值的迭代法,該方法是基于256級的指紋灰度圖像計(jì)算;最后給出迭代法中初值的選擇
    發(fā)表于 03-24 12:47 ?1279次閱讀
    用<b class='flag-5'>迭代法</b>求指紋圖像中的閥值

    并行除法器 ,并行除法器結(jié)構(gòu)原理是什么?

    并行除法器 ,并行除法器結(jié)構(gòu)原理是什么?   1.可控加法/減法(CAS)單元    和陣列乘法器非常相似,陣列式除法器也是一種并行運(yùn)算部件,采用大規(guī)模集成
    發(fā)表于 04-13 10:46 ?1.6w次閱讀

    高斯-牛頓迭代法簡介

    高斯牛頓迭代法簡介,包括高斯牛頓迭代法推演及及結(jié)論
    發(fā)表于 01-08 16:21 ?0次下載

    實(shí)例九— 除法器設(shè)計(jì)

    4.3 實(shí)例九 除法器設(shè)計(jì)4.3.1. 本章導(dǎo)讀要求掌握除法器原理,并根據(jù)原理設(shè)計(jì)除法器模塊以及設(shè)計(jì)對應(yīng)的測試模塊,最后在 Robei可視化仿真軟件經(jīng)行功能實(shí)現(xiàn)和仿真驗(yàn)證。設(shè)計(jì)原理這個除法器
    發(fā)表于 11-07 10:51 ?18次下載
    實(shí)例九— <b class='flag-5'>除法器</b>設(shè)計(jì)

    牛頓-拉夫遜迭代法原理及其實(shí)現(xiàn)

    直接看數(shù)學(xué)公式描述如何迭代不直觀,先來看動圖就很容易理解牛頓迭代法為什么叫迭代法以及怎樣迭代
    的頭像 發(fā)表于 04-17 09:04 ?4104次閱讀

    FPGA常用運(yùn)算模塊-除法器

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

    python牛頓迭代法

    牛頓迭代法是一種數(shù)值計(jì)算方法,用于求解方程的數(shù)值近似解。它是以英國科學(xué)家艾薩克·牛頓的名字命名的,最初由牛頓在17世紀(jì)末提出。牛頓迭代法基于一個簡單的原理:一條曲線的切線近似代替這條曲線,在切線與x
    的頭像 發(fā)表于 11-21 15:06 ?1428次閱讀
    主站蜘蛛池模板: 日本视频一区二区三区 | 日本在线不卡一区二区 | 韩国三级视频网站 | 人人插视频 | 激情亚洲| 51精品视频免费国产专区 | 在线观看黄网 | ww欧洲ww在线视频看 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 国产jlzzjlzz视频免费 | h视频网站在线 | 免费在线色视频 | 天堂网. www在线资源 | 国产三级观看久久 | 久久精品国产精品亚洲人人 | 免费一级欧美片在线观免看 | 日木69xxxhd| 欧美伊人| 九九热在线精品 | 天天操天天摸天天干 | 日日摸夜夜添免费毛片小说 | 欧美色香蕉 | 狠狠色丁香婷婷综合激情 | 天天爆操| 亚洲香蕉毛片久久网站老妇人 | 免费黄视频在线观看 | 乱h亲女小说 | 亚洲欧洲第一页 | 欧美性性性性性ⅹxxbbbb | 狠狠干狠狠操视频 | 亚洲男同tv | 国产一二精品 | 久久久久久久国产精品电影 | 亚洲成人一级片 | 中日韩精品视频在线观看 | 特级一级毛片 | 欧美另类自拍 | 最新亚洲一区二区三区四区 | 最新欧美精品一区二区三区 | 四虎永久免费在线观看 | 色多多www视频在线观看免费 |