在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 12396|回复: 7

[求助] verilog循环移位的问题

[复制链接]
发表于 2012-4-28 16:47:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位高手,帮忙解决下问题!

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中要实现循环未知位怎么实现???

跪求援助!甚谢!!!!
发表于 2012-4-28 17:42:55 | 显示全部楼层
SS1_t0 <= {Tj[31-j:0],Tj[31:j-32]};                    //   0<=  j <= 31

j<=32时,j-32为负数?

不太明白你具体的左移操作是怎么样进行的。

在FPGA的可综合设计里面,移位个数不能是变量。但有其他方式可以实现:

循环j次,
每次左移一位,(根据具体要求选择是算数左移还是逻辑左移)
发表于 2012-4-28 18:19:29 | 显示全部楼层
循环未知位,其实做一个N选1的多路选择器就能实现。
发表于 2012-4-29 00:59:03 | 显示全部楼层
~写C代码写多了吧?
发表于 2012-4-29 14:39:12 | 显示全部楼层
最好不要用循环的写法,写法貌似也有点问题。
 楼主| 发表于 2012-5-8 10:46:21 | 显示全部楼层
我的表达是有问题!现在已经解决,如果32位的X循环左移j位的话,可以这样表达:(X <<j) + (X>>(31-j)),应该是对的!谢谢大家关注!!!!
发表于 2013-1-15 16:23:12 | 显示全部楼层
我想问问你那个循环移位的事情,你后来实现的是可变移位吗?你的j是不定的,最后能实现吗?可综合吗?
发表于 2019-12-30 16:10:21 | 显示全部楼层
楼主那么写,肯定可以实现啊。区别在于:如果i是常数时,没有额外逻辑,综合是就是走线。如果i是个变量时,有额外的mux,mux大小由i的位数确定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-7 05:10 , Processed in 0.027101 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表