国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

探究比特對(duì)編碼與比特對(duì)編碼乘法器的設(shè)計(jì)

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2021-05-08 09:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

比特對(duì)編碼與比特對(duì)編碼乘法器的設(shè)計(jì)

今天一起看看比特對(duì)編碼(有的也把它稱為基4booth編碼,名字不重要,主要是思想),可以解決上文中提到的問題

比特對(duì)編碼原理

booth重編碼的主要問題在于不能過濾掉010這樣序列。故考慮將通過連續(xù)相鄰兩位進(jìn)行編碼,每次從低位向高位移動(dòng)1位的方式(即booth比編碼),變成連續(xù)相鄰3位進(jìn)行編碼,每次從低位向高位移動(dòng)2位的方式(比特對(duì)編碼)。先討論其原理。

一個(gè)數(shù)我們考慮從低位向高位對(duì)其進(jìn)行編碼,使其變成4進(jìn)制(基4)的表示形式,每?jī)晌欢M(jìn)制表示一位的四進(jìn)制數(shù)。

3(2'b11)比4少1,2(2'b10)比4少2。在4進(jìn)制數(shù)中,2需要向前進(jìn)位則需要減去2再向前進(jìn)位;3需要向前進(jìn)位則需要減去1再向前進(jìn)位。

我們的比特對(duì)編碼就是基于上述原理來的。

下面給出比特對(duì)編碼規(guī)律,如下表和圖所示,圖為一個(gè)實(shí)例,是對(duì)1011_1111的編碼,其表示-65。比特對(duì)編碼結(jié)果為 -1 00-1,故其表示的十進(jìn)制d為:

d=-4^3 -4^0= -65

db1c8f96-af27-11eb-bf61-12bb97331649.png

db4d6756-af27-11eb-bf61-12bb97331649.png

再舉個(gè)例子,比如對(duì)0001_1001進(jìn)行比特對(duì)編碼,得到編碼為:

+2-2+1

故其表示的十進(jìn)制計(jì)算如下:

d=2*(4^2) -2*(4^1) +4^0

=32+8+1=41

其中的乘2與乘4都可以通過移位操作來實(shí)現(xiàn),這就是為什么需要這么編碼的原因。

可以看到,每相鄰三位進(jìn)行編碼,其中的最低位mi-1 其實(shí)表示來自前面的進(jìn)位。故當(dāng)其為 001時(shí),得到的編碼為 +1(表示4),011時(shí)最低位1表示進(jìn)位,故編碼為1+1=+2。

從中可以得出,對(duì)于8位二進(jìn)制數(shù)0101_0101,經(jīng)過比特對(duì)編碼后,得到的是 +1 +1 +1 +1,其表示的數(shù)為:

4^3 + 4^2 + 4^1 + 4^0 =

64+16+4+1=85

此時(shí)只需要進(jìn)行3次加法運(yùn)算,不會(huì)存在booth編碼所存在的問題。

同時(shí)發(fā)現(xiàn)對(duì)于數(shù)據(jù)位寬非偶數(shù)的數(shù),我們需要將其在最高位補(bǔ)填一位符號(hào)位,再進(jìn)行比特對(duì)編碼。

比特對(duì)編碼(對(duì)乘數(shù)進(jìn)行編碼)乘法器,需要進(jìn)行的加法次數(shù)為乘數(shù)位寬的一半。

比特對(duì)編碼乘法器設(shè)計(jì)

設(shè)計(jì)思想概敘:定義位寬為DW_A+DW_B+2的product寄存器(DW_A為被乘數(shù)a的位寬,DW_B為乘數(shù)b的位寬)。當(dāng)in_valid與in_ready同時(shí)為高時(shí),將乘數(shù)b(位寬為b)加載到product的低DW_B位。然后在計(jì)算狀態(tài)下(executing),將每次加法器的輸出放到product的高位,并每個(gè)時(shí)鐘周期將product右移2位。每個(gè)時(shí)鐘周期,通過對(duì)

m={product[1:0],prd_r[1]}

(其中prd_r[1]為上一個(gè)時(shí)鐘product的第二位)進(jìn)行編碼,得出本次操作是加1、加2,減1,減2,還是不用做加減法(編碼為0)(代碼中上述五種操作對(duì)應(yīng)的標(biāo)志信號(hào)分別為add_1,add_2,sub_1,sub_2,noneed_add)。并將加法結(jié)果每次存到product寄存器的高位。

