[Verilog HDL] 关于wire使用的一些小知识

[复制链接]
8476|0
 楼主| gaochy1126 发表于 2023-3-18 12:59 | 显示全部楼层 |阅读模式
1.Verilog中如果wire连接到常量,而常量没有说明他的位宽,那么将会默认为32位
如:
  1. input [3:0] x ;
  2. wire [3:0] a;
  3. assign a = 3 + x;
 上述代码在综合的时候,会将a扩展成32位进行操作,而事先声明常量位宽将不会出现,如下:
  1. 1 input [3:0] x ;
  2. 2 wire [3:0] a;
  3. 3 assign a = 4d’3 + x;
  这一点看起来没什么大不了的,但是有时候却会出现我们想的不一样的结果,请看下面的代码:
  1. 1 input   [63 : 0] x;
  2. 2 output [63 : 0] y;
  3. 3 assign y = x + ('d122<<32);
本来想把低32位加到高32位,然而由于没有说明常量的位宽,系统综合默认常量为32位,当移位后其实为32'd0,因此上面的代码实际还是那个相当于实现  y = x + 32'd0 ,如果要得到正常的结果需要说明位宽,如下:
  1. 1 input   [63 : 0] x;
  2. 2 output [63 : 0] y;
  3. 3 assign y = x + (64'd122<<32);
 考虑到为了避免这样的情况出现,我们尽量不要省略常量的位宽。
2.在QuartusII默认的是线型
  Quartus II中有些线可以不声明就使用,系统综合会默认添加相应的wire型,如下:
  1. //已有模块
  2. module A
  3. (
  4.    input a,
  5.    output b;
  6. );
  7. ............
  8. endmodule

  9. module B(
  10.   input    a,
  11.   output  y,
  12. );
  13. ............
  14. endmodule

  15. module C(

  16. );

  17. A A1(
  18. .a(net1)
  19. .b(netout)
  20. );

  21. B B1(
  22. .a(net1),
  23. .y(netout1)
  24. );
  25. endmodule
上面的框架综合后自动生成没有声明的wire的线。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1205

主题

11937

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部