参考:

https://www.cnblogs.com/yuandonghua/p/signed.html

https://blog.csdn.net/a389085918/article/details/79915685

1 有符号数定义

有符号数的定义通过关键词signed实现,如果不使用signed则默认都为无符号数。定义2个8位的有符号的变量:

reg signed [7:0]     a;
wire signed [7:0]    b;

2 有符号数的表示

verilog中的有符号数以补码形式表示。

reg signed   [7:0]   a;initial begina = -25;$display("a = %b", a);a = 37;$display("a = %b", a);end

仿真输出:

a = 11100111
a = 00100101

显然11100111是-25的二进制补码 ,00100101是37的二进制补码。

3 有符号数的使用

verilog中的有符号数常用于进行运算操作(加、减、乘)。

3.1 $signed()和$unsigned()函数

在进行有符号数运算的代码设计时,往往需要用到2个系统函数$signed()和$unsigned()。一般$signed()使用较多,$unsigned()使用较少。

这两个函数的作用是告诉编译器所修饰的变量的二进制数据被当作有符号数($signed())或无符号数($unsigned())来处理。并不对变量数据做任何转换操作。

reg [7:0]               data0;
reg signed [7:0]        data1;initial begindata0 = 8'b1111_0000;  $display("data0 = %0d", data0);
$display("data0 = %0d", $signed(data0));data0 = 8'b0111_0000;$display("data0 = %0d", data0);
$display("data0 = %0d", $signed(data0));data1 = 8'b1111_0000;  $display("data1 = %0d", data1);
$display("data1 = %0d", $unsigned(data1));data1 = 8'b0111_0000;$display("data1 = %0d", data0);
$display("data1 = %0d", $unsigned(data1));end

仿真结果:

data0 = 240
data0 = -16
data0 = 112
data0 = 112
data1 = -16
data1 = 240
data1 = 112
data1 = 112

3.2 有符号数运算

在设计时,任何运算的表达式中不能将有符号变量和无符号变量进行混用。必须保证全都为无符号变量或有符号变量,如果至少存在1个无符号变量,那么整个表达式的运算过程会被当作无符号数运算。考虑如下情况:

reg signed   [7:0]   a;
reg [7:0]           b;
reg [8:0]           c;
reg signed [8:0]    d;initial begina = -7;
b = 138;$display("a = %b", a);
$display("b = %b", b);c = a + b;
d = a + b;$display("c = %b", c);
$display("c = %0d", c);
$display("d = %b", d);
$display("d = %0d", d);end   

仿真结果:

a = 11111001
b = 10001010
c = 110000011
c = 387
d = 110000011
d = -125

显然a和b都被当作无符号数相加。

如果表达式中存在1个有符号数(a),那么运算结果必须定义为signed有符号变量(d),而且另外的无符号数(b)都应该转换为有符号数的形式表示。这可以通过$signed()来实现。考虑下面两种使用方法:

