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

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

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4801|回复: 6

怎样在一个时钟周期完成移位功能

[复制链接]
发表于 2004-5-3 20:55:50 | 显示全部楼层 |阅读模式

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

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

x
[这个贴子最后由vhdlcode在 2004/05/03 09:01pm 第 2 次编辑]

在一个时钟周期完成移位 N-BIT(N=0..31) 功能, 怎样用VHDL描述(能综合的, 不是行为描述)
发表于 2004-5-3 21:13:30 | 显示全部楼层

怎样在一个时钟周期完成移位功能

可能吗?只能倍频吧
 楼主| 发表于 2004-5-3 21:26:17 | 显示全部楼层

怎样在一个时钟周期完成移位功能

[这个贴子最后由vhdlcode在 2004/05/03 09:32pm 第 1 次编辑]

不能用倍频
CPU在执行移位指令时:  取指令, 译码, 执行, 输出.
其中执行只要一个时钟周期就可以了.
我想知道它是怎么实习的.
发表于 2004-5-3 23:40:36 | 显示全部楼层

怎样在一个时钟周期完成移位功能

抱歉,只会用Verilog,以循环左移为例:
case(N)  //N必须小于32
    0:   q[31:0] <= d[31:0];
    1:   q[31:0] <= {d[30:0], d[31]};
    2:   q[31:0] <= {d[29:0], d[31:30]};
    3:   q[31:0] <= {d[28:0], d[31:29]};
    ……
    31:  q[31:0] <= {d[0], d[31:1]};
endcase
如果是非循环的左移,更简单:
    q<= d << N;
都是可综合的,没有问题。
 楼主| 发表于 2004-5-4 21:20:58 | 显示全部楼层

怎样在一个时钟周期完成移位功能

q<= d << N;
在vhdl中有rla, rll 等命令,但只能做行为仿真, 不能综合.我写了一个与你的case 完全相似的实现.
case shift_num is
when  0=> bsu_result <= gr;
when  1=> bsu_result <= gr(word_width-2  downto 0) & tmp_v(0);
when  2=> bsu_result <= gr(word_width-3  downto 0) & tmp_v( 1 downto 0);
when  3=> bsu_result <= gr(word_width-4  downto 0) & tmp_v( 2 downto 0);
.......
我想知道有没有更好的办法.
发表于 2004-5-7 22:28:30 | 显示全部楼层

怎样在一个时钟周期完成移位功能

应该是利用桶行移位寄存器实现的!楼上兄弟们估计你们使用CASE语句描述的电路综合后是这样吗?
发表于 2004-5-7 22:58:49 | 显示全部楼层

怎样在一个时钟周期完成移位功能

楼上几位都很正确,就是barrel shifter来实现的,不过n越大,synthesis出来的电路会非常大。其实有点象32个32选1的mux的组合。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-4-19 18:57 , Processed in 0.022792 second(s), 10 queries , Gzip On, MemCached On.

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