女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

FPGA基于線性迭代法的除法器設計

Hack電子 ? 來源:FPGA開發備忘錄 ? 作者:FPGA開發備忘錄 ? 2023-07-04 10:03 ? 次閱讀

01前言

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

02原理介紹

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

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

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

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

最后經過多次迭代后,由公式1和公式4得,

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

例子

利用線性迭代的方式計算33/9

步驟如下:
第1步:將分子分母轉換為[1,2)之間的數此時得
FZ0 =33/2**5 = 1.03125
FM0=9/2**3 = 1.125
以上部分在FPGA中相當于右移
由公式2、3得到
fm_shift_bit = 3
fz_shift_bit = 5
第2步:利用公式進行線性迭代,令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
與理論計算值誤差為4.0423075358072916666666666666667e-6

在實際過程應用中,我們可以根據實際的誤差要求確認迭代的次數。

01根據原理建立的matlab浮點數仿真模型

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

Code

matlab迭代運算代碼

function s = div_float(fz, fm, itr )
%----------------------判斷結果的符號-----------------
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
%------------迭代完成后計算商-------------------
%------------當分子分母同時等于0時,令商等于0,
%------------否則,當符號標志為正數時,令其等于商的最大值
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("迭代算出的結果");
figure;plot(s_real_reg);title("理論結果");
figure;plot(err_reg);title("誤差圖");
grid on;
 ? ?

下圖迭代參數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后所得到的理論值與線性迭代算出的值做差所得到的誤差圖可知,并不是迭代次數越多精度越小,當迭代次數達到一個臨界值后,迭代的次數其實對商的影響就不是很大了。

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

    關注

    1643

    文章

    21956

    瀏覽量

    614013
  • 除法器
    +關注

    關注

    2

    文章

    14

    瀏覽量

    13997
  • 時序
    +關注

    關注

    5

    文章

    397

    瀏覽量

    37779

原文標題:FPGA基于線性迭代法的除法器設計(一)

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    基于FPGA除法器純邏輯設計案例

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

    matlab牛頓迭代法全解

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

    問題:matlab實現牛頓迭代法求解非線性方程

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

    基于牛頓迭代法FPGA定點小數計算

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

    高速硬件除法器

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

    參數尋優的迭代法的基本原理是什么?伺服控制系統常用參數尋優算法是什么?

    參數尋優的迭代法的基本原理是什么?伺服控制系統常用參數尋優算法是什么?
    發表于 10-13 06:38

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

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

    物理光學迭代法計算任意形狀開口腔體RCS

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

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

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

    并行除法器 ,并行除法器結構原理是什么?

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

    高斯-牛頓迭代法簡介

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

    實例九— 除法器設計

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

    牛頓-拉夫遜迭代法原理及其實現

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

    FPGA常用運算模塊-除法器

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

    python牛頓迭代法

    牛頓迭代法是一種數值計算方法,用于求解方程的數值近似解。它是以英國科學家艾薩克·牛頓的名字命名的,最初由牛頓在17世紀末提出。牛頓迭代法基于一個簡單的原理:一條曲線的切線近似代替這條曲線,在切線與x
    的頭像 發表于 11-21 15:06 ?1351次閱讀