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

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

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

3天內不再提示

基于verilog的浮點乘法器實現(xiàn)

q67N_gh_b6a4c0d ? 來源:玩兒轉FPGA ? 作者:玩兒轉FPGA ? 2021-08-10 16:29 ? 次閱讀

好久不見,甚是想念。在后臺看到好多朋友私信我各種問題,其中想白piao代碼的居多,為了回饋大家,今天我就奉上一段代碼,讓大家隨便使用,希望大家能順利完成項目結束996。

//Single Precision//Copyright:hjdmodule multiplier( input_a, input_b, input_a_stb, input_b_stb, output_z_ack, clk, rst, output_z, output_z_stb, input_a_ack, input_b_ack);

input clk; input rst;

input [31:0] input_a; input input_a_stb; output input_a_ack;

input [31:0] input_b; input input_b_stb; output input_b_ack;

output [31:0] output_z; output output_z_stb; input output_z_ack;

reg s_output_z_stb; reg [31:0] s_output_z; reg s_input_a_ack; reg s_input_b_ack;

reg [3:0] state; parameter get_a = 4‘d0, get_b = 4’d1, unpack = 4‘d2, special_cases = 4’d3, normalise_a = 4‘d4, normalise_b = 4’d5, multiply_0 = 4‘d6, multiply_1 = 4’d7, normalise_1 = 4‘d8, normalise_2 = 4’d9, round = 4‘d10, pack = 4’d11, put_z = 4‘d12;

reg [31:0] a, b, z; reg [23:0] a_m, b_m, z_m; reg [9:0] a_e, b_e, z_e; reg a_s, b_s, z_s; reg guard, round_bit, sticky; reg [47:0] product;

always @(posedge clk) begin

case(state)

get_a: begin s_input_a_ack 《= 1; if (s_input_a_ack && input_a_stb) begin a 《= input_a; s_input_a_ack 《= 0; state 《= get_b; end end

get_b: begin s_input_b_ack 《= 1; if (s_input_b_ack && input_b_stb) begin b 《= input_b; s_input_b_ack 《= 0; state 《= unpack; end end

unpack: begin a_m 《= a[22 : 0]; b_m 《= b[22 : 0]; a_e 《= a[30 : 23] - 127; b_e 《= b[30 : 23] - 127; a_s 《= a[31]; b_s 《= b[31]; state 《= special_cases; end

special_cases: begin //if a is NaN or b is NaN return NaN if ((a_e == 128 && a_m != 0) || (b_e == 128 && b_m != 0)) begin z[31] 《= 1; z[30:23] 《= 255; z[22] 《= 1; z[21:0] 《= 0; state 《= put_z; //if a is inf return inf end else if (a_e == 128) begin z[31] 《= a_s ^ b_s; z[30:23] 《= 255; z[22:0] 《= 0; //if b is zero return NaN if (($signed(b_e) == -127) && (b_m == 0)) begin z[31] 《= 1; z[30:23] 《= 255; z[22] 《= 1; z[21:0] 《= 0; end state 《= put_z; //if b is inf return inf end else if (b_e == 128) begin z[31] 《= a_s ^ b_s; z[30:23] 《= 255; z[22:0] 《= 0; //if a is zero return NaN if (($signed(a_e) == -127) && (a_m == 0)) begin z[31] 《= 1; z[30:23] 《= 255; z[22] 《= 1; z[21:0] 《= 0; end state 《= put_z; //if a is zero return zero end else if (($signed(a_e) == -127) && (a_m == 0)) begin z[31] 《= a_s ^ b_s; z[30:23] 《= 0; z[22:0] 《= 0; state 《= put_z; //if b is zero return zero end else if (($signed(b_e) == -127) && (b_m == 0)) begin z[31] 《= a_s ^ b_s; z[30:23] 《= 0; z[22:0] 《= 0; state 《= put_z; end else begin //Denormalised Number if ($signed(a_e) == -127) begin a_e 《= -126; end else begin a_m[23] 《= 1; end //Denormalised Number if ($signed(b_e) == -127) begin b_e 《= -126; end else begin b_m[23] 《= 1; end state 《= normalise_a; end end

normalise_a: begin if (a_m[23]) begin state 《= normalise_b; end else begin a_m 《= a_m 《《 1; a_e 《= a_e - 1; end end

normalise_b: begin if (b_m[23]) begin state 《= multiply_0; end else begin b_m 《= b_m 《《 1; b_e 《= b_e - 1; end end

multiply_0: begin z_s 《= a_s ^ b_s; z_e 《= a_e + b_e + 1; product 《= a_m * b_m; state 《= multiply_1; end

