• verilog中的数据类型


    Verilog中的数据格式

    1、基本概念

    verilog中写一个数据的通用格式是 n'b000_000_···_000,表示一个n位的二进制数。基于这个通用式,可以将其分为三个部分:位数、加权数和实际数。改变位数自然可以改变该数的存储宽度。改变加权数则是改变数制。如使用b(二进制),d(十进制),h(十六进制)。八进制的表示没有注意过,用的也比较少,感兴趣可以去了解一下。改变实际数则是改变了数值的大小。这里可以推出申明常数的流程。先在内存确认空间。注意这里的长度都是基于二进制的。也好理解,毕竟存储在寄存器中的数据都是二进制的。而后确定描述形式。这个形式配合后面的实际数构成了这个数据的值。下面是几个例子:

    1'b1;
    2'd10;
    3'hf;
    4'b0001;
    5'd32;
    6'h3f;

    在上面的几个数中,第一个是正确的。表示一位二进制1,第二个超出内存限制,实际值为2’d3。但是现在的编辑器会报错。编辑器可以将高位补0,但是不会承认溢出数据。其他几个也是采取同样的方法阅读。

    接下来是几种简写的方式:

    'b0001;
    'd1000;
    'hffee;
    1;
    2;
    6;

    前面三个数据省略内存申明,由具体的编译器补充。后面的则是默认32位十进制的数据。如果超出编译器则会拓展。

    当然一般来说,只有十进制数一般不用于verilog中的数据赋值,而是用于判断语句或者位宽等值的使用。这样可以有效地分辨赋值数据的所在。至于第二种的缩写则是对于一些数据变化较大不好确认空间的数据。为什么会有常数数据变化呢?

    这里常见的就是手动修改对应的数据大小。还有参数传递过程中也是有数据大小的变化的。

    2、实际应用

    在实际的运用中,有许多为了适应电路特性的编码方式。比较有名的是ASCII编码,BCD编码等方式。

    其中ASCII码是8位宽的编码,也就是一个字节。在verilog可以直接使用" M "的方式表示M的ASCII码。

    而BCD码则是一种无权码。其中常见的就是8421BCD码,就是使用四位表示0~9这10个十进制的数中的一个,然后拼接。简单理解,BCD,就是将一个十进制的每个权上的数取下来,由四位二进制表示,然后直接按照顺序拼接。感觉像将一列火车拆成一节一节,放在不同的轨道运行。

    这也体现了BCD的优势所在,由于数字电路是支持位操作的,所以可以通过操作BCD码直接得到十进制数的高位的加减。这样可以避开不需要处理的低位数据。而缺点就是不能和十进制数据直接转化,需要经过二进制。具体举个例子:

    8'd10+8'd20=8'd30;
    {4'd1 , 4'd0} + {4'd2 , 4'd0 }={4'd3,4'd0}

    上面的是十进制的加法,下面是BCD加法的示意图。对于我们来说,判断逻辑是一样的,就是从低到高开始加,依次判断本位值和进位值。这是全加器的思路。而对于BCD码而言,可以直接对应到需要操作的位数。比如这里是十位直接相加,个位保持不变。这就将8位全加器的工作转化为4位全加器。当然,BCD码并不是用于计算的,从这里也可以看到计算结果并不能直接使用,计算反而麻烦。这个例子只是说明BCD码的模型。

    那BCD的优势在具体应用中的有何体现呢。

    BCD的主要特点是无权。所以在设计中可以直接拼接,所以对于那些只需要表示而不需要大量计算的十进制转化为BCD可以有效地提高电路处理速度。

    3、总结

    了解BCD是比较重要的,可以提高设计的效率和可读性。

  • 相关阅读:
    刘翔那点事
    网站建站模板
    搞笑!from 饮水思源
    我de虚拟经济学系列第一章 经济危机拼命建桥
    IT民工系列——c#操作Microsoft IE,实现自动登录吧!
    商业智能的发展及其应用
    我de虚拟经济学系列第三章 常见的致富之路
    IT民工系列——c#操作EditGrid,自己做一个在线Excel数据库吧!
    Asp.net下的Singleton模式
    asp.net 控件功能小结
  • 原文地址:https://www.cnblogs.com/electricdream/p/13053021.html
Copyright © 2020-2023  润新知