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中要实现循环未知位怎么实现?
跪求援助!甚谢!
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是不定的,最后能实现吗?可综合吗?
