18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

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

使用Verilog HDL設(shè)計(jì)實(shí)現(xiàn)Cordic算法

lp7u_bia ? 來(lái)源:硅農(nóng) ? 作者:硅農(nóng) ? 2021-08-16 11:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

任何適合產(chǎn)品實(shí)現(xiàn)的算法,都是將簡(jiǎn)易實(shí)現(xiàn)作為第一目標(biāo)。CORDIC算法是建立在適應(yīng)性濾波器、FFT、解調(diào)器等眾多應(yīng)用基礎(chǔ)上計(jì)算超越函數(shù)的方法。其核心思想是二分逐次逼近。

CORDIC(Coordinate Rotation Digital Computer)算法即坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算方法,是J.D.Volder1于1959年首次提出,主要用于三角函數(shù)、雙曲線、指數(shù)、對(duì)數(shù)的計(jì)算。該算法通過(guò)基本的加和移位運(yùn)算代替乘法運(yùn)算,使得矢量的旋轉(zhuǎn)和定向的計(jì)算不再需要三角函數(shù)、乘法、開方、反三角、指數(shù)等函數(shù)。

本文是基于使用Verilog HDL設(shè)計(jì)實(shí)現(xiàn)Cordic算法,實(shí)現(xiàn)正弦、余弦、反正切函數(shù)的實(shí)現(xiàn)。將復(fù)雜的運(yùn)算轉(zhuǎn)化成RTL擅長(zhǎng)的加減法和乘法,而乘法運(yùn)算可以用移位運(yùn)算代替。Cordic算法有兩種模式,旋轉(zhuǎn)模式和向量模式??梢栽趫A坐標(biāo)系、線性坐標(biāo)系、雙曲線坐標(biāo)系使用。本文初步實(shí)現(xiàn)在圓坐標(biāo)系下的兩種模式的算法實(shí)現(xiàn)。

cfefd67e-fdb9-11eb-9bcf-12bb97331649.png

旋轉(zhuǎn)模式,迭代位移算法。假設(shè)有一點(diǎn)P0(x0,y0),經(jīng)過(guò)逆時(shí)針旋轉(zhuǎn)角度θ,到達(dá)點(diǎn)Pm(xm,ym),我們根據(jù)數(shù)學(xué)運(yùn)算可以得到公式如下:

xm = x0cosθ - y0sinθ

= cosθ(x0 – y0tanθ)

ym = x0sinθ +y0cosθ

=cosθ(x0tanθ+y0)

如果不考慮旋轉(zhuǎn)后的向量模值,只考慮旋轉(zhuǎn)角度,即去掉cosθ,得到如下方程式。這里旋轉(zhuǎn)的角度的正確的,但xm和ym的值增加。cosθ值是小于等于1的,它的倒數(shù)值大于等于1,所以xm和ym模值增大了。去掉cosθ項(xiàng)可以方便我們后面的坐標(biāo)平面旋轉(zhuǎn)的計(jì)算。這里稱為偽旋轉(zhuǎn)。

xm = x0 – y0tanθ ym =x0tanθ+y0

Cordic的方法核心就是偽旋轉(zhuǎn),將旋轉(zhuǎn)角θ細(xì)化成若干個(gè)大小固定的角度θi,規(guī)定θi滿足tanθi = 2^-i,通過(guò)一系列的迭代旋轉(zhuǎn),每次旋轉(zhuǎn)θi,i為迭代次數(shù),規(guī)定∑θi的范圍即旋轉(zhuǎn)角度θ的范圍為[-99.7, 99.7]。如果θ的大于這個(gè)范圍則可通過(guò)三角運(yùn)算操作轉(zhuǎn)化到該范圍的角度。

我們通過(guò)事先將所有每次旋轉(zhuǎn)的角度計(jì)算出來(lái),由于每次旋轉(zhuǎn)的角度是固定的,所以經(jīng)過(guò)i次旋轉(zhuǎn)的∑θi可能會(huì)超過(guò)θ,所以就必須設(shè)置一個(gè)方向值di,如果旋轉(zhuǎn)角度之和已經(jīng)小于θ,則di為1,下次旋轉(zhuǎn)繼續(xù)為逆時(shí)針旋轉(zhuǎn),如果旋轉(zhuǎn)角度之和大于θ,則di為-1,下次旋轉(zhuǎn)為順時(shí)針。設(shè)置zi+1為旋轉(zhuǎn)剩余角度,zi+1 = z0 – di *zi,z0 = θ,隨著i值的增大,zi+1會(huì)趨向于0時(shí),即旋轉(zhuǎn)結(jié)束。di與zi的符號(hào)位相同。