multiply_1: begin z_m 《= product[47:24]; guard 《= product[23]; round_bit 《= product[22]; sticky 《= (product[21:0] != 0); state 《= normalise_1; end

normalise_1: begin if (z_m[23] == 0) begin z_e 《= z_e - 1; z_m 《= z_m 《《 1; z_m[0] 《= guard; guard 《= round_bit; round_bit 《= 0; end else begin state 《= normalise_2; end end

normalise_2: begin if ($signed(z_e) 《 -126) begin z_e 《= z_e + 1; z_m 《= z_m 》》 1; guard 《= z_m[0]; round_bit 《= guard; sticky 《= sticky | round_bit; end else begin state 《= round; end end

round: begin if (guard && (round_bit | sticky | z_m[0])) begin z_m 《= z_m + 1; if (z_m == 24’hffffff) begin z_e 《=z_e + 1; end end state 《= pack; end

pack: begin z[22 : 0] 《= z_m[22:0]; z[30 : 23] 《= z_e[7:0] + 127; z[31] 《= z_s; if ($signed(z_e) == -126 && z_m[23] == 0) begin z[30 : 23] 《= 0; end //if overflow occurs, return inf if ($signed(z_e) 》 127) begin z[22 : 0] 《= 0; z[30 : 23] 《= 255; z[31] 《= z_s; end state 《= put_z; end

put_z: begin s_output_z_stb 《= 1; s_output_z 《= z; if (s_output_z_stb && output_z_ack) begin s_output_z_stb 《= 0; state 《= get_a; end end

endcase

if (rst == 1) begin state 《= get_a; s_input_a_ack 《= 0; s_input_b_ack 《= 0; s_output_z_stb 《= 0; end

end assign input_a_ack = s_input_a_ack; assign input_b_ack = s_input_b_ack; assign output_z_stb = s_output_z_stb; assign output_z = s_output_z;

endmodule

是不是覺得很復雜?代碼非常古老?是的,這是我n年前寫的壓箱底的東西,但是還是可以正確使用的,上一次更新是在今年4月左右吧,畢竟浮點乘法并不難,浮點加法才是讓人掉頭發(fā)。如果發(fā)現(xiàn)bug請私信或留言。還有小朋友問:test bentch呢??當然是,下次一定。

編輯:jq

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

    關注

    0

    文章

    31

    瀏覽量

    13518
  • Verilog
    +關注

    關注

    29

    文章

    1366

    瀏覽量

    111871
  • 代碼
    +關注

    關注

    30

    文章

    4888

    瀏覽量

    70274

原文標題:來了來了,verilog的浮點乘法器實現(xiàn)