reg signed [7:0]    a;
reg [7:0]           b;
reg signed [8:0]    d;initial begina = -7;
b = 138;$display("a = %b", a);
$display("b = %b", b);d = a + $signed(b);
$display("d = %b", d);
$display("d = %0d", d);d = a + $signed({1'b0, b});
$display("d = %b", d);
$display("d = %0d", d);end

仿真结果:

a = 11111001
b = 10001010
d = 110000011
d = -125
d = 010000011
d = 131

显然第1种用法的结果是错的,第2种用法的结果是正确的。因为138的8位二进制为10001010,其最高位为1,如果直接使用$signed(b),那么编译器会把10001010当作负数(-118)的二进制补码,所以b就被当作-118使用了。正确的方法应该是在最高位之前补上1个正数的符号位0,确保补码为正数。

verilog有符号数使用方法简介相关推荐

  1. 对verilog中有符号数和无符号数的理解

    文章目录 对verilog中有符号数和无符号数的理解 对verilog中有符号数和无符号数的理解 ​ verilog中使用signed表示有符号数,比如: wire signed [7:0] din; ...

  2. verilog - signed 符号数与无符号

    #verilog #FPGA verilog - signed 符号数与无符号数计算 文章目录 verilog - signed 符号数与无符号数计算 原码 .反码 . 补码的关系 verilog 中 ...

  3. verilog有符号数加减法----正负128

    目录 1. 加运算,+128或者+(-128) 1)输入信号为8位有符号数 2)输入信号为9位有符号数 2. 减法运算,-128或者-(-128) 1)输入信号为8位有符号数 2)输入信号为9位有符号 ...

  4. Verilog有符号数与无符号数的相互转化

    Verilog有符号数与无符号数的相互转化 最近在使用DA转换时碰到一个问题,DA芯片输入的数值必须是正的,但输出的数据为有符号数,涉及到一个转化的问题,写一篇博客总结一下. 问题描述 一.正数 二. ...

  5. 关于FPGA中有符号数表示方法的一些认识

    有符号数的2进制表示方法是:最高位表示符号位,'1'表示负数,'0'表示正数. 通常负数以补码的形式出现.例如一个4bit数,首先它能够表示的有符号数的范围从-8~7.-8的二进制补码值为4'b100 ...

  6. Verilog有符号数运算

    在数字电路中,出于应用的需要,我们可以使用无符号数,即包括0及整数的集合:也可以使用有符号数,即包括0和正负数的集合.在更加复杂的系统中,也许这两种类型的数,我们都会用到. 有符号数通常以2的补码形式 ...

  7. verilog中有符号数运算

    verilog中的有符号数运算 有符号数的计算:若有需要关于有号数的计算,应当利用Verilog 2001所提供的signed及$signed()机制. Ex: input signed [7:0] ...

  8. Verilog有符号数运算,四舍五入,饱和截位

    参考文章[设计经验]5.Verilog对数据进行四舍五入(round)与饱和(saturation)截位 当前还有存疑,请大家指正 题目: 请用Verilog实现算法 Q = K * (D - 16) ...

  9. verilog中有符号数和无符号数的相关运算

    目录 1.有符号数和有符号数的加减运算(输入和输出为原码) 2.无符号数和有符号数的加减运算(输入和输出为原码) 3.有符号数和有符号数的乘法(输入和输出为原码) 1.有符号数和有符号数的加减运算(输 ...

最新文章

  1. python中http_Python中HTTP协议
  2. UA MATH565C 随机微分方程III Ito积分简介
  3. 【PAT乙级】1074 宇宙无敌加法器 (20 分)
  4. 建立单独的解决方案来开发DNN模块
  5. 计算机网络期末复习提纲
  6. 发布代码小助手V2.1发布了——Code2HTML工具
  7. Linux学习笔记004----CentOS7 提升普通用户权限到Root权限
  8. 火神山医院完工,2月3日收治病人!“云监工”请放心!
  9. atheros无线网卡驱动_5.8G无线网桥CPE,安防监控拍档高清无干扰
  10. Maven的下载、安装和配置
  11. MySQL 优化技巧
  12. [PHP] PHP源码中的条件编译定义
  13. Python学习-第一天-函数和模块的使用
  14. 高通APQ8074(骁龙800)处理器
  15. matlab中abs( )函数
  16. maya表情blendshape_带BlendShape表情的动作文件播放异常
  17. Gateway断言功能详解
  18. 使用sql语句在命令行下载mysql表格数据
  19. 【Python2】使用python中的turtle模块学习海龟绘图(有趣的python初体验)(最全最详细的turtle介绍使用)
  20. 动物识别系统c语言编程,人工智能期末论文-简单动物识别系统的知识表示.doc

热门文章

  1. c++常用函数对应的头文件
  2. vue.runtime.esm.js?2b0e:619 [Vue warn]: Invalid prop: type check failed for prop “data“.问题的简单解决 通俗易懂
  3. 《集结号》与戴镣铐跳舞的冯小刚
  4. python plotly 平均值折线图_如何使用Plotly带有折线图的堆积条形图?
  5. linux初学者指南-基本配置
  6. 小白快速入手微信小程序
  7. 十目监测系统:中国乔丹侵权案终审败诉,乔丹体育,再见
  8. C语言程序——函数(2)
  9. android+so+upx,UPX压缩壳简介
  10. 币圈创新教程之:自己动手创建个性化EOS币账户