采用偽旋轉(zhuǎn)的方法,每次提出一個(gè)cosθi,旋轉(zhuǎn)結(jié)束后會(huì)產(chǎn)生一個(gè)∏cosθi的累乘,一旦我們確定了迭代次數(shù),∏cosθi就是一個(gè)常數(shù),迭代公式可寫為。這是將cosθi提出、tanθi 替換成 2^-i后的結(jié)果。di與zi的符號(hào)位相同。

xi+1 = xi - di * yi * 2^-i yi+1 = yi + di * xi * 2^-i zi+1 = z0 - di * θi

設(shè)迭代i = n - 1,那么旋轉(zhuǎn)n次后得到Pm的坐標(biāo)應(yīng)該為(xn * ∏cosθi, yn * ∏cosθi)。因?yàn)槊看蔚紩?huì)提出一個(gè)cosθi,旋轉(zhuǎn)n次后的xn和yn就會(huì)少乘一個(gè)∏cosθi,所以實(shí)際上最終的Pm坐標(biāo)角度近似于(xn * ∏cosθi, yn * ∏cosθi)。

xn * ∏cosθi = x0cosθ - y0sinθ yn * ∏cosθi = y0cosθ + x0sinθ xn = 1/∏cosθi (x0cosθ – y0sinθ) yn = 1/∏cosθi (y0cosθ +x0sinθ)

伸縮因子,KN = 1 / ∏cosθi,已知迭代次數(shù),我們可以預(yù)先計(jì)算KN的值。如下這是使用MATLAB計(jì)算出的迭代結(jié)果數(shù)值。

xn =KN (x0cosθ – y0sinθ) yn = KN (y0cosθ +x0sinθ)

從上表可以得出,我們預(yù)先計(jì)算出KN的值,然后令x0 = ∏cosθi,y0 = 0,則上述公式可化簡(jiǎn)為

xn = cosθ yn = sinθ 即可實(shí)現(xiàn)正弦、余弦操作了。旋轉(zhuǎn)模式

Cordic算法旋轉(zhuǎn)模式使用Verilog HDL的實(shí)現(xiàn)流程

確定迭代次數(shù),將每次迭代的角度計(jì)算出來(lái),預(yù)先定義為參數(shù),為了避免浮點(diǎn)運(yùn)算,將角度值向左移位16位,取整數(shù)部分。

根據(jù)迭代公式進(jìn)行迭代計(jì)算,本設(shè)計(jì)取16次迭代,從上表可以看出,當(dāng)?shù)螖?shù)越大時(shí),1/∏cosθi會(huì)趨向于一個(gè)確定值。如果對(duì)結(jié)果精度要求更高,可以設(shè)置更高的迭代次數(shù),根據(jù)迭代次數(shù),可以將伸縮因子KN = 1/∏cosθi計(jì)算出來(lái)。同樣將其左移16位。

xi+1 = xi - di * yi * 2^-i yi+1 = yi + di * xi * 2^-i zi+1 = z0 - di * θi

設(shè)置x0 = ∏cosθi,y0 = 0,則求出x16 = cosθ,y16 = sinθ。

這里需要注意的是,我們?cè)谶M(jìn)行迭代運(yùn)算的時(shí)候,將2^-i變成移位運(yùn)算,對(duì)于正余弦來(lái)說(shuō)是有正負(fù)的,所以在一開始定義的時(shí)候,就應(yīng)該定義成有符號(hào)數(shù),Verilog中也可以定義有符號(hào)數(shù),最高位表示符號(hào)位,定義如下

d05925c0-fdb9-11eb-9bcf-12bb97331649.jpg

迭代寄存器定義為有符號(hào)數(shù),那么我們移位運(yùn)算就不能用>>邏輯右移<<邏輯左移或來(lái)移位了,而是用>>>算術(shù)右移和<<<算術(shù)左移。邏輯左移也就相當(dāng)于算數(shù)左移,右邊統(tǒng)一添0?,邏輯右移,左邊統(tǒng)一添0?,算數(shù)右移,左邊添加的數(shù)和符號(hào)有關(guān)。