這里有個(gè)巧妙的思想就是,每個(gè)時(shí)鐘周期通過對(duì)product右移2位,再將其高DW_A位與a或者a*2進(jìn)行相加或者相減操作,正好相當(dāng)于每次product不動(dòng),把a(bǔ)或者a*2左移2位(乘以4)。這個(gè)思想源于《Verilog HDL 高級(jí)數(shù)字設(shè)計(jì)》中的精簡(jiǎn)寄存器時(shí)序乘法器設(shè)計(jì)。

注意,這里是有符號(hào)數(shù)乘法器,每次左移需要在高位補(bǔ)符號(hào)位,故左移不能簡(jiǎn)單的用 >> 描述(>>左移默認(rèn)高位填0),具體描述見代碼。

其中減法采用加上這個(gè)數(shù)的補(bǔ)碼的方式;通過一個(gè)計(jì)數(shù)器(cnt)來指示什么時(shí)候結(jié)束運(yùn)算;其中運(yùn)算控制狀態(tài)機(jī)采用《狀態(tài)機(jī)的第四種描述方式》編寫;條件選擇多采用與或方式實(shí)現(xiàn)。

設(shè)計(jì)Verilog如下(dff_with_en為寄存器):

module radix4_mul #( parameter DW_A = 16, parameter DW_B = 8)( input clk, input rst_n, input in_valid, output in_ready, input flush, output o_valid, input o_ready, input [DW_A-1:0] a, input [DW_B-1:0] b, output [DW_A+DW_B-1:0] mul_res); //state machine for mulwire state;wire [$clog2((DW_B+1)/2):0] cnt;

wire exe_cnt_final = (cnt == (DW_B+1)/2); wire execute_en = in_valid&in_ready; localparam GET_DATA = 1'b0;localparam EXECUTING = 1'b1; wire curr_get_data = (state == GET_DATA);wire curr_executing = (state == EXECUTING); wire is_executing = curr_executing & (~exe_cnt_final);

wire nxt_get_data_en = (curr_executing & exe_cnt_final & o_ready) | flush;wire nxt_executing = curr_get_data & execute_en; wire nxt_state = (nxt_get_data_en & GET_DATA) | (nxt_executing & EXECUTING); wire tran_en = nxt_get_data_en | nxt_executing; dff_with_en #( .DW(1))dff_state( .clk (clk), .rst_n (rst_n), .enable (tran_en), .d_in (nxt_state), .q_out (state)); //cnt//wire [$clog2((DW_B+1)/2):0] cnt_nxt = curr_executing ? cnt+1 : 'h0; dff_with_en #( .DW($clog2((DW_B+1)/2)+1))dff_cnt( .clk (clk), .rst_n (rst_n), .enable (1'b1), .d_in (cnt_nxt), .q_out (cnt));

//get the awire [DW_A-1:0] a_d;wire [DW_A-1:0] nxt_a_d = nxt_executing ? a : a_d; dff_with_en #( .DW(DW_A))dff_a( .clk (clk), .rst_n (rst_n), .enable (1'b1), .d_in (nxt_a_d), .q_out (a_d));//radix 4 codingwire prd_r;wire [DW_A+DW_B+1:0] product;//wire [DW_B-1:0] b_shift;wire [2:0] m = is_executing ? {product[1:0],prd_r} : 3'b000; wire add_1 = (m == 3'b001) | (m == 3'b010);wire add_2 = (m == 3'b011);wire sub_1 = (m == 3'b110) | (m == 3'b101);wire sub_2 = (m == 3'b100); //wire [DW_A+DW_B+1:0] product; wire [DW_A+1:0] adder_op1 = ( {DW_A+2{add_1}}& { {2{a_d[DW_A-1]}},a_d} ) | ( {DW_A+2{add_2}}& { {1{a_d[DW_A-1]}},a_d,1'b0} ) | ( {DW_A+2{sub_1}}& (~{ {2{a_d[DW_A-1]}},a_d}) ) | ( {DW_A+2{sub_2}}& (~{ {1{a_d[DW_A-1]}},a_d,1'b0})); wire add_en = (add_1 | add_2 | sub_1 | sub_2)& is_executing;

