Verilog有符号整型数(signed int)比大小
本文参考了https://blog.csdn.net/wenxinwukui234/article/details/42119265/ 关于2进制补码的思考和讨论。
======================================================================================================
即使在变量声明的时候定义了signed属性, 在Verilog中使用>(大于),>=(大于等于),<(小于)和<=(小于等于)进行有符号数的大小比较时还是没有想要的结果。
现在需要实现一个有符号数比较的功能。
1、一些注记。
以8位有符号数(signed int)为例,表示范围是-128~+127,有一些边缘的数很有特征,记下来方便使用:
0000_0000 表示 0;
0000_0001 表示 +1;
1111_1111 表示 -1;
0111_1111 表示 +127;
1000_0001 表示 -127;
1000_0000 表示 -128.
我们发现,(1)除了0和-128,其他相反数按无符号相加,得到的是0000_0000(即0000_0000)。
(2)非负数的MSB(最高位)=0;负数的MSB=1。
2、比较规则。
我们设a和b为输入的两个signed 8类型的比较数,并且a>=b(GE)时输出信号y为1,否则输出为0。比较的规则如下:
(1)非负数一定大于负数。
(2)负数一定小于非负数。
(3)a、b同是非负数,则按unsigned比较两个数:a>=b则y=1;a<b则y=0。
(4)a、b同是负数,则按unsigned比较a和b的[6:0]即除去符号位:a[6:0]>=b[6:0]则y=1;a[6:0]<b[6:0]则y=0。
3、Verilog模块。
//************************************
// A >= B -> 1
// A < B -> 0
//
//************************************
module ageb_s8(
rst_n,
sys_sam_clk,
a,
b,
cmp_out ); //****************************************
// Port Def.
//
//****************************************
input wire rst_n;
input wire sys_sam_clk; input wire[:] a;
input wire[:] b; output wire cmp_out; //****************************************
// Define
//
//****************************************
localparam YES = 'b1;
localparam NO = 'b0; //****************************************
// Variables
//
//****************************************
reg cmp_reg; //****************************************
// Behaviour
//
//****************************************
assign cmp_out = cmp_reg; //*** Compare Logic
always@(posedge sys_sam_clk)begin
if(!rst_n)begin
cmp_reg <= 1'b0;
end
else begin
case({a[], b[]})
'b01:begin // a+, b-
cmp_reg <= 'b1;
end
'b10:begin // a-, b+
cmp_reg <= 'b0;
end
'b00:begin // a+, b+, Compare Amplitude
if(a[:] >= b[:])begin // Unsigned Compare
cmp_reg <= 'b1;
end
else begin
cmp_reg <= 'b0;
end
end
'b11:begin // a-, b-, Compare [6:0]
if(a[:] >= b[:])begin
cmp_reg <= 'b1;
end
else begin
cmp_reg <= 'b0;
end
end
default:begin
cmp_reg <= 'b0;
end
endcase
end
end endmodule
4、仿真
整体:比较结果y是PWM信号的形式。

局部:a<b

局部:a>b

仿真结果满足我的需要。
Verilog有符号整型数(signed int)比大小的更多相关文章
- v.size() return size_t not int 返回无符号整型数
In the C++ STL, the vector size() function return size_t, which is unsigned int, not int. So imagine ...
- 无符号整型 unsigned int、unsigned long、usigned long long、size_t 比较和格式控制
位数比较 由于数据的长度和平台相关,所以基于 64 位系统比较. Windows Linux unsigned int 32 bits/4294967295 32 bits unsigned long ...
- leetcode菜鸡斗智斗勇系列(1)---把一个链表中的二进制数字转换为一个整型数(int)
Convert Binary Number in a Linked List to Integer这道题在leetcode上面算作是“easy”,然而小生我还是不会做,于是根据大佬的回答来整理一下思路 ...
- 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理
使用程序获取整型数据和浮点型数据在内存中的表示. C++中整型(int).短整型(short int).单精度浮点数(float).双精度浮点数(double)在内存中所占字节数不同,因此取值范围也不 ...
- strtoul (将字符串转换成无符号长整型数)
strtoul strtoul (将字符串转换成无符号长整型数) 相关函数 atof,atoi,atol,strtod,strtol 表头文件 #include<stdlib.h> 定义函 ...
- 求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { pub ...
- 整型:int
整型:int 整型变量的定义和输出 注意://short<=int<=long<=longlong 代码示例一: #include<stdio.h> int ma ...
- PHP中IP地址与整型数字互相转换详解
这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...
- 使用头文件climits中的符号常量获知整型数据的表数范围---gyy整理
在头文件climits(limits.h)以宏定义的方式定义了各种符号常量来表示各种整型类型表示数的范围,如int的最大最小值,long的最大最小值等. 符号常量 表示 CHAR_BIT char 的 ...
随机推荐
- Nexus-vPC与FHRP
去往vPC的流量,如何可能将会被本地的vPC成员端口所转发.FHRP的行为是被修改的,所有的FHRP路由器都会主动转发从vPC收到的流量.修改结果:如果可能,流量避免使用Peer link,这样创建一 ...
- spark-env.sh增加HADOOP_CONF_DIR使得spark运行文件是hdfs文件
spark-env.sh增加HADOOP_CONF_DIR使得spark读写的是hdfs文件 刚装了spark,运行wordcount程序,local方式,执行的spark-submit,读和写的文件 ...
- 前端开发:javascript中的面向对象
前端开发:面向对象与javascript中的面向对象实现(一) 面向对象理解: 面向对象是一种对现实世界理解和抽象的方法,是一种先进的程序设计理念,是一种比较抽象的,多形态的设计模式.我们可以这么理解 ...
- Web--Utils
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 腾讯云 docker 镜像 dotnet/core sdk aspnet
ccr.ccs.tencentyun.com/mcr.microsoft.com/dotnetcoresdk = mcr.microsoft.com/dotnet/core/sdk => 3 ...
- Node Sass does not yet support your current environment: Linux 64-bit with Unsupported runtime
环境: ubuntu18 webstorm vue项目 报错原因: 缺少相关依赖 解决方法: npm rebuild node-sass 还未解决: npm uninstall --save node ...
- MySQL之innodb和myisam的区别
innodb和myisam的区别: MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型, .frm文件存储表定义, 数据文件的扩展名为.MYD, 索引文件的扩展名是 ...
- 8 HTML DOM 元素的查找与改变&改变CSS样式&HTML事件
HTML DOM(Document Object Model)文档对象模型 当网页被加载时,浏览器会创建页面的文档对象模型. HTMLDOM 定义了用于HTML的一系列标准的对象.通过DOM,你可以访 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 显示代码:多行代码带有滚动条
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- [蓝桥杯2017初赛]迷宫 DFS
题目描述 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间,R表示走到右边 ...