chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

q67N_gh_b6a4c0d ? 來源:玩兒轉(zhuǎn)FPGA ? 作者:玩兒轉(zhuǎn)FPGA ? 2021-08-10 16:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

好久不見,甚是想念。在后臺(tái)看到好多朋友私信我各種問題,其中想白piao代碼的居多,為了回饋大家,今天我就奉上一段代碼,讓大家隨便使用,希望大家能順利完成項(xiàng)目結(jié)束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

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

編輯:jq

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

    關(guān)注

    0

    文章

    31

    瀏覽量

    13636
  • Verilog
    +關(guān)注

    關(guān)注

    30

    文章

    1368

    瀏覽量

    113502
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4921

    瀏覽量

    72205

原文標(biāo)題:來了來了,verilog的浮點(diǎn)乘法器實(shí)現(xiàn)

文章出處:【微信號(hào):gh_b6a4c0db5bbe,微信公眾號(hào):成信FPGA學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    ?CDCVF25084 3.3V 1:8零延遲(PLL)x4時(shí)鐘乘法器技術(shù)文檔總結(jié)?

    該CDCVF25084是一款高性能、低偏斜、低抖動(dòng)、鎖相環(huán)時(shí)鐘乘法器。它使用 PLL 在頻率和相位上將輸出時(shí)鐘精確對(duì)齊輸入時(shí)鐘信號(hào),包括 4 的乘法因子。該CDCVF25084在 3.3 V 的標(biāo)稱電源電壓下工作。該器件還在輸出驅(qū)動(dòng)器中集成了串聯(lián)阻尼電阻器,使其成為驅(qū)動(dòng)點(diǎn)
    的頭像 發(fā)表于 09-22 11:30 ?318次閱讀
    ?CDCVF25084 3.3V 1:8零延遲(PLL)x4時(shí)鐘<b class='flag-5'>乘法器</b>技術(shù)文檔總結(jié)?

    ?CDCF5801A時(shí)鐘乘法器技術(shù)文檔總結(jié)

    該CDCF5801A提供參考時(shí)鐘(REFCLK)信號(hào)的時(shí)鐘乘法,具有通過相位對(duì)齊器以僅1.3 mUI步長延遲或推進(jìn)CLKOUT/CLKOUTB的獨(dú)特功能。對(duì)于DLYCTRL引腳上的每個(gè)上升沿,只要
    的頭像 發(fā)表于 09-19 14:07 ?394次閱讀
    ?CDCF5801A時(shí)鐘<b class='flag-5'>乘法器</b>技術(shù)文檔總結(jié)

    ?CDCE706 可編程3-PLL時(shí)鐘合成器/乘法器/分頻器技術(shù)文檔總結(jié)

    CDCE706是當(dāng)今最小、功能最強(qiáng)大的PLL合成器/乘法器/分頻器之一。盡管它的物理輪廓很小,但CDCE706非常靈活。它能夠從給定的輸入頻率產(chǎn)生幾乎獨(dú)立的輸出頻率。 輸入頻率可以來自LVCMOS、差分輸入時(shí)鐘或單晶??梢酝ㄟ^SMBus數(shù)據(jù)接口控制器選擇合適的輸入波形。
    的頭像 發(fā)表于 09-19 11:30 ?628次閱讀
    ?CDCE706 可編程3-PLL時(shí)鐘合成器/<b class='flag-5'>乘法器</b>/分頻器技術(shù)文檔總結(jié)

    Texas Instruments LMX1860SEPEVM評(píng)估模塊數(shù)據(jù)手冊

    Texas Instruments LMX1860SEPEVM評(píng)估模塊配置用于評(píng)估LMX1860-SEP的運(yùn)行和性能。LMX1860-SEP是一款四輸出、超低附加抖動(dòng)射頻 (RF) 緩沖器、分頻器和乘法器。
    的頭像 發(fā)表于 07-29 13:35 ?334次閱讀
    Texas Instruments LMX1860SEPEVM評(píng)估模塊數(shù)據(jù)手冊

    Texas Instruments LMX1205 JESD緩沖器/乘法器/除法器數(shù)據(jù)手冊

    Texas Instruments LMX1205 JESD緩沖器/乘法器/分頻器具有高頻能力、極低抖動(dòng)以及可編程時(shí)鐘輸入和輸出延遲。得益于以上特性,該器件非常適用于時(shí)鐘高精度高頻數(shù)據(jù)轉(zhuǎn)換器,且不
    的頭像 發(fā)表于 07-06 17:35 ?488次閱讀
    Texas Instruments LMX1205 JESD緩沖器/<b class='flag-5'>乘法器</b>/除<b class='flag-5'>法器</b>數(shù)據(jù)手冊

    MAX2046高增益矢量乘法器技術(shù)手冊

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

    ADL5390 RF矢量乘法器技術(shù)手冊

    ADL5390矢量乘法器由一對(duì)匹配的寬帶可變增益放大器組成,二者輸出相加,每個(gè)放大器具有單獨(dú)的線性幅度增益控制。如果兩個(gè)輸入RF信號(hào)正交,則可以將該矢量乘法器配置為矢量調(diào)制器,或?qū)⒃鲆婵刂埔_用作
    的頭像 發(fā)表于 04-09 10:02 ?577次閱讀
    ADL5390 RF矢量<b class='flag-5'>乘法器</b>技術(shù)手冊

    7-信號(hào)的運(yùn)算和處理

    集成運(yùn)放組成的運(yùn)算電路,模擬乘法器及其在運(yùn)算電路中的應(yīng)用,有源濾波電路
    發(fā)表于 04-01 10:31

    HA-2556 57MHz、寬帶、四象限、電壓輸出模擬乘法器應(yīng)用筆記

    HA-2556 是一款單片高速四象限模擬乘法器,采用 Intersil 介質(zhì)隔離高頻工藝構(gòu)建。電壓輸出消除了電流輸出倍增器所需的電流-電壓轉(zhuǎn)換級(jí),從而簡化了許多設(shè)計(jì)。HA-2556 提供 450V
    的頭像 發(fā)表于 02-24 17:30 ?802次閱讀
    HA-2556 57MHz、寬帶、四象限、電壓輸出模擬<b class='flag-5'>乘法器</b>應(yīng)用筆記

    Verilog中signed和$signed()的用法

    嗎?其實(shí)不是的,因?yàn)橛蟹?hào)數(shù)和無符號(hào)數(shù)據(jù)的加法強(qiáng)結(jié)果和乘法器結(jié)構(gòu)是一樣的,signed的真正作用是決定如何對(duì)操作數(shù)擴(kuò)位的問題。 2、verilog中的加法和乘法操作前,會(huì)先對(duì)操作數(shù)據(jù)擴(kuò)位成結(jié)果相同的位寬,然后進(jìn)行加法或者
    的頭像 發(fā)表于 02-17 17:47 ?989次閱讀
    <b class='flag-5'>Verilog</b>中signed和$signed()的用法

    ADA-28F00WG乘法器Marki

    ADA-28F00WG是一種高性能的模擬乘法器,能夠?qū)蓚€(gè)輸入信號(hào)(電壓或電流)進(jìn)行乘法運(yùn)算,并輸出其結(jié)果。ADA-28F00WG乘法器采用高質(zhì)量材料制造,并結(jié)合了最新的肖特基二極管和MMIC技術(shù)
    發(fā)表于 02-12 09:25

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡介

    乘法器和除法器設(shè)計(jì),在不同專業(yè)芯片領(lǐng)域有著廣泛應(yīng)用的數(shù)字信號(hào)發(fā)生器、復(fù)數(shù)求模求角度運(yùn)算器、普通濾波器、E△ADC中使用的抽取濾波器、基于 E△結(jié)構(gòu)實(shí)現(xiàn)的小數(shù)倍分頻器、CRC校驗(yàn)器等。每個(gè)電路均給出了算法
    發(fā)表于 11-21 17:14

    FPGA中的浮點(diǎn)四則運(yùn)算是什么

    (減)法運(yùn)算 基于FPGA 實(shí)現(xiàn)浮點(diǎn)加法運(yùn)算包括了一系列對(duì)尾數(shù)和指數(shù)部分的操作:移位、交換、格式化、舍入和格式化等。如下圖所示,自定義浮點(diǎn)流水加法器
    的頭像 發(fā)表于 11-16 12:51 ?1163次閱讀
    FPGA中的<b class='flag-5'>浮點(diǎn)</b>四則運(yùn)算是什么

    FPGA中浮點(diǎn)四則運(yùn)算的實(shí)現(xiàn)過程

    (減)法運(yùn)算 基于FPGA 實(shí)現(xiàn)浮點(diǎn)加法運(yùn)算包括了一系列對(duì)尾數(shù)和指數(shù)部分的操作:移位、交換、格式化、舍入和格式化等。如下圖所示,自定義浮點(diǎn)流水加法器
    的頭像 發(fā)表于 11-16 11:19 ?1752次閱讀
    FPGA中<b class='flag-5'>浮點(diǎn)</b>四則運(yùn)算的<b class='flag-5'>實(shí)現(xiàn)</b>過程

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

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