微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog循环移位的问题

verilog循环移位的问题

时间:10-02 整理:3721RD 点击:
各位高手,帮忙解决下问题!
reg [6:0]    j;
reg [31:0]  Tj;
always @ (*)
  begin
   if (0<=j<=31)
     SS1_t0 <= {Tj[31-j:0],Tj[31:j-32]};                    //   0<=  j <= 31
    else
     SS1_t0 <= {Tj[63-j:0],Tj[31:j-64]};                    //  32<= j <= 63
  end
我想这样对Tj循环左移 j 位,但是不行!综合不了,请问verilog中要实现循环未知位怎么实现?
跪求援助!甚谢!

SS1_t0 <= {Tj[31-j:0],Tj[31:j-32]};                    //   0<=  j <= 31
j<=32时,j-32为负数?
不太明白你具体的左移操作是怎么样进行的。
在FPGA的可综合设计里面,移位个数不能是变量。但有其他方式可以实现:
循环j次,
每次左移一位,(根据具体要求选择是算数左移还是逻辑左移)

循环未知位,其实做一个N选1的多路选择器就能实现。

~写C代码写多了吧?

最好不要用循环的写法,写法貌似也有点问题。

我的表达是有问题!现在已经解决,如果32位的X循环左移j位的话,可以这样表达:(X <<j) + (X>>(31-j)),应该是对的!谢谢大家关注!

我想问问你那个循环移位的事情,你后来实现的是可变移位吗?你的j是不定的,最后能实现吗?可综合吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top