wire noneed_add = is_executing & (~(add_1 | add_2 | sub_1 | sub_2)); wire [DW_A+1:0] adder_op2 = product[DW_A+DW_B+1:DW_B]; wire adder_cin = sub_1|sub_2; wire [DW_A+1:0] adder_res = adder_op1 + adder_op2 + adder_cin; wire [DW_A+DW_B+1:0] nxt_product = ({DW_A+DW_B+2{add_en}} &{{2{adder_res[DW_A+1]}},adder_res,product[DW_B-1:2]})| ({DW_A+DW_B+2{noneed_add}} & {{2{product[DW_A+DW_B+1]}},product[DW_A+DW_B+1:2]}) | ({DW_A+DW_B+2{o_valid}} & product) | ({DW_A+DW_B+2{nxt_executing}} & {{DW_A+2{1'b0}},b}); dff_with_en #( .DW(DW_A+DW_B+2))dff_product( .clk (clk), .rst_n (rst_n), .enable (1'b1),

.d_in (nxt_product), .q_out (product)); wire prd_nxt = curr_get_data ? 1'b0 : product[1]; dff_with_en #( .DW(1))dff_prd( .clk (clk), .rst_n (rst_n), .enable (1'b1), .d_in (prd_nxt), .q_out (prd_r));assign in_ready = curr_get_data;assign o_valid = exe_cnt_final;assign mul_res = product[DW_A+DW_B-1:0]; endmodule

如果乘數(shù)b位寬為奇數(shù),請(qǐng)補(bǔ)一位符號(hào)位,變成偶數(shù)位寬,再輸入。

編輯:jq

聲明:本文內(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)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5608

    瀏覽量

    129962
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2315

    瀏覽量

    98170
  • 乘法器
    +關(guān)注

    關(guān)注

    9

    文章

    221

    瀏覽量

    38803

