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

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

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

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

比特對編碼的原理設(shè)計(jì)

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-14 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

比特對編碼原理

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

一個數(shù)我們考慮從低位向高位對其進(jìn)行編碼,使其變成4進(jìn)制(基4)的表示形式,每兩位二進(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)位。

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

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

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

cd70b9ce-0310-11ed-ba43-dac502259ad0.png

cd85bd24-0310-11ed-ba43-dac502259ad0.png

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

+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時,得到的編碼為 +1(表示4),011時最低位1表示進(jìn)位,故編碼為1+1=+2。

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

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

64+16+4+1=85

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

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

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

比特對編碼乘法器設(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ù)b(位寬為b)加載到product的低DW_B位。然后在計(jì)算狀態(tài)下(executing),將每次加法器的輸出放到product的高位,并每個時鐘周期將product右移2位。每個時鐘周期,通過對

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

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

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

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

其中減法采用加上這個數(shù)的補(bǔ)碼的方式;通過一個計(jì)數(shù)器(cnt)來指示什么時候結(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ù),請補(bǔ)一位符號位,變成偶數(shù)位寬,再輸入。

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

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

審核編輯:彭靜

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

    關(guān)注

    6

    文章

    967

    瀏覽量

    55646
  • 比特
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

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

    關(guān)注

    9

    文章

    211

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    優(yōu)先編碼器:高效數(shù)據(jù)選擇與編碼的解決方案

    在現(xiàn)代數(shù)字電路設(shè)計(jì)中,數(shù)據(jù)的選擇與編碼是不可或缺的重要環(huán)節(jié)。面對眾多輸入信號,如何高效地選擇并編碼所需數(shù)據(jù),成為設(shè)計(jì)師們面臨的一大挑戰(zhàn)。優(yōu)先編碼器,作為一種獨(dú)特的數(shù)字電路組件,憑借其高效、靈活的特點(diǎn)
    的頭像 發(fā)表于 03-25 08:33 ?458次閱讀

    伺服電機(jī)編碼器怎么選型

    伺服電機(jī)編碼器的選型是一個綜合性的過程,需要考慮多個因素以確保所選編碼器能夠滿足系統(tǒng)的性能要求。以下是一些關(guān)鍵的選型步驟和考慮因素: 一、明確應(yīng)用需求 首先,需要明確伺服電機(jī)編碼器的應(yīng)用需求,包括
    的頭像 發(fā)表于 03-11 12:01 ?626次閱讀
    伺服電機(jī)<b class='flag-5'>編碼</b>器怎么選型

    信道編碼和信源編碼的區(qū)別

    信道編碼和信源編碼是數(shù)字通信系統(tǒng)中兩個至關(guān)重要的環(huán)節(jié),它們各自承擔(dān)著不同的功能和角色。
    的頭像 發(fā)表于 01-29 16:29 ?1573次閱讀

    信道編碼與解碼技術(shù)解析

    發(fā)送端添加冗余信息,使得接收端能夠檢測并糾正一定數(shù)量的錯誤,從而提高通信質(zhì)量。 信道編碼的基本原理 信道編碼的目的是將原始信息(通常表示為比特序列)轉(zhuǎn)換成包含冗余信息的編碼信息。這種冗
    的頭像 發(fā)表于 01-22 15:48 ?803次閱讀

    DAC1280 TDATA引腳輸入的比特流,怎么產(chǎn)生這個比特流,算法是什么?

    我想請問下關(guān)于DAC1280的TDATA引腳輸入的比特流的問題: 1,怎么產(chǎn)生這個比特流,算法是什么? 2,怎么控制輸出信號的頻率? 對您的回答感激不盡,謝謝。
    發(fā)表于 01-06 06:21

    bcd編碼的優(yōu)缺點(diǎn) bcd編碼的常見錯誤

    BCD(Binary-Coded Decimal)編碼是一種二進(jìn)制編碼方式,用于將十進(jìn)制數(shù)(0-9)直接轉(zhuǎn)換為二進(jìn)制形式。這種編碼方式在數(shù)字系統(tǒng)中非常常見,尤其是在需要處理數(shù)字?jǐn)?shù)據(jù)的硬件和軟件中
    的頭像 發(fā)表于 12-20 17:17 ?1559次閱讀

    比特幣突破99000美元

    比特幣價格日內(nèi)上漲3.4%;一度觸及99000美元的高點(diǎn)。 利好消息是美國候任總統(tǒng)特朗普提名支持加密貨幣的保守派律師阿特金斯(Paul Atkins)出任美國證券交易委員會(SEC)主席。這個消息引燃了新一輪的比特幣上漲行情。
    的頭像 發(fā)表于 12-05 11:01 ?1172次閱讀

    尋找超導(dǎo)量子比特信息丟失的原因

    一項(xiàng)新研究為超導(dǎo)量子比特中的信息是如何丟失的提供了新線索。 今天談一個全世界都非常關(guān)注的東西——超導(dǎo)量子比特。 我們知道,量子計(jì)算可能為我們帶來不可思議的指數(shù)級計(jì)算加速,為我們的未來注入無限的想象力
    的頭像 發(fā)表于 11-21 10:11 ?531次閱讀

    編碼器類型詳解:探索不同編碼技術(shù)的奧秘

    編碼器類型詳解:探索不同編碼技術(shù)的奧秘 在自動化、機(jī)器控制和數(shù)據(jù)處理等領(lǐng)域,編碼器作為關(guān)鍵的傳感器組件,扮演著至關(guān)重要的角色。它們通過將物理位置、速度或方向轉(zhuǎn)換為電信號,為各種設(shè)備提供精確的控制
    的頭像 發(fā)表于 11-19 08:58 ?1806次閱讀
    <b class='flag-5'>編碼</b>器類型詳解:探索不同<b class='flag-5'>編碼</b>技術(shù)的奧秘

    增量編碼器與絕對值編碼器的區(qū)別

    增量編碼器與絕對值編碼器的區(qū)別:增量編碼器與絕對值編碼器在精度特點(diǎn)對比 增量編碼器的精度取決于脈沖的數(shù)量和測量的細(xì)分程度,通常情況下,其精度
    的頭像 發(fā)表于 11-18 16:38 ?2418次閱讀
    增量<b class='flag-5'>編碼</b>器與絕對值<b class='flag-5'>編碼</b>器的區(qū)別

    二進(jìn)制編碼器與絕對編碼器的區(qū)別

    編碼器是工業(yè)自動化和機(jī)器人技術(shù)中不可或缺的組件,用于將機(jī)械位置或運(yùn)動轉(zhuǎn)換為電信號。二進(jìn)制編碼器和絕對編碼器是兩種常見的編碼器類型,它們各自有著獨(dú)特的特點(diǎn)和應(yīng)用場景。 二進(jìn)制
    的頭像 發(fā)表于 11-06 09:54 ?1232次閱讀

    編碼器常見的類型有哪些?

    編碼器(encoder)是一種能夠?qū)⑿盘枺ㄈ?b class='flag-5'>比特流)或數(shù)據(jù)進(jìn)行編制、轉(zhuǎn)換為可用于通訊、傳輸和存儲的信號形式的設(shè)備,它通常用于檢測機(jī)械運(yùn)動的速度、位置、角度、距離等。編碼器的類型多種多樣,根據(jù)
    的頭像 發(fā)表于 10-25 09:30 ?2444次閱讀

    磁電編碼器和光電編碼器的區(qū)別

    磁電編碼器和光電編碼器是兩種不同類型的編碼器,它們在原理、結(jié)構(gòu)、性能和應(yīng)用領(lǐng)域上都有所不同。 磁電編碼器和光電編碼器的區(qū)別 1. 引言
    的頭像 發(fā)表于 10-12 09:54 ?2970次閱讀

    比特率和波特率的計(jì)算公式及舉例說明

    ),簡寫為bps。比特率的計(jì)算通常基于數(shù)據(jù)傳輸?shù)目偭亢退钑r間。然而,在更具體的場景中,如音頻、視頻或網(wǎng)絡(luò)數(shù)據(jù)傳輸,比特率往往由編碼方式、數(shù)據(jù)質(zhì)量和傳輸需求等因素決定,并可能通過特定的編碼
    的頭像 發(fā)表于 08-05 15:18 ?2552次閱讀

    波特率和比特率是什么意思

    比特率(Bit Rate)是比特的傳輸速率,也就是通信系統(tǒng)時間內(nèi)的信息傳輸速率,單位是比特/秒(bit/s)。比特率是指每秒傳送的比特(bi
    的頭像 發(fā)表于 07-10 09:16 ?1458次閱讀
    波特率和<b class='flag-5'>比特</b>率是什么意思
    主站蜘蛛池模板: 国产精品天天看 | 久久在精品线影院精品国产 | 国产亚洲精品在天天在线麻豆 | 亚洲成电影 | 1024国产基地永久免费 | 色成人免费网站 | 色五月丁香五月综合五月 | 视频在线观看一区二区三区 | 色天天综合网 | 777奇米影音 | 拍拍拍无档又黄又爽视频 | 免费污视频在线 | 免费啪视频观在线视频在线 | 欧美亚洲一区二区三区在线 | 天天看片夜夜爽 | 国产精品久久久久久久久免费观看 | 素股中文字幕 | 狠狠色噜噜狠狠狠狠97不卡 | 91日本视频 | 男人j进女人j的视频一进一出 | 国产欧美日韩综合精品一区二区 | 三及毛片 | 国产精品三级视频 | 免费看黄色录像 | 国产全肉乱妇杂乱视频 | 久久国产美女 | 色妞干网 | 国模私拍视频在线观看 | 国产精品视频永久免费播放 | 黑人边吃奶边扎下面激情视频 | 日韩三级免费看 | 四虎国产精品免费视 | 午夜在线影院 | 欧美射射射 | 看屁屁www视频免费观看 | 亚洲人成网站在线 | 日本高清视频色视频kk266 | 在线成人精品国产区免费 | 欧美亚洲综合另类成人 | 毛片8| 校园 春色 欧美 另类 小说 |