如何进行部分逆向赋值?

如下定义:
reg Data [7:0];
reg Temp [15:0];
always@...

Data  [7:0]  <=  Temp[8:15];
...

本意是将Temp高8位逆向赋给Data,但编译出错.
Error (10198): Verilog HDL error at TxFCS.v(159): part-select direction is opposite from prefix index direction

那么请问如何进行部分逆向赋值?
我也来说两句 查看全部回复

最新回复

  • alenww (2008-7-29 18:08:42)

    Temp[8:15] 改为Temp[15:8] 就行了
  • slowlykiss (2008-7-29 18:27:04)

    QUOTE:

    原帖由 alenww 于 2008-7-29 18:08 发表
    Temp[8:15] 改为Temp[15:8] 就行了
    如果这样的话就达不到要逆向赋值的要求了.即:temp的第15位赋给Data的第0位,temp的第8位赋给Data的第7位,
  • 店小二 (2008-7-29 18:37:32)

    那就老老实实一位一位给,如果量不大的话 呵呵
    Data  [7]  <=  Temp[8];
    Data  [6]  <=  Temp[9];
    。。。。。
  • slowlykiss (2008-7-29 18:42:50)

    QUOTE:

    原帖由 店小二 于 2008-7-29 18:37 发表
    那就老老实实一位一位给,如果量不大的话 呵呵
    Data  [7]   
    ,早知道我就该说明一下:不要告诉我要一位一位赋值啊...
    不过还是谢谢.
    不知道为什么verilog不让这样赋值.
  • 店小二 (2008-7-29 18:53:37)

    应该可以吧 ,貌似你定义有问题
    reg Data [7:0];
    reg Temp [15:0];
    是不是你想写
    reg [7:0]  Data ;
    reg [15:0] Temp ;
    ?
  • slowlykiss (2008-7-29 18:56:05)

    哦,是我发帖时把代码写错了,应该是
    reg [7:0]  Data ;
    reg [15:0] Temp ;
    就是这样编译不通过的.
    谢谢

    但是改成一位一位赋值是可以编译通过的.

    [ 本帖最后由 slowlykiss 于 2008-7-29 18:57 编辑 ]
  • 店小二 (2008-7-29 18:58:04)

    reg [15:0] Temp ;
    你把这个改为reg [0:15] Temp 试试
    这样的话0为最高位15为最低位
  • slowlykiss (2008-7-29 19:03:04)

    QUOTE:

    原帖由 店小二 于 2008-7-29 18:58 发表
    reg [15:0] Temp ;
    你把这个改为reg [0:15] Temp 试试
    这样的话0为最高位15为最低位
    如果这样 Data  [7:0]  <=  Temp[8:15];就不是逆向赋值了.
    如果再改成 Data  [7:0]  <=  Temp[15:8];显然编译时又会报相同的错误.
  • 店小二 (2008-7-29 21:06:36)

    也是,那我也就不知道啦 希望谁知道了说一声 呵呵
  • vfdff (2008-7-30 00:28:38)

    只能一位位赋值的,不能偷懒的
  • ericwang622 (2008-7-30 17:54:01)

    想偷懒,用for循环
    integer i;
    ...
    always @(...)
    ...
    for(i=0; i<=7; i=i+1)
      Data[ i] <= Temp[15-i];

    [ 本帖最后由 ericwang622 于 2008-7-30 18:06 编辑 ]
  • ykai007 (2008-7-30 17:57:57)

    直接[15:8]就ok啦
  • clwyl (2008-7-30 18:42:05)

    呵呵。。 我用VCS试了一下也不行,看来只有一个一个的赋值了。如果这样的情况多的话就写个function.
  • jisphel (2008-7-31 13:15:04)

    QUOTE:

    原帖由 ericwang622 于 2008-7-30 17:54 发表
    想偷懒,用for循环
    integer i;
    ...
    always @(...)
    ...
    for(i=0; i
    俺也是这么干的。
  • wdjlhwzy (2008-7-31 13:37:25)

    可以这样吧,
    Data  [7:0]  <=  {Temp[8],......,Temp[15]};
  • windzjy (2008-7-31 13:43:21)

    QUOTE:

    原帖由 wdjlhwzy 于 2008-7-31 13:37 发表
    可以这样吧,
    Data  [7:0]  <=  {Temp[8],......,Temp[15]};
    这样应该还是比较简便的
  • lostedworld (2008-7-31 15:16:34)

    用12楼的办法
  • vfdff (2008-7-31 19:12:45)

    这样 不就是 以位位赋值吗 ?
  • moonmcm (2008-7-31 22:58:02)

    一位位赋值