例如1010_1010, []是添加的位 邏輯左移一位:0101_010[0] 算數(shù)左移一位:0101_010[0] 邏輯右移一位:[0]101_0101 算數(shù)右移一位:[1]101_0101

迭代運(yùn)算采用16級(jí)流水線進(jìn)行運(yùn)算,最終需要判斷輸出的正余弦值在哪個(gè)象限,前面講旋轉(zhuǎn)角度θ的范圍為[-99.7,99.7],不在這個(gè)范圍我們要進(jìn)行三角運(yùn)算使其滿足這個(gè)范圍,當(dāng)輸入的角度小于90度即可進(jìn)行計(jì)算,當(dāng)輸入角度大于90度小于180度,將輸入角度減去90度并設(shè)定當(dāng)前角度處于第二象限,然后進(jìn)行計(jì)算,當(dāng)輸入角度大于180度小于270度,將輸入的角度減去180度設(shè)置當(dāng)前角度處于第三象限,進(jìn)行計(jì)算,當(dāng)輸入的角度大于270度,減去270設(shè)置當(dāng)前角度處于第四象限,進(jìn)行計(jì)算。象限的設(shè)定通過(guò)quarant寄存器實(shí)現(xiàn)。

如果角度在第一象限,sin(x) = sin(a),cos(x) = sin(a)最后的結(jié)果x16 = cosθ, y16 = sinθ,這里我想起了那句口訣,一全正,二正弦,三正切,四余弦

如果角度在第二象限,

sin(x) = sin(a+90) = cos(a),

cos(x) = cos(a+90) = -sin(a)

如果角度在第三象限,

sin(x) = sin(a+180) = -sin(a),

cos(x) = cos(a+180) = -cos(a)

如果角度在第四象限,

sin(x) = sin(a+270) = cos(a),

cos(x) = cos(a+270) = -sin(a)

d0a88142-fdb9-11eb-9bcf-12bb97331649.png

對(duì)于正數(shù),我們直接賦值輸出,負(fù)數(shù),這里使用有符號(hào)數(shù)表示,將其取反加1即可。最終使用modelsim對(duì)算法進(jìn)行仿真,從波形圖上看已經(jīng)初步實(shí)現(xiàn)了sin,cos函數(shù)。

向量模式

Cordic算法在向量模式下的計(jì)算方法和旋轉(zhuǎn)模式基本上是類似的,設(shè)有一點(diǎn)P0(x0, y0),經(jīng)過(guò)旋轉(zhuǎn)一定角度到與x軸重合,得到點(diǎn)Pm(xm, ym),即ym = 0。

xm = x0cosθ - y0sinθ

= cosθ(x0 – y0tanθ)

ym = y0cosθ + x0sinθ

= cosθ(y0 +x0tanθ) = 0

我們?cè)O(shè)置x0 = x, y0 = y, z0 = 0,迭代次數(shù)為16,經(jīng)過(guò)16次迭代后得到zn = θ = arctan(y/x)和坐標(biāo)所代表的向量的模值d = xm = xn * ∏cosθi,di與yi方向相反,即當(dāng)時(shí)結(jié)束運(yùn)算。實(shí)現(xiàn)方法為判斷yi的符號(hào)位,符號(hào)位為1,di為1,符號(hào)位為0,di為-1。

xi+1 = xi - di * yi * 2^-i

yi+1 = yi + di * xi * 2^-i

zi+1 = z0 - di * θi

關(guān)于反正切函數(shù),由于在[-99.7°,99.7°]范圍內(nèi),所以我們輸入向量P0(x0, y0)時(shí),需要保證其在第一、四象限。

d0feb292-fdb9-11eb-9bcf-12bb97331649.png

下面是使用MATLAB計(jì)算出來(lái)的數(shù)據(jù)和FPGA計(jì)算出來(lái)的數(shù)據(jù)進(jìn)行比較。

d11d1bc4-fdb9-11eb-9bcf-12bb97331649.jpg

d141af8e-fdb9-11eb-9bcf-12bb97331649.jpg

從FPGA計(jì)算出的結(jié)果與MATLAB來(lái)比較,和實(shí)際結(jié)果之間的誤差還是挺小的,畢竟是硬件計(jì)算出來(lái)的數(shù)據(jù),向量的誤差就比較大了,如果對(duì)于精度比較高的計(jì)算,我們可以通過(guò)提高迭代次數(shù)來(lái)提高精度。

