版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Experiment 05:CORDIC 算法建模故事說到,在原公式的盡頭,終于找到最適合硬件的簡化公式,它不僅沒有浮點數(shù)(被定點數(shù)取代),而且操作也只有位移與加減而已。不過,這次的任務(wù)卻非常嚴重,要建立有史以來第一只數(shù)學模塊,它是 CORDIC 算法的雛形,而且會影響未來的走勢。擦掉冷汗以后,就要踏出人生中關(guān)鍵的一步 .代碼 5.1首先是建立常量表,但沒有數(shù)組機能的描述語言,要如何建模常量表,其實是一件有趣。常見的方法就是利用片上內(nèi)存制作查表,但是筆者并不打算這樣做,取而代之是嘗試另一種更大膽的做法。如代碼 5.1 是偽代碼的常量表,對此 Verilog 可以這樣描述。代碼 5.2如代碼 5
2、.2 所示,可以atan 內(nèi)存,32 位的位寬,16 位計數(shù)范圍,以及 16位的補償精度,然后再為賦予初值。理論上,這種行為會使綜合器消耗片上內(nèi)存制作查表,然而是否如此,具體還要考慮怎樣使用它,詳情成數(shù)組來對待即可。往后再。讀者暫時把它當1.for(i = 0; i 0)4.tx = x + y i;ty = y - x i;x = tx;y = ty;angle += atani;1.reg 31:0 atan 15:0;2.3.initial begin4.atan0 = 32d2949120; atan1 = 32d1740992; atan2 = 32d919872; atan3 =
3、32d466944;5.atan4 = 32d234368; atan5 = 32d117312; atan6 = 32d58688; atan7 = 32d29312;6.atan8 = 32d14656; atan9 = 32d7360; atan10 = 32d3648; atan11 = 32d1856;7.atan12 = 32d896; atan13 = 32d448; atan14 = 32d256; atan15 = 32d128;8.end1.constatan = 2949120, 1740992, 919872, 466944,2.234368, 117312, 5868
4、8, 29312,3.14656, 7360, 3648, 1856,4.896, 448, 256, 128 ;代碼 5.3如代碼 5.3 所示,這是 CORDIC 算法的操作,它比較麻煩,因為里面有FOR 循環(huán)以及符號位,此外還要數(shù)組。按照傳統(tǒng),如果使用查表的話,建??隙〞筚M周章,所以筆者決定犯規(guī)一點,對此 Verilog 可以這樣描述。代碼 5.4如代碼 5.4 所示,筆者采用最喜愛的仿順序操作,第 1 行先帶有符號位的寄存器,步驟 0 是前期操作,xy 給予 216 的補償精度。步驟 116 表示矢量移動 16 次,其中 y作為參考系,如果 y 大于 0 值就執(zhí)行相加關(guān)系的操作。注意
5、,實現(xiàn) y0 的前提條件,y必須是符號位. 如果不是,那么 y31 = 0 也有一樣的效果。第 1011 行是帶符號位的位移操作,操作對象必須事先利用 singed 關(guān)鍵字符號位才有效。老實說,筆者也是第一次使用“”操作符而已,平常都不太位的存在。第 1213 行則是更新 xy 坐標,第 14 行更新角度。有符號1.reg signed 31:0 x,y,tx,ty,deg; / 帶符號位的寄存器 2.reg 7:0i;3.0: / 補償精度begin x = input_x 16; y = input_y 16; deg = 32d0; i 0 )/ 矢量向上旋轉(zhuǎn)beginty = y i-
6、1;/ y 帶符號位位移tx = x i-1;/ x 帶符號位位移x = x + ty;/ 更新 x 坐標y = y - tx;/ 更新 y 坐標deg = deg + atani-1;/ 遞增角度 15.i i;ty = y + x i;x = tx;y = ty;angle -= atani;18.代碼 5.5如代碼 5.5 所示,這是相減關(guān)系的操作,基本上它和代碼 5.5 很相似,只是加減關(guān)系被改變而已。前面,常量表是否會消耗片上內(nèi)存,最終還是要取決使用過程,然而這里只有操作而已,所以代碼 5.2 會建造基于邏輯資源的查表。這樣做僅僅適合圍的查表而已,如果查表太大可能會不所有邏輯資源。以
7、上,就是建模最關(guān)鍵的幾個地方。圖 5.1 實驗五的建模圖。如圖 5.1 所示,這是實驗五的建模圖,這里有一只名為 CORDIC 的功能模塊,左邊是調(diào)用信號以及 32 位寬的輸入信號 xy,右邊是 32 位寬的輸出信號 Data。這里補充一些小知識,反正切有很多名字,其中 arctan(y/x)是將 y 與 x 坐標一個參數(shù),反之a(chǎn)tan(y,x)則是將y 與 x 坐標視為兩個參數(shù)。好了,讓來瞧一瞧這只模塊的。cordic.v1.module cordic 2.(inpLOCK,RESET,input iCall,output oDone,input 31:0ix,input 31:0iy,ou
8、tput 31:0oData, 9.else/ 矢量向下旋轉(zhuǎn)beginty = y i-1;/ y 帶符號位位移tx = x i-1;/ x 帶符號位位移x = x - ty ;/ 更新 x 坐標y = y + tx ;/ 更新 y 坐標deg = deg - atani-1;/ 遞減角度 24.i = i + 1b1;25. end以上內(nèi)容是相關(guān)的端口,注意 q 開始是仿真作用的信號。以上內(nèi)容為常量,這是查表作用的 atan 常量表。以上內(nèi)容為相關(guān)的寄存器以及復(fù)位操作。else if( iCall )case( i )34.0:35.begin x = ix; y = iy; deg = 3
9、2d0; i 0 )39.begin40.ty = y i-1;41.tx = x i-1;42.x = x + ty;20.reg signed 31:0 x,y,tx,ty,deg; 21.reg 7:0i;22.reg isDone; 23.always (edge CLOCK or negedge RESET )if( !RESET )begin27. x,y,tx,ty,deg = 32d0,32d0,32d0,32d0,32d0 ;28.i = 8d0;isDone = 1b0;end12.reg 31:0 atan 15:0;13.14.initial begin15.atan0
10、 = 32d2949120; atan1 = 32d1740992; atan2 = 32d919872; atan3 = 32d466944;16.atan4 = 32d234368; atan5 = 32d117312; atan6 = 32d58688; atan7 = 32d29312;17.atan8 = 32d14656; atan9 = 32d7360; atan10 = 32d3648; atan11 = 32d1856;18.atan12 = 32d896; atan13 = 32d448; atan14 = 32d256; atan15 = 32d128;19.end10.
11、output 31:0q_deg,q_y,q_x 11. );以上內(nèi)容為是 CORDIC 的操作。步驟 0 賦值 xy 寄存器,順便也一些 deg 寄存器。步驟 116操作,同時也表示矢量移動 16 次,其中 y 作為旋轉(zhuǎn)的參考系,如果它大于 0 直就執(zhí)行相加關(guān)系的操作。當中,ty 與 tx 是帶符號位位移的臨時 xy 坐標,然后再更新成為下一個 xy 坐標。完后,deg 寄存器也遞增 atan 指定的內(nèi)容。以上內(nèi)容為 改變了而已。操作。這是矢量的相減關(guān)系操作,它與上面大同小異,只是加減關(guān)系被以上內(nèi)容為操作。步驟 1718 是返回操作。以上內(nèi)容為輸出驅(qū)動。其中 oData 的驅(qū)動對象是 deg
12、,反之 q的家伙都是仿真assign oDone = isDone;assign oData = deg;assign q_deg,q_y,q_x = deg,y,x ; 68.69. endmodule57.17:58.begin isDone = 1b1; i = i + 1b1; end 59.60.18:61.begin isDone = 1b0; i i-1;50.tx = x i-1;x = x - ty ;y = y + tx ;deg = deg - atani-1;54.i = i + 1b1;55.end56.y = y - tx;deg = deg + atani-1;4
13、5.i = i + 1b1;46.end作用的信號。cordic.vttimescale 1 ps/ 1 psmodule cordic_simulation(); 3.reg CLOCK;reg RESET;reg iCall;7.reg 31:0 ix;8.reg 31:0 iy;wire 31:0 oData;wirne;wire 31:0q_deg,q_y,q_x; 12.initialbeginRESET = 0; #10; RESET = 1;CLOCK = 0; forever #1 CLOCK = CLOCK;end 18.19.cordic U120.(.CLOCK(CLOC
14、K),.RESET(RESET),.iCall(iCall),.ix(ix),.iy(iy),.oData(oData),.oDonne),.q_deg( q_deg ),29.q_y( q_y ),30.q_x( q_x ) 31.);32.33.reg 7:0i;34.always (edge CLOCK or negedge RESET )if( !RESET )begin38.i = 8d0;以上內(nèi)容為激勵文件,具體內(nèi)容筆者就不解釋了。仿真結(jié)果:圖 5.3 實驗五的仿真結(jié)果之一。圖 5.3 是實驗五的仿真結(jié)果,大致過程如下:arctan(255/1)= 89.99839.iCall =
15、 1b0;40. ix,iy = 32d0,32d0 ;endelsecase( i )45.0: / x = 1, y = 25546.if( oDone ) begin iCall = 1b0; i = i + 1b1; end47.else begin iCall = 1b1; ix = 1 * 65536; iy = 255 * 65536; end 48.49.1: / x = 255, y = 1,50.if( oDone ) begin iCall = 1b0; i = i + 1b1; end51.else begin iCall = 1b1; ix = 255 * 65536
16、; iy = 1 * 65536; end 52.53.2: / x = 4, y = 3,54.if( oDone ) begin iCall = 1b0; i = i + 1b1; end55.else begin iCall = 1b1; ix = 4 * 65536; iy = 3 * 65536; end 56.57.3: / x = 1, y = 1 58.if( oDone ) begin iCall = 1b0; i = i + 1b1; end59.else begin iCall = 1b1; ix = 1 * 65536; iy = 1 * 65536; end 60.61.4:62.i = i;63.64.endcase65.66. endmodule以上是計算機得到的浮點數(shù)結(jié)果。最后讓恭喜一下自己,終于利用硬件實現(xiàn) CORDIC 算法,而且速度極快,大20個時鐘之內(nèi)完成運算,另外誤差也可已接受。但是距離開派
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四管管理制度
- 搶救與急救措施管理制度
- 利用導(dǎo)數(shù)解決不等式的恒成立問題
- 人教部編版四年級語文上冊口語交際《講歷史人物故事》精美課件
- 福建省福州市三校聯(lián)考2024年高三練習題五(全國卷)數(shù)學試題
- 2024年湖南客運資格證培訓考試題答案解析
- 2024年河南客運考試應(yīng)用能力試題答案解析
- 2024年重慶客運旅客急救考試答案
- 2024年河源小型客運從業(yè)資格證考試培訓試題和答案
- 吉首大學《歷史文獻學》2021-2022學年第一學期期末試卷
- 四年級上冊數(shù)學課件-4.6 整數(shù)的四則運算(運算定律-交換律)▏滬教版 (共17張PPT)
- 危重新生兒監(jiān)護內(nèi)容
- 輔導(dǎo)員科研專項基金項目管理辦法(試行)
- GB∕T 20973-2020 膨潤土-行業(yè)標準
- 深基坑開挖危險源辨識及控制措施
- DB44∕T 1591-2015 小檔口、小作坊、小娛樂場所消防安全整治技術(shù)要求
- 外國法制史英國法課件
- 致青春幾年的放縱換來的是一生的卑微課件
- 加強服務(wù)管理 提升金融服務(wù)競爭力
- 初中生物說課課件(精選優(yōu)秀)PPT
- ETL基礎(chǔ)及常用技術(shù)培訓
評論
0/150
提交評論