正确理解Verilog不同位宽数据之间的赋值


type1.JPG





type2.JPG






type4.JPG





type3.JPG




type5.JPG





type6.JPG






type7.JPG






type8.JPG



结论:

高位宽数据赋值给低位宽数据时,只需截取低位宽所需的几位。
低位宽数据赋值给高位宽数据时,将根据低位宽数据类型(有符号还是无符号)进行符号位扩展。
我也来说两句 查看全部回复

最新回复

  • yuelengyueming (2008-11-07 10:44:35)

    VHDL是比较严格的,赋值的左值与右值必须具有相同的位宽以及数据类型。所以在VHDL中不同位宽之间的赋值会导致编译错误。
  • scsunjia (2008-11-07 12:29:55)

    感觉Verilog要方便一点,不过初学的时候,更容易犯错误。
  • zhide1983 (2008-11-07 12:35:06)

    你应该自己保证赋值完全和你的需要吻合
    包括所谓的截取,符号扩展等
    最好的做法是保证赋值两端位宽相等,怎么扩展直接根据自己需要
    而不是交给仿真或综合工具
    万一不同仿真器对这些语句解析不一样,导致的结果会很严重的

    良好的代码风格本来就不存在这方面的混淆
  • yuelengyueming (2008-11-07 12:49:46)

    这里并不牵涉仿真和综合工具,这本身就是Verilog的语法规定。好的代码风格不是呆板的,灵活运用这些语法规定对写出好的代码是很有帮助的。当然在赋值时尽量做到两边位宽相等。但是,举一个例子,如果把18-bit数据赋值给36-bit数据,在VHDL中先要对18-bit数据做符号位扩展或者高位补零到36-bit,但在Verilog中就可以直接赋过去,只要你懂这些语法的真正含义是否符号你所期望的结果,会使你的代码变得简洁。再强调一点:这里的赋值和你用什么仿真工具、综合工具没有任何关系。
  • cava (2008-11-07 13:30:44)

    个人感觉verilog要好用一些                  
  • radar (2008-11-07 13:38:14)

    不错,******………………
  • zhide1983 (2008-11-07 16:12:47)

    是否和仿真器相关,我确实没有去细究
    但是我绝对认为下面的这种代码风格比靠signed关键字完成的符号扩展要好
    wire [3:0] a;
    wire [4:0] b;
    assign b = {a[3],a[3:0]};
    而且至今为止我看过的各个公司的代码规范
    各种lint工具,如NOVAS的nLint,SYNOPSYS的LEDA等,都认为不同位宽赋值是不好的规范
    报warning或者error
  • yuelengyueming (2008-11-07 16:19:41)

    你说得对,你写的确实是好的代码规范,但是多一点认识不是更好吗?灵活运用。看到别人的代码这么写知道怎么回事,不就是一种学习的过程吗?
  • blizzardyjc (2008-11-08 01:46:25)

    用的时候最好还是自己写清楚的比较好。。。不容易出错~
  • songchao01 (2008-11-08 13:31:03)

    我有个疑问,在片子里头跑的时候,用低位宽的信号对高位宽赋值也是 空出来的高位补零么??
    比较直观的一个印象应该是高位维持赋值前的原值不变呀...
  • 24272809 (2008-11-10 10:00:10)

    顶一个,明白了很多!
  • dio65759465 (2008-11-10 13:38:05)

    恩 这么说吧  作为语言,HDL怎么玩都可以 只要符合语法,你用它作出软件来也是你本事
    但是作为真正用于电路开发,要实际用的东西 这些做法是很不好的  
    因为在开发里面必须保证每个部分都是明确的可控的,加一个位数不定的赋值会影响这一点 而且也对同组的人理解你的代码造成困难

    另外 楼主确实肯下功夫哈 多了解些东西确实有帮助
  • yuelengyueming (2008-11-10 16:29:14)

    说明一下,这个并不是好的代码规范,只是为了说明这是Verilog的一个语法,多了解一些东西总归还是有好处的。
  • caesar000 (2008-11-10 16:35:16)

    呵呵,其实这些在verilog语法里面已经有规定的,当然用波形自己体验也是一种不错的学习方式。
    但是利用工具默认扩展一直是各种代码规法所不允许的,工具也会给出很多warning,看死你。
  • amin2008 (2008-11-10 23:15:30)

    长见识
  • pengfeng (2008-12-19 22:43:35)

    不错呀