使用ISE進(jìn)行綜合并下載工程到開發(fā)板上實(shí)驗(yàn)結(jié)果比較。

旋轉(zhuǎn)模式

Sin的理論數(shù)據(jù)

Chipscope抓取到的數(shù)據(jù)

d159baca-fdb9-11eb-9bcf-12bb97331649.jpg

Cos的理論數(shù)據(jù)

d1a7c7ec-fdb9-11eb-9bcf-12bb97331649.jpg

Chipscope抓取到的數(shù)據(jù)

d1c563e2-fdb9-11eb-9bcf-12bb97331649.jpg

向量模式

Arctan(y/x)理論數(shù)值

d1eb7820-fdb9-11eb-9bcf-12bb97331649.jpg

Chipscope抓取到的數(shù)據(jù)

d20cba58-fdb9-11eb-9bcf-12bb97331649.jpg

坐標(biāo)的模值的理論數(shù)據(jù)

責(zé)任編輯:haq

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

    關(guān)注

    30

    文章

    1369

    瀏覽量

    113820
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    330

    瀏覽量

    48703

原文標(biāo)題:基于Verilog的Cordic算法實(shí)現(xiàn)

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    如何利用Verilog HDL在FPGA上實(shí)現(xiàn)SRAM的讀寫測(cè)試

    本篇將詳細(xì)介紹如何利用Verilog HDL在FPGA上實(shí)現(xiàn)SRAM的讀寫測(cè)試。SRAM是一種非易失性存儲(chǔ)器,具有高速讀取和寫入的特點(diǎn)。在FPGA中實(shí)現(xiàn)SRAM讀寫測(cè)試,包括設(shè)計(jì)SRA
    的頭像 發(fā)表于 10-22 17:21 ?3555次閱讀
    如何利用<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>在FPGA上<b class='flag-5'>實(shí)現(xiàn)</b>SRAM的讀寫測(cè)試

    使用Simulink自動(dòng)生成浮點(diǎn)運(yùn)算HDL代碼(Part 1)

    引言 想要實(shí)現(xiàn)浮點(diǎn)運(yùn)算功能,如果自己寫Verilog代碼,需要花費(fèi)較多的時(shí)間和精力。好在Simulink HDL Coder工具箱提供了自動(dòng)代碼生成技術(shù)。下圖展示了HDL Coder如
    發(fā)表于 10-22 06:48

    基于CORDIC算法的NCO實(shí)現(xiàn)

    純分享帖,點(diǎn)擊下方附件免費(fèi)獲取完整資料~~~ 內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持一下,謝謝! 【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)第一時(shí)間告知,刪除內(nèi)容,謝謝!
    發(fā)表于 07-25 14:24

    CORDIC算法原理及實(shí)現(xiàn)

    純分享帖,點(diǎn)擊下方附件免費(fèi)獲取完整資料~~~ 內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持一下,謝謝! 【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)第一時(shí)間告知,刪除內(nèi)容,謝謝!
    發(fā)表于 07-22 17:28

    【微五科技CF5010RBT60開發(fā)板試用體驗(yàn)】Cordic數(shù)學(xué)計(jì)算測(cè)試

    Cordic數(shù)學(xué)計(jì)算測(cè)試本文分享cordic硬件數(shù)學(xué)計(jì)算。 Xprintf.h配置支持浮點(diǎn)打印#define XF_USE_FP1 /* 1: Enable support for floating
    發(fā)表于 06-27 23:55

    vivado IP核cordic中sin和cos的計(jì)算

    Architectural Configuration選擇為并行模式,具有單周期數(shù)據(jù)吞吐量和較大的硅面積。具有并行結(jié)構(gòu)配置的CORDIC核使用移位相加子級(jí)數(shù)組并行實(shí)現(xiàn)這些移位相加操作。該并形電路的實(shí)現(xiàn)規(guī)模與(內(nèi)部精度 * 迭代次
    的頭像 發(fā)表于 05-03 18:16 ?1136次閱讀
    vivado IP核<b class='flag-5'>cordic</b>中sin和cos的計(jì)算

    FPGA Verilog HDL語(yǔ)法之編譯預(yù)處理

    Verilog HDL語(yǔ)言和C語(yǔ)言一樣也提供了編譯預(yù)處理的功能。“編譯預(yù)處理”是Verilog HDL編譯系統(tǒng)的一個(gè)組成部分。Verilog
    的頭像 發(fā)表于 03-27 13:30 ?940次閱讀
    FPGA <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>語(yǔ)法之編譯預(yù)處理

    一文詳解Verilog HDL

    Verilog HDL(Hardware Description Language)是一種硬件描述語(yǔ)言,用于從算法級(jí)、門級(jí)到開關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建?!,F(xiàn)實(shí)生活中多用于專用集成電路
    的頭像 發(fā)表于 03-17 15:17 ?3446次閱讀
    一文詳解<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>

    淺談Verilog和VHDL的區(qū)別

    Verilog和VHDL是兩種廣泛使用的硬件描述語(yǔ)言(HDL),它們用于描述和模擬數(shù)字電路系統(tǒng)的行為和結(jié)構(gòu)。這兩種語(yǔ)言的主要作用是幫助工程師設(shè)計(jì)、仿真和驗(yàn)證集成電路(IC)和系統(tǒng)級(jí)芯片(SoC)中的硬件模塊。
    的頭像 發(fā)表于 02-17 14:20 ?2246次閱讀
    淺談<b class='flag-5'>Verilog</b>和VHDL的區(qū)別

    Verilog 與 ASIC 設(shè)計(jì)的關(guān)系 Verilog 代碼優(yōu)化技巧

    Verilog與ASIC設(shè)計(jì)的關(guān)系 Verilog作為一種硬件描述語(yǔ)言(HDL),在ASIC設(shè)計(jì)中扮演著至關(guān)重要的角色。ASIC(Application Specific Integrated
    的頭像 發(fā)表于 12-17 09:52 ?1351次閱讀

    Verilog 測(cè)試平臺(tái)設(shè)計(jì)方法 Verilog FPGA開發(fā)指南

    Verilog測(cè)試平臺(tái)設(shè)計(jì)方法是Verilog FPGA開發(fā)中的重要環(huán)節(jié),它用于驗(yàn)證Verilog設(shè)計(jì)的正確性和性能。以下是一個(gè)詳細(xì)的Verilog測(cè)試平臺(tái)設(shè)計(jì)方法及
    的頭像 發(fā)表于 12-17 09:50 ?1444次閱讀

    Verilog與VHDL的比較 Verilog HDL編程技巧

    Verilog 與 VHDL 比較 1. 語(yǔ)法和風(fēng)格 VerilogVerilog 的語(yǔ)法更接近于 C 語(yǔ)言,對(duì)于有 C 語(yǔ)言背景的工程師來(lái)說(shuō),學(xué)習(xí)曲線較平緩。它支持結(jié)構(gòu)化編程,代碼更直觀,易于
    的頭像 發(fā)表于 12-17 09:44 ?2430次閱讀

    數(shù)字系統(tǒng)設(shè)計(jì)與Verilog HDL

    數(shù)字系統(tǒng)設(shè)計(jì)與Verilog HDL 1.兼職職位 ,不坐班,等待公司分配任務(wù),時(shí)間自由 2.薪資: 200-5000不等可具體協(xié)商 3.要求:國(guó)內(nèi)985/211院校在讀或畢業(yè),或者國(guó)外前100的院校 4.英語(yǔ)水平:四級(jí)500+/六級(jí)440+/雅思6.5+/托福90+
    發(fā)表于 11-06 17:57

    FPGA延時(shí)Verilog HDL實(shí)現(xiàn)

    可以在任意時(shí)刻啟動(dòng),可以重復(fù)啟動(dòng),延時(shí)時(shí)長(zhǎng)可調(diào),單位可切換(ms/us),在50MHz時(shí)鐘下的延時(shí)范圍是1ms-85899ms/1us-85899us。
    的頭像 發(fā)表于 11-05 11:26 ?1057次閱讀

    Verilog硬件描述語(yǔ)言參考手冊(cè)

    一. 關(guān)于 IEEE 1364 標(biāo)準(zhǔn)二. Verilog簡(jiǎn)介三. 語(yǔ)法總結(jié)四. 編寫Verilog HDL源代碼的標(biāo)準(zhǔn)五. 設(shè)計(jì)流程
    發(fā)表于 11-04 10:12 ?4次下載