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

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

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

FPGA學(xué)習(xí)系列:32. 二進制轉(zhuǎn)十進制的設(shè)計

FPGA學(xué)習(xí)交流 ? 2018-08-28 16:16 ? 次閱讀

設(shè)計背景:

二進制轉(zhuǎn)十進制在設(shè)計應(yīng)用中十分的廣泛。尤其在AD轉(zhuǎn)化中是必須所用到的一個小知識點,學(xué)習(xí)二進制轉(zhuǎn)十進制的方法顯的非常的重要。今天就和筆者來學(xué)習(xí)二進制轉(zhuǎn)十進制的方法,通過簡單的學(xué)習(xí)來掌握這么一門知識。

設(shè)計原理:

本次的設(shè)計主要是一個簡單的二選一數(shù)據(jù)選擇器,我們的設(shè)計主

二進制中只有 0 和 1 兩個狀態(tài),可以表示 0、1 兩種狀態(tài)的電 子器件很多,如開關(guān)的接通和斷開,晶體管的導(dǎo)通和截止、磁元 件的正負剩磁、電位電平的低與高等都可表示 0、1 兩個數(shù)碼。使 用二進制,電子器件具有實現(xiàn)的可行性。

二進制數(shù)的運算法則少,運算簡單,使計算機運算器的硬件結(jié) 構(gòu)大大簡化。由于二進制 0 和 1 正好和邏輯代數(shù)的假(false)和 真(true)相對應(yīng),有邏輯代數(shù)的理論基礎(chǔ),用二進制表示二值 邏輯很自然。

電子器件中,所有的數(shù)據(jù)都是用二進制來表示的。

2.BCD

BCD 碼(Binary-Coded Decimal)亦稱二進碼十進數(shù)或二-十

進制代碼。用4位二進制數(shù)來表示1位十進制數(shù)中的0~910 數(shù)碼。BCD 碼是一種二進制的數(shù)字編碼形式,用二進制編碼的十 進制代碼。BCD 碼這種編碼形式利用了四個位元來儲存一個十進 制的數(shù)碼,使二進制和十進制之間的轉(zhuǎn)換得以快捷的進行。

3.實現(xiàn)方法

1)10求余法

將需要轉(zhuǎn)換的數(shù)字除權(quán),然后對10求余,得出數(shù)各個 位上的數(shù)字。8b1000_000010中的128,將此數(shù) 字對10余,“8,“8”賦最低的4。 此數(shù)字(128)10得出12(在FPGA計算,自取整 10,然得出“2,2”賦給低的4。將此 數(shù)字(128)除以100,得出1,對10余,然得出“1, “1”賦給另外的4位。這樣就轉(zhuǎn)換出了BCD碼。

這類方法中,利用了大量的除法和求余,占用了大量的邏輯資 源。但是,實現(xiàn)比較簡單,如果芯片的邏輯資源足夠的話,可以 采取使用這種方法。

2)大四加三法

image.png