文章出處:【微信號:gh_b6a4c0db5bbe,微信公眾號:成信FPGA學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    MAX2046高增益矢量乘法器技術手冊

    MAX2045/MAX2046/MAX2047低成本全集成矢量乘法器用來改變RF信號的幅值與相位。各款器件分別為UMTS (MAX2045)、DCS/PCS (MAX2046)或蜂窩/GSM (MAX2047)頻段而優(yōu)化。這些器件都具有差分RF輸入與輸出。
    的頭像 發(fā)表于 04-09 10:10 ?222次閱讀
    MAX2046高增益矢量<b class='flag-5'>乘法器</b>技術手冊

    ADL5390 RF矢量乘法器技術手冊

    ADL5390矢量乘法器由一對匹配的寬帶可變增益放大器組成,二者輸出相加,每個放大器具有單獨的線性幅度增益控制。如果兩個輸入RF信號正交,則可以將該矢量乘法器配置為矢量調制器,或將增益控制引腳用作
    的頭像 發(fā)表于 04-09 10:02 ?234次閱讀
    ADL5390 RF矢量<b class='flag-5'>乘法器</b>技術手冊

    ADA-28F00WG乘法器Marki

    ADA-28F00WG是一種高性能的模擬乘法器,能夠將兩個輸入信號(電壓或電流)進行乘法運算,并輸出其結果。ADA-28F00WG乘法器采用高質量材料制造,并結合了最新的肖特基二極管和MMIC技術
    發(fā)表于 02-12 09:25

    求助,LMX2572LP參考時鐘路徑中的乘法器MULT的輸入頻率范圍問題求解

    在lmx2572LP的參考時鐘輸入路徑中,有一個乘法器MULT,其輸入頻率范圍在手冊中描述為10Mhz~40MHz。當我在TICS Pro軟件中進行配置時,這個乘法器提示我“Maximum
    發(fā)表于 11-08 11:36

    MPY634做基本乘法器遇到的疑問求解

    我是按圖所接.X2,Y2直接接地.但是乘法器輸出波形會跳.示波器是用直流偶合.DC一時是正的一時是負的.怎么回事?
    發(fā)表于 09-25 06:06

    請問如何用VCA810實現(xiàn)模擬乘法器

    奇應該如何實現(xiàn)這一方面呢? 另外除了MPY634外,TI還有哪些產品可用來實現(xiàn)模擬乘法器的功能呢? 謝謝
    發(fā)表于 09-23 07:11

    FPGA Verilog HDL有什么奇技巧?

    相加去乘? A:硬件乘法器具有重要意義,主要體現(xiàn)在以下幾個方面: 速度優(yōu)勢:在數(shù)字電路中,直接使用移位相加的方法實現(xiàn)乘法在速度上通常比通過軟件或簡單的邏輯運算(如在 Verilog
    發(fā)表于 09-12 19:10

    請問VCA822做成四象限乘法器的帶寬是多少?

    如題,根據(jù)VCA822數(shù)據(jù)手冊中的四象限乘法器的原理圖,該電路的帶寬能達到多少?
    發(fā)表于 09-11 06:12

    CDCS504-Q1時鐘緩沖器和時鐘乘法器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCS504-Q1時鐘緩沖器和時鐘乘法器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-23 10:35 ?0次下載
    CDCS504-Q1時鐘緩沖器和時鐘<b class='flag-5'>乘法器</b>數(shù)據(jù)表

    CDCVF25084時鐘乘法器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCVF25084時鐘乘法器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-22 11:33 ?0次下載
    CDCVF25084時鐘<b class='flag-5'>乘法器</b>數(shù)據(jù)表

    CDCF5801A具有延遲控制和相位對準的時鐘乘法器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCF5801A具有延遲控制和相位對準的時鐘乘法器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-22 10:56 ?0次下載
    CDCF5801A具有延遲控制和相位對準的時鐘<b class='flag-5'>乘法器</b>數(shù)據(jù)表

    CDCF5801時鐘乘法器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCF5801時鐘乘法器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-22 10:37 ?1次下載
    CDCF5801時鐘<b class='flag-5'>乘法器</b>數(shù)據(jù)表

    CDCE906 PLL頻率合成器/乘法器/分頻器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCE906 PLL頻率合成器/乘法器/分頻器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-22 09:30 ?0次下載
    CDCE906 PLL頻率合成器/<b class='flag-5'>乘法器</b>/分頻器數(shù)據(jù)表

    CDCS503帶可選SSC的時鐘緩沖器/時鐘乘法器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCS503帶可選SSC的時鐘緩沖器/時鐘乘法器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-22 09:18 ?0次下載
    CDCS503帶可選SSC的時鐘緩沖器/時鐘<b class='flag-5'>乘法器</b>數(shù)據(jù)表

    請問帶有乘法器的信號鏈噪聲帶寬如何確定?

    有一個信號鏈路,前級運放設置的帶寬是100K-110K,增益為10倍,輸入信號也在這個帶寬內,然后后面經過一個乘法器,將信號頻譜搬移到0-10K這個帶寬內,后級放大電路的帶寬也設置到0-10K,增益設置為10倍,那么假設最前端輸入電壓噪聲密度為10nV/sqrt(Hz),輸出電壓噪聲應為多少呢?
    發(fā)表于 08-15 08:00
    主站蜘蛛池模板: 四虎影院永久 | 男人的天堂在线视频 | 久久九九国产精品怡红院 | 香蕉成人999视频 | 天天摸夜夜添狠狠添2018 | 日本视频www色 | 久久国产精品久久久久久 | 色播亚洲| 伊人久久大香线蕉综合网站 | 免费任我爽橹视频在线观看 | 国产黄色小视频在线观看 | 免费在线播放毛片 | 1024手机看片欧美日韩 | 色多多视频在线播放 | 玖玖在线精品 | 亚洲人成电影在线 | 久久福利免费视频 | 色小视频| 视频在线观看高清免费大全 | 福利视频自拍偷拍 | 男啪女色黄无遮挡免费视频 | 乱码精品一区二区三区 | 亚洲精品影视 | 视色4setv.com| 欧美一区二区影院 | 久久噜噜噜久久亚洲va久 | 欧美色图日韩 | 欧美另类高清 | 四虎影院最新地址 | 永久在线观看www免费视频 | 在线观看国产一级强片 | 在线播放一区二区三区 | 777黄色片 | 特级毛片免费看 | 扒开末成年粉嫩的流白浆视频 | 福利视频999 | 午夜免费在线观看 | 1024手机看片欧美日韩 | 欧美日韩在线一本卡 | 老师叫我揉她内裤越快越好 | 最新eeuss影院第256页 |