首页 > 其他分享 >有符号数计算Verilog

有符号数计算Verilog

时间:2022-09-01 16:12:59浏览次数:89  
标签:wire 符号 clk 补码 Verilog 计算 input data

以往在做一些数字电路设计中未曾涉及到有符号数的计算,因此昨日遇见一道简单的题目,没有搞清楚原理导致答错,特此记录下Verilog中有符号数计算的特点。

一、题目描述以及错误原因

有符号数1111+0010得到的结果是?

其实这道题很简单,但是我的思路错了,计算机表示负数是用补码表示的,所以1111(B)对应的十进制数为1111(B)取反加一,即1000(B)+1=1001(B),也就是-1(D),转换为十进制计算就是-1+2=1,所以结果就是1也就是0001(B)。

我错误的思路:1111因为符号位为1,所以其为负数,其十进制表示为-7(D),-7+2=-5,所以结果为1101(B)。

错误原因:

一定要注意,计算机看数据是以补码的形式看待的,所以一定要转换为补码进行计算!正数的补码就是原码,负数的补码就是原码取反加一。

二、Verilog设计及仿真结果

rtl代码如下:

 1 module signedplus(
 2     input                 wire            clk,
 3     input                 wire            rst,
 4     input                 wire  signed [3:0] da,
 5     input                 wire  signed [3:0] db,
 6     // output                reg     [4:0]    data
 7     output                 reg  signed [4:0] data
 8     );
 9 
10 always @(posedge clk) begin
11     if (rst) begin
12         // reset
13         data <= 'd0;
14     end
15     else begin
16         data <= da + db;
17     end
18 end
19 
20 endmodule
View Code

Modelsim仿真结果为下图,可以看出与分析结果一致

另外,因为计算结果data用5位数据来保存,因此两个加数的符号位扩展,da扩展为11111(B),db扩展为00010(B),相加后结果为00 001(B)

而如果按照无符号数来看呢?

 1 module signedplus(
 2     input                 wire            clk,
 3     input                 wire            rst,
 4     input                 wire   [3:0] da,
 5     input                 wire   [3:0] db,
 6     // output                reg     [4:0]    data
 7     output                 reg   [4:0] data
 8     );
 9 
10 always @(posedge clk) begin
11     if (rst) begin
12         // reset
13         data <= 'd0;
14     end
15     else begin
16         data <= da + db;
17     end
18 end
19 
20 endmodule
View Code

这里的变化仅仅是去掉了signed描述

仿真结果如下,就是直接相加得到的结果

还有一些博客也介绍了有符号数计算的相关注意事项,值得参考学习

verilog有符号数的计算

 

标签:wire,符号,clk,补码,Verilog,计算,input,data
From: https://www.cnblogs.com/Achilles7/p/16646701.html

相关文章

  • 助教工作总结(计算机操作系统)
    一、助教工作的具体职责和任务批改同学们每一次的课堂作业并且登记成绩,及时对同学们作业中出现的主要问题进行总结并反馈给任课老师,协助老师更好地推进课程进度,帮助同学们......
  • calc() 计算的宽度设置之后没有生效
    在计算的时候一定不要忘记加上单位,也不要忘记运算符之间要有空格。下面是错误的例子:.error{width:calc(var(--sidebar-width)-30);}下面是正确的例子:.correct{......
  • 范例:存款复利计算器
    #include<iostream>usingnamespacestd;intmain(){doubler,m,y;cout<<"*****复利计算器****"<<endl;cout<<"银行年利率:(%)";cin>>r;cout<<"\r......
  • 计算机概况及其语言发展史
    1.能按程序运行、自动、高速处理海量数据的现代化智能电子设备(由硬件和软件组成)2.常见形式:台式计算机、笔记本计算机、大型计算机……3.应用:科学计算、数据处理、自动控......
  • 无服务器计算编程语言采用
    无服务器计算编程语言采用本文介绍了主要云供应商提供的不同编程语言和运行时。采用情况和趋势是什么。每个云供应商都提供哪些编程语言?Serverlessprogramminglangua......
  • 8/31 深入理解计算机系统 第十一章 网络编程
    第十一章网络编程11.1客户端-服务器编程模型包含一个服务器进程和多个客户端进程。服务器管理某种资源,并通过操作这种资源给客户端提供某种服务。基本操作是:事务一个......
  • 一元函数积分学的概念与计算
    一元函数积分学的概念与计算目录概念定积分概念定积分存在定理不定积分原函数和不定积分不定积分存在性变限积分概念性质反常积分计算基本积分公式凑微分换元分部积分有理......
  • verilog 中的三段式状态机
    抄的:https://zhuanlan.zhihu.com/p/431143109一段式状态机特点:最主要的特征是只有一个always块。在这个always块内既描述状态转移,又含有组合逻辑输入/输出,当前状态用......
  • 2 计算模型与复杂性类 | 密码协议课程笔记
    1计算模型1:图灵机1.1图灵机的定义图灵机是一个简洁的计算模型。我们可以将图灵机视为拥有一个无限长、可以双向移动的工作带的有限自动机。在初始阶段,工作带开始的几......
  • 计算机网络 _ 物理层
    物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。用于物理......