進行移位,然后進行判斷。如果大于四,則加三。最后得出我 們想要的BCD(下是按轉(zhuǎn)換7講解的。



架構(gòu)圖如下










bin_data[7:0]:輸入的二進制數(shù)據(jù)。

bin_data[11:0]:輸出的BCD碼(輸入的二進制數(shù)據(jù)為8位,最大 8’b1111_1111(255),四位表示一個BCD故而12。

設(shè)計代碼:

設(shè)計模塊

module bin_to_bcd(bin, bcd);

input [7:0] bin;

output [11:0] bcd;


wire [19:0] shift_reg [5:0];


assign shift_reg[5] = {9'b0,bin,3'b0};


bcd_modify u1(.bcd_in(shift_reg[5]), .bcd_out(shift_reg[4]));

bcd_modify u2(.bcd_in(shift_reg[4]), .bcd_out(shift_reg[3]));

bcd_modify u3(.bcd_in(shift_reg[3]), .bcd_out(shift_reg[2]));

bcd_modify u4(.bcd_in(shift_reg[2]), .bcd_out(shift_reg[1]));

bcd_modify u5(.bcd_in(shift_reg[1]), .bcd_out(shift_reg[0]));


assign bcd = shift_reg[0][19:8];


endmodule

module bcd_modify(bcd_in, bcd_out);

input [19:0] bcd_in;

output [19:0] bcd_out;

wire [19:0] bcd_reg;


bcd_sigle_modify u1(.bcd_in(bcd_in[19:16]), .bcd_out(bcd_reg[19:16]));

bcd_sigle_modify u2(.bcd_in(bcd_in[15:12]), .bcd_out(bcd_reg[15:12]));

bcd_sigle_modify u3(.bcd_in(bcd_in[11:8]), .bcd_out(bcd_reg[11:8]));

assign bcd_reg[7:0] = bcd_in[7:0];

assign bcd_out = {bcd_reg[18:0],1'b0};


endmodule

module bcd_sigle_modify(bcd_in, bcd_out);

input [3:0] bcd_in;

output reg [3:0] bcd_out;


always @ (*)

begin

if (bcd_in > 4)

bcd_out = bcd_in + 3;

else

bcd_out = bcd_in;

end

endmodule

測試模塊

`timescale 1ns/1ps

module tb();


reg [7:0] bin;

wire [11:0] bcd;


initial begin


bin = 255;

#500 bin = 20;


#500 bin = 125;


#500 $stop;

end

bin_to_bcd bin_to_bcd_dut(

.bin(bin),

.bcd(bcd)

);

endmodule

仿真:

從仿真中可以看出本次設(shè)計的正確性,測試中我們輸出的二進制和為8個1也就是255,轉(zhuǎn)化為10進制后 按16進制顯示,也就是255,通過驗證設(shè)計正確。


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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598895
收藏 人收藏

    評論

    相關(guān)推薦

    十進制數(shù)據(jù)轉(zhuǎn)十六進制字符_轉(zhuǎn)ASCII碼

    十進制數(shù)據(jù)轉(zhuǎn)十六進制字符_轉(zhuǎn)ASCII碼
    發(fā)表于 09-18 10:17 ?0次下載

    二進制處理中的一些技巧

    二進制十進制的處理中,有時候一些小技巧是很有用的。 1、把十進制數(shù)轉(zhuǎn)換成二進制數(shù) (1)在MATLAB中有一個函數(shù)dec2bin,可以把正整數(shù)轉(zhuǎn)換為2
    的頭像 發(fā)表于 07-05 11:51 ?353次閱讀

    十進制和4位二進制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《十進制和4位二進制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-31 09:32 ?0次下載
    <b class='flag-5'>十進制</b>和4位<b class='flag-5'>二進制</b>計數(shù)器數(shù)據(jù)表

    雙4位十進制二進制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《雙4位十進制二進制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-13 11:12 ?0次下載
    雙4位<b class='flag-5'>十進制</b>和<b class='flag-5'>二進制</b>計數(shù)器數(shù)據(jù)表

    同步4位十進制二進制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《同步4位十進制二進制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-09 11:29 ?0次下載
    同步4位<b class='flag-5'>十進制</b>和<b class='flag-5'>二進制</b>計數(shù)器數(shù)據(jù)表

    如何實現(xiàn)二進制和BCD碼數(shù)據(jù)的相互轉(zhuǎn)變?

    如何實現(xiàn)二進制和BCD碼數(shù)據(jù)的相互轉(zhuǎn)變? 二進制碼是將十進制數(shù)字表示為二進制數(shù)和十進制數(shù)的一種表示方法。在計算機系統(tǒng)中,
    的頭像 發(fā)表于 02-18 14:51 ?2406次閱讀

    鴻蒙二進制數(shù)組創(chuàng)建

    背景 c++層數(shù)據(jù)都是二進制,需要轉(zhuǎn)換成arrayBuffer透傳到ets層給業(yè)務(wù)使用,但是鴻蒙的使用下面兩個api創(chuàng)建出來的二進制數(shù)組數(shù)據(jù)都是錯誤的。 接口
    的頭像 發(fā)表于 01-31 15:24 ?1123次閱讀

    二進制、八進制、十六進制在現(xiàn)實當(dāng)中有什么意義?

    ,我們可以從數(shù)字存儲和數(shù)據(jù)傳輸?shù)慕嵌葋砜催@些進制的意義。計算機內(nèi)部使用的是二進制,即由0和1組成的數(shù)字系統(tǒng)。這是因為計算機中的所有數(shù)據(jù)都被轉(zhuǎn)化為二進制形式進行處理和存儲。人們使用十進制
    的頭像 發(fā)表于 01-16 11:14 ?1833次閱讀

    10進制轉(zhuǎn)換為二進制的算法

    十進制轉(zhuǎn)換為二進制是計算機科學(xué)中非?;A(chǔ)且重要的概念之一。在理解和應(yīng)用計算機科學(xué)的基礎(chǔ)知識時,掌握這個算法是至關(guān)重要的。 在開始講解十進制轉(zhuǎn)換為二進制的算法之前,讓我們回顧一下
    的頭像 發(fā)表于 01-15 10:32 ?1422次閱讀

    10進制轉(zhuǎn)換為二進制的算法

    10進制轉(zhuǎn)換為二進制是計算機領(lǐng)域中非常重要的一個問題。在計算機中,所有的數(shù)據(jù)都是以二進制形式進行存儲和處理的。因此,我們常常需要將10進制數(shù)轉(zhuǎn)換為
    的頭像 發(fā)表于 01-11 09:14 ?1547次閱讀

    你知道十進制轉(zhuǎn)二進制如何進行轉(zhuǎn)換嗎?

    你知道十進制轉(zhuǎn)二進制如何進行轉(zhuǎn)換嗎? 當(dāng)我們提到數(shù)字系統(tǒng)時,最常見的是十進制系統(tǒng)和二進制系統(tǒng)。十進制
    的頭像 發(fā)表于 12-20 17:05 ?1053次閱讀

    十進制、十六進制二進制數(shù)制的區(qū)別

    計算機內(nèi)部一般也是8位的倍數(shù)(8位= 1字節(jié)),所以每個字節(jié)可以方便地用2個十六進制數(shù)字表示。對于工程師來說,這比長的二進制數(shù)字序列更容易處理,但是計算機內(nèi)部仍然是以2為基數(shù)的二進制數(shù)字系統(tǒng)。
    的頭像 發(fā)表于 11-28 10:45 ?1318次閱讀
    <b class='flag-5'>十進制</b>、十六<b class='flag-5'>進制</b>和<b class='flag-5'>二進制</b>數(shù)制的區(qū)別

    二進制數(shù)據(jù)及取值范圍的計算方法

    本文介紹二進制數(shù)據(jù)的相關(guān)知識,如定義、取值范圍計算、轉(zhuǎn)換為十進制的方法以及一些常見位數(shù)的二進制數(shù)據(jù)的取值范圍等。
    的頭像 發(fā)表于 11-08 15:48 ?1554次閱讀
    <b class='flag-5'>二進制</b>數(shù)據(jù)及取值范圍的計算方法

    計算機為什么使用二進制來表達

    在生活中,人們已經(jīng)習(xí)慣用十進制來計數(shù),0~9的發(fā)明是人類的偉大進步,從此就可以用0~9這個數(shù)字的組合能表示任何大小的數(shù)字。于是初學(xué)計算機的人往往會問的問題是,計算機為什么使用二進制來表達,這不是提高我們的
    的頭像 發(fā)表于 10-30 15:44 ?1480次閱讀
    計算機為什么使用<b class='flag-5'>二進制</b>來表達

    請問bcd碼和二進制有什么關(guān)系?

    這個bcd碼和二進制有什么關(guān)系? bcd 表示0011001是19(十進制) 二進制表示0011001是25(十進制) 這個怎么確定是哪個???
    發(fā)表于 10-07 06:02