原文標(biāo)題:比特對(duì)編碼與比特對(duì)編碼乘法器的設(shè)計(jì)

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    AD532:高性能單芯片乘法器/除法器的卓越之選

    AD532:高性能單芯片乘法器/除法器的卓越之選 在電子設(shè)計(jì)領(lǐng)域,乘法器和除法器是實(shí)現(xiàn)復(fù)雜運(yùn)算和信號(hào)處理的關(guān)鍵組件。而AD532作為一款預(yù)微調(diào)的單芯片
    的頭像 發(fā)表于 01-15 14:45 ?222次閱讀

    E203在基于wallace樹+booth編碼乘法器優(yōu)化后的跑分結(jié)果

    優(yōu)化思路 E203為了實(shí)現(xiàn)低功耗的要求,乘法器為基于booth編碼和移位加法器結(jié)合的思路,優(yōu)點(diǎn)是只需要一個(gè)加法器,而且該加法器還和除
    發(fā)表于 10-27 07:54

    E203V2長(zhǎng)周期乘法器核心booth算法解讀

    E203V2乘法器所在模塊為e203_exu_alu_muldiv.v,其中包含乘法和除法兩大塊,這里僅對(duì)乘法模塊進(jìn)行解讀。 乘法模塊首先進(jìn)行booth
    發(fā)表于 10-24 09:33

    蜂鳥E203乘法器的優(yōu)化——基8的Booth編碼+Wallace樹

    考慮到蜂鳥原乘法器采用了基4的Booth編碼,之后使用迭代的方法對(duì)每個(gè)周期使用加法器對(duì)部分積進(jìn)行累加,結(jié)構(gòu)如下: 從中考慮到兩點(diǎn)優(yōu)化: ① Booth編碼的更改:(使用基8的Boot
    發(fā)表于 10-24 07:28

    Verilog實(shí)現(xiàn)使用Booth編碼和Wallace樹的定點(diǎn)補(bǔ)碼乘法器原理

    周期乘法器乘法器,對(duì)于無符號(hào)乘法進(jìn)行一位符號(hào)擴(kuò)展后統(tǒng)一當(dāng)作有符號(hào)數(shù)進(jìn)行運(yùn)算,因此需要17個(gè)迭代周期。為了改良乘法器性能,我們可以使用Booth編碼
    發(fā)表于 10-23 08:01

    改進(jìn)wallance樹乘法器優(yōu)化方法

    首先,根據(jù)之前分享的乘法器的優(yōu)缺點(diǎn),我們針對(duì)17周期的乘法器進(jìn)行優(yōu)化,為乘法設(shè)計(jì)的專用數(shù)據(jù)通路,為了保持e203的低功耗、低面積的優(yōu)點(diǎn)、我們?nèi)圆捎没?booth算法進(jìn)行部分積生成,而對(duì)于原有的17
    發(fā)表于 10-23 06:37

    關(guān)于E203內(nèi)核高性能乘法器優(yōu)化(一)

    的一個(gè)部分積作為下個(gè)CSA的三個(gè)輸入相加得到第二級(jí)兩個(gè)部分積,按照這種操作一直進(jìn)行,直到得到最終的兩個(gè)部分積。 2.3Booth乘法器 Booth乘法器采用Booth算法對(duì)乘數(shù)進(jìn)行編碼,一次
    發(fā)表于 10-23 06:09

    蜂鳥乘法器設(shè)計(jì)分享

    蜂鳥的乘法器主體設(shè)計(jì)在ALU模塊的子單元MDV模塊中,MDV模塊包括乘除法器邏輯設(shè)計(jì),它只包含運(yùn)算控制,但并不包含具體運(yùn)算,它們都需要將部分積或者部分余數(shù)傳入數(shù)據(jù)通路(dpath模塊)中,從而實(shí)現(xiàn)
    發(fā)表于 10-22 08:21

    改進(jìn)型乘法器結(jié)構(gòu)設(shè)計(jì)

    的高32位。控制信號(hào)控制部分積產(chǎn)生和部分積壓縮對(duì)操作數(shù)和部分積的處理,從而完成乘法器乘法運(yùn)算。 譯碼模塊對(duì)乘法指令進(jìn)行譯碼,基4 Booth編碼接收控制信號(hào)對(duì)被乘數(shù)和乘數(shù)進(jìn)行符號(hào)擴(kuò)
    發(fā)表于 10-22 07:51

    蜂鳥E203乘法器改進(jìn)

    蜂鳥E203為了節(jié)約資源,乘法運(yùn)算采用循環(huán)移位方式計(jì)算最終結(jié)果,這樣的乘法器需要經(jīng)過較多時(shí)鐘周期來處理數(shù)據(jù),導(dǎo)致處理數(shù)據(jù)效率較低。為了提高計(jì)算效率,這里分享一種基于流水線思想的乘法器,即采用多個(gè)
    發(fā)表于 10-22 07:28

    e203乘法運(yùn)算結(jié)構(gòu)及算法原理

    e203乘法部件結(jié)構(gòu) E203的乘法操作由一個(gè)17周期的乘法器實(shí)現(xiàn)。為了提升性能,該乘法器采用了基4Booth編碼,將乘數(shù)分解為17個(gè)Bo
    發(fā)表于 10-22 06:43

    e203 ALU乘法運(yùn)算結(jié)構(gòu)及算法原理

    e203乘法部件結(jié)構(gòu) E203的乘法操作由一個(gè)17周期的乘法器實(shí)現(xiàn)。為了提升性能,該乘法器采用了基4Booth編碼,將乘數(shù)分解為17個(gè)Bo
    發(fā)表于 10-22 06:12

    蜂鳥E203內(nèi)核乘法器的優(yōu)化

    乘法器的優(yōu)化實(shí)現(xiàn)一般從兩個(gè)方面入手。第一是減少生成的部分積數(shù)量,另外就是減少部分積累加的延時(shí)。 在開源的E203源碼中,32*32乘法器是利用radix-4 booth編碼產(chǎn)生部分積,每個(gè)周期做一次
    發(fā)表于 10-22 06:11

    優(yōu)化boot4乘法器方法

    優(yōu)化電路設(shè)計(jì):在電路設(shè)計(jì)中,可以采用更快速的邏輯單元和存儲(chǔ)器元件,優(yōu)化關(guān)鍵路徑和信號(hào)傳輸路線,從而降低延遲,縮短乘法器的運(yùn)算周期。 固定位寬:Boot4乘法器可以處理不同位寬的數(shù)據(jù),但是處理不同位寬
    發(fā)表于 10-21 12:13

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

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