0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习系列:32. 二进制转十进制的设计

FPGA学习交流 2018-08-28 16:16 次阅读

设计背景:

二进制转十进制在设计应用中十分的广泛。尤其在AD转化中是必须所用到的一个小知识点,学习二进制转十进制的方法显的非常的重要。今天就和笔者来学习二进制转十进制的方法,通过简单的学习来掌握这么一门知识。

设计原理:

本次的设计主要是一个简单的二选一数据选择器,我们的设计主

二进制中只有 0 和 1 两个状态,可以表示 0、1 两种状态的电 子器件很多,如开关的接通和断开,晶体管的导通和截止、磁元 件的正负剩磁、电位电平的低与高等都可表示 0、1 两个数码。使 用二进制,电子器件具有实现的可行性。

二进制数的运算法则少,运算简单,使计算机运算器的硬件 构大大简化。由于二进制 0 和 1 正好和逻辑代数的假(false)和 真(true)相对应,有逻辑代数的理论基础,用二进制表示二值 逻辑很自然。

电子器件中,所有的数据都是用二进制来表示的。

2.BCD

BCD 码(Binary-Coded Decimal)亦称二进码十进数或二-十

进制代码。用4位二进制数来表示1位十进制数中的0~910 数码。BCD 码是一种二进制的数字编码形式,用二进制编码的十 进制代码。BCD 码这种编码形式利用了四个位元来储存一个十进 制的数码,使二进制和十进制之间的转换得以快捷的进行。

3.实现方法

1)10求余法

将需要换的字除然后对10求余得出数各个 位上的字。8b1000_000010中的128将此数 字对10余,“8“8”赋最低的4 此数字(128)10得出12(在FPGA计算,自取整 10,然得出“22”赋给低的4。将此 数字(128)除以100,得出1,对10余,然得出“1 “1”赋给另外的4位。这样就转换出了BCD码。

这类方法中,利用了大量的除法和求余,占用了大量的逻辑资 源。但是,实现比较简单,如果芯片的逻辑资源足够的话,可以 采取使用这种方法。

2)大四加三法

image.png


进行移位,然后进行判断。如果大于四,则加三。最后得出我 们想要的BCD(下是按转换7讲解的



架构图如下










bin_data[7:0]:输入的二进制数据。

bin_data[11:0]:输出的BCD码(输入的二进制数据为8位,最大 8’b1111_1111(255),四位表示一个BCD故而12

设计代码:

设计模块

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

仿真:

从仿真中可以看出本次设计的正确性,测试中我们输出的二进制和为8个1也就是255,转化为10进制后 按16进制显示,也就是255,通过验证设计正确。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21664

    浏览量

    601680
收藏 人收藏

    评论

    相关推荐

    hex格式和二进制的区别

    HEX格式和二进制在多个方面存在显著的区别。以下是对这两者的对比: 一、定义与表示方式 HEX格式 : HEX,全称为Intel HEX,是一种用于存储和传输数据到嵌入式系统(如单片机)的文件格式
    的头像 发表于 11-18 15:24 206次阅读

    二进制编码器的种类及特点

    二进制编码器是一种电子电路,用于将二进制信号转换为其他格式,如十进制、格雷码等。以下是一些常见的二进制编码器种类及其特点: 优先编码器(Priority Encoder) : 特点 :
    的头像 发表于 11-06 09:47 253次阅读

    二进制编码器工作原理 如何选择二进制编码器

    二进制编码器是一种数字电路,它将输入的二进制代码转换为对应的输出信号。在数字系统中,编码器用于将数据从一种形式转换为另一种形式,以便于处理和传输。 二进制编码器工作原理 输入与输出关系 :
    的头像 发表于 11-06 09:44 255次阅读

    十进制数据十六进制字符_ASCII码

    十进制数据十六进制字符_ASCII码
    发表于 09-18 10:17 0次下载

    二进制处理中的一些技巧

    二进制十进制的处理中,有时候一些小技巧是很有用的。 1、把十进制数转换成二进制数 (1)在MATLAB中有一个函数dec2bin,可以把正整数转换为2
    的头像 发表于 07-05 11:51 505次阅读

    十进制和4位二进制计数器数据表

    电子发烧友网站提供《十进制和4位二进制计数器数据表.pdf》资料免费下载
    发表于 05-31 09:32 0次下载
    <b class='flag-5'>十进制</b>和4位<b class='flag-5'>二进制</b>计数器数据表

    双4位十进制二进制计数器数据表

    电子发烧友网站提供《双4位十进制二进制计数器数据表.pdf》资料免费下载
    发表于 05-13 11:12 0次下载
    双4位<b class='flag-5'>十进制</b>和<b class='flag-5'>二进制</b>计数器数据表

    同步4位十进制二进制计数器数据表

    电子发烧友网站提供《同步4位十进制二进制计数器数据表.pdf》资料免费下载
    发表于 05-09 11:29 0次下载
    同步4位<b class='flag-5'>十进制</b>和<b class='flag-5'>二进制</b>计数器数据表

    如何实现二进制和BCD码数据的相互转变?

    如何实现二进制和BCD码数据的相互转变? 二进制码是将十进制数字表示为二进制数和十进制数的一种表示方法。在计算机系统中,
    的头像 发表于 02-18 14:51 3252次阅读

    鸿蒙二进制数组创建

    背景 c++层数据都是二进制,需要转换成arrayBuffer透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的二进制数组数据都是错误的。 接口
    的头像 发表于 01-31 15:24 1211次阅读

    二进制、八进制、十六进制在现实当中有什么意义?

    ,我们可以从数字存储和数据传输的角度来看这些进制的意义。计算机内部使用的是二进制,即由0和1组成的数字系统。这是因为计算机中的所有数据都被转化为二进制形式进行处理和存储。人们使用十进制
    的头像 发表于 01-16 11:14 5064次阅读

    10进制转换为二进制的算法

    十进制转换为二进制是计算机科学中非常基础且重要的概念之一。在理解和应用计算机科学的基础知识时,掌握这个算法是至关重要的。 在开始讲解十进制转换为二进制的算法之前,让我们回顾一下
    的头像 发表于 01-15 10:32 3003次阅读

    10进制转换为二进制的算法

    10进制转换为二进制是计算机领域中非常重要的一个问题。在计算机中,所有的数据都是以二进制形式进行存储和处理的。因此,我们常常需要将10进制数转换为
    的头像 发表于 01-11 09:14 2228次阅读

    你知道十进制二进制如何进行转换吗?

    你知道十进制二进制如何进行转换吗? 当我们提到数字系统时,最常见的是十进制系统和二进制系统。十进制
    的头像 发表于 12-20 17:05 1434次阅读

    十进制、十六进制二进制数制的区别

    计算机内部一般也是8位的倍数(8位= 1字节),所以每个字节可以方便地用2个十六进制数字表示。对于工程师来说,这比长的二进制数字序列更容易处理,但是计算机内部仍然是以2为基数的二进制数字系统。
    的头像 发表于 11-28 10:45 1844次阅读
    <b class='flag-5'>十进制</b>、十六<b class='flag-5'>进制</b>和<b class='flag-5'>二进制</b>数制的区别