明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 7185|回复: 0

【FPGA至简设计原理与应用】第一篇第三章硬件描述语言Verilog第5节算术运算符信号位宽

[复制链接]
发表于 2020-9-7 18:51:46 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本案例的编号为:001500000136,如果有疑问,请按编号在下面贴子查找答案:MDY案例交流【汇总贴】_FPGA-明德扬科教 (mdy-edu.com)
本文为明德扬原创及录用文章,转载请注明出处

大家好,近期我们会连载《FPGA至简设计原理与应用》一书,有兴趣的同学可以学习,也希望大家可以对我们的书提出宝贵的意见和建议。


FPGA至简设计原理与应用》书籍连载索引目录

http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=989


读过的朋友可积极在贴后留言,书籍正式出版时,我们会从留言者中挑选20位幸运读者,幸运读者可获潘老师亲笔签名书籍一本。

注:手机浏览可能格式会乱,建议用电脑端进行浏览。




5.3.5经验总结


  • 位宽问题

本文档编号:001100000061
需要看对应的视频,请点击视频编号:001100000059
1. 本节主要进行组合逻辑的介绍,包括:程序语句(assign语句、always语句),数字进制(二进制、不定态、高阻态),算数运算符(加、减、乘、除运算符),逻辑运算符(逻辑与、或、非运算符),按位逻辑运算符(单目按位与、或、非运算符,双目按位与、或、异或运算符),关系运算符,移位运算符(左移、右移运算符),条件运算符(三目运算符、if语句、case语句、选择语句等),拼接运算符;
2. ALTERA和VIVADO文档


在写代码时,需要注意信号的位宽,最终的结果取决于“=”号左边信号的位宽,保存低位,丢弃高位。例如:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
wire c;
  
wire[1:0] d;
  
wire[2:0]  e;
  
wire[2:0]  f;
  
assign c = 1’b1  + 1’b1;
  
assign d = 1’b1  + 1’b1;
  
assign e = 1’b1  + 1’b1;
  
assign f = 1  + 1;

信号c的位宽为1位,所以运算的结果最终保留最低1位,因此c的值为1’b0。由于d的位宽有2位,所以运算的结果可以保留低2位,因此d的值为2’b10。由于e的位宽有3位,所以运算的结果可以保留低3位,因此e的值为3’b010。“1”默认是32位,1+1的结果也是32位,但由于f的位宽只有3位,所以运算的结果可以保留低3位,因此f的值为3’b010

减法运算也是相同的道理,以如下代码为例:

1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
wire c;
  
wire[1:0] d;
  
wire[2:0]  e;
  
wire[3:0]  f;
  
assign c = 0  -1 ;
  
assign d = 0  - 1 ;
  
assign e = 0  -1 ;
  
assign f  =  0 - 1;

0-1”得到的二进制值是“1111111111….”,但保存结果取决于“=”号左边信号的位宽。c的位宽是1,保留最低1位,所以c的值为1’b1。由于d的位宽有2位,结果保留低2位,所以d的值为2’b11。由于e的位宽有3位,结果保留低3位,所以e的值为3’b111f的位宽有4位,所以运算的结果可以保留低4位,所以f的值为4’b1111

在写乘法代码时,同样需要注意信号的位宽,最终的结果取决于“*”号左边信号的位宽,保存低位,丢弃高位:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
wire c;
  
wire[1:0] d;
  
wire[2:0]  e;
  
wire[3:0]  f;
  
wire[4:0]  h;
  
assign c = 2’b11  * 3’b101 ;
  
assign d = 2’b11  * 3’b101 ;
  
assign e = 2’b11  * 3’b101 ;
  
assign f  =  2’b11 * 3’b101;

2’b11 * 3’b101”得到的二进制值是“4’b1111”,但保存结果取决于“*”号左边信号的位宽。c的位宽是1,保留最低1位,所以c的值为1’b1。由于d的位宽有2位,结果保留低2位,所以d的值为2’b11。由于e的位宽有3位,结果保留低3位,所以e的值为3’b111f的位宽有4位,所以运算的结果可以保留低4位,所以f的值为4’b1111。需要注意的是h,该信号有5位,4’b1111赋给5位信号,结果是高位补0,所以其结果为5’b01111



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-23 00:25 , Processed in 0.051349 second(s), 20 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表