无符号整数除法器:16位除8位

备注:在写testbench时发现reg型变量是有符号的补码形式。使用{$random}%b产生无符号随机数,除数被除数依旧可能取值为负数;然后手动输入大于2^7=128的数作为除数,发现发生溢出,除数被当作负数,这才发现此时reg型变量应该是被当作了有符号数的补码形式。一般认为reg型变量为无符号型变量,有出入,特此记录。

源代码

//unsigned 16bit/8bit
module unsignediv(divee,divor,result,odd);
input [15:0] divee;
input [7:0] divor;
output [15:0]result;
output [15:0]odd;reg [15:0] result,odd;
reg [15:0] tempa;
reg [7:0] tempb;
reg [31:0] temp_a,temp_b;
integer i;always @ (divee or divor)
begintempa=divee;tempb=divor;temp_a={16'h0000,tempa};temp_b={tempb,16'h0000};for(i=0;i<16;i=i+1)begintemp_a={temp_a[30:0],1'b0};if(temp_a[31:16]>=tempb)temp_a=temp_a-temp_b+1'b1;else temp_a=temp_a;endresult=temp_a[15:0];odd=temp_a[31:16];
endendmodule

测试代码

module unsigned_tb;
reg [15:0] divee;
reg [7:0] divor;
wire [15:0] result,odd;initial
begin#10 divee = 12345;divor = 106; #100 divee = 2383;divor = 12;#100 divee = {$random}%100;divor = {$random}%10; #1000 $stop;
endunsignediv U1(divee,divor,result,odd);
endmodule
仿真结果

仿真过程中发现的reg疑问

(1)当使用随机数
module unsigned_tb;
reg [15:0] divee;
reg [7:0] divor;
wire [15:0] result,odd;initial
begin#10 divee = {$random}%10000;divor = {$random}%256;  //{$random}%b表示产生一个0~b-1的随机整数#100 divee = {$random}%1000;divor = {$random}%100;#100 divee = {$random}%100;divor = {$random}%10;  #1000 $stop;
endunsignediv U2(divee,divor,result,odd);
endmodule
仿真结果

可以看到,-127这一组计算错误,原因是:即使利用{$random}%b产生正随机数,但当最高位为1时,即数值大小超过128时,按照有符号整数补码的读数规则,为相应负数。而源代码只适用于无符号整数即正整数的除法运算,因此计算错误是在所难免的。通过手动输入具体数值,验证确实是这个原因。

(2)当手动输入
module unsigned_tb;
reg [15:0] divee;
reg [7:0] divor;
wire [15:0] result,odd;initial
begin#10 divee = 12345;divor = 106;  //divor=8'b01101010#100 divee = 12345;divor = 106+128;  //divor=8'd234=8'b11101010#100 divee = 2383;divor = 12;#100 divee = {$random}%100;divor = {$random}%10; #1000 $stop;
endunsignediv U3(divee,divor,result,odd);
endmodule

为了具有对比性,把除数的最高位分别设置为0和1,可以看到结果如下图所示:

仿真结果


8’b11101010 = 8’d234 = -8’d22,计算发生错误。其他例子都是正确的。

结论:

verilog中reg型变量是无符号整数类型,发生此类错误原因暂时不明。不过得到的教训是以后在仿真过程中注意最好让数据最高位为0,避免发生溢出为负这样的错误

Ps:如果有看到我这篇小记录且知道原因的小伙伴还请指教指教!!

无符号整数除法器:16位除8位相关推荐

  1. 7.某计算机的控制器采用微程序控制方式,微指令中的操作控制字段的16位采用混合表示法,其中用11位采用直接表示法,另外5位分为3位和2位的编码表示法,则此格式的微指令最多可表示多少个微指令?

    7.某计算机的控制器采用微程序控制方式,微指令中的操作控制字段的16位采用混合表示法,其中用11位采用直接表示法,另外5位分为3位和2位的编码表示法,则此格式的微指令最多可表示多少个微指令? 解: - ...

  2. admin密码对应的MD5值,16位和32位,admin解密自己留着方便.

    admin密码对应的MD5值,16位和32位,自己留着方便.admin的md5值是多少,常用密码加密md5值,123456,admin,admin888 如果遇到MD5加密文件(一般都是这个),而又不 ...

  3. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  4. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  5. node 16位 转24位_C代码实现16位和32位数据字节序转换

    点击上方公众号名称关注,获得更多内容 ✎ 编 者 悟 语 每天给自己一个存在的意识,这样才会有一颗认真的心. 文 章 导 读 今天给大家用C代码实现下大小端字节序的转换代码,感谢的小伙伴可以拿下来撸一 ...

  6. 16位转8位 winhex_64位系统究竟强在哪里?

    想必大家都遇到过这样的问题:安装某个软件的时候,出现提示选择32位版本还是64位版本?我们也可以查看自己的电脑是32位还是64位系统. Windows Linux 大家可能知道32位和64位和系统有关 ...

  7. 16位和32位微处理器(3)——Pentium的先进技术

    先进的体系结构 (1)内部总线(CPU内部的)32(64)位,外部数据总线(CPU与外设)64位 (2)片内代码Cache,数据Cache(缓冲,加快取指令和读写速度) (3)两条指令流水线并行(减小 ...

  8. 从16位到32位再到64位,为何16年过去,依然没有128位系统出现?

    绝大部分人都没有意识到128位的处理器早已经存在了,并且已经存在了几十年.这么多年过去了,不光是128位的处理器出现了,256位.512位的处理器也同样出现了,比如Nvidia GTX 280这样的显 ...

  9. C语⾔:8位、16位、32位数据转换

    C语⾔:8位.16位.32位数据转换 8位转16位 将2个8位数据u8_high.u8_low合成⼀个16位数据u16_data: u16_data=(u8_high<<8)| u8_lo ...

最新文章

  1. 祝贺!又一批清华大学长聘教授,来了!
  2. SAP PI - 同步 vs. 异步
  3. 自学python需要下载什么软件-一篇告诉你为什么人人都应该学点Python?
  4. 注意设置httpclient连接数
  5. 【S操作】冰箱正常运行监控系统需求整理
  6. Linux线程——线程同步
  7. RedHat Linux AS4 LAMP经典网站搭建实例
  8. nginx的负载均衡集群
  9. mininet 应用实践
  10. NOIP模拟 color(DP)
  11. [专栏精选]Unity中编码Encoding脱坑指南
  12. 创建git仓库和常用的命令
  13. 2017微信小程序全套源代码 最新 最全 好用
  14. Microsoft Dynamics AX 2012
  15. word中设置页码从任意页开始
  16. 计算机语音发展,计算机语音合成技术研究及发展方向
  17. [POI2012]HUR-Warehouse Store(贪心,堆)
  18. 在html中ex是什么单位,前端用到的那些单位
  19. 2021四川艺术高考成绩查询,2021四川高考艺术类分数线预测
  20. 程序员看片神器抱回家

热门文章

  1. 最新的linux学习路线图
  2. 微服务:Nacos将微服务注册到指定的命名空间下
  3. 全局莫兰指数_白话空间统计番外:再谈莫兰指数(Moran's I)
  4. 实训记录(五)——正式拍摄!
  5. 网络安全意识 | 震惊!密码保护竟然是个圈
  6. 用户注册界面基本设置
  7. 最强最全面的数仓建设规范指南
  8. 像在木雕中,一些吉祥化的元素
  9. Linux C 输入输出重定向
  10. GRN: Gated Relation Network to Enhance Convolutional Neural Network for Named Entity Recognition