微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 怎样在一个时钟周期完成移位功能

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

时间:10-02 整理:3721RD 点击:
[这个贴子最后由vhdlcode在 2004/05/03 09:01pm 第 2 次编辑]
在一个时钟周期完成移位 N-BIT(N=0..31) 功能, 怎样用VHDL描述(能综合的, 不是行为描述)

怎样在一个时钟周期完成移位功能
可能吗?只能倍频吧

怎样在一个时钟周期完成移位功能
[这个贴子最后由vhdlcode在 2004/05/03 09:32pm 第 1 次编辑]
不能用倍频
CPU在执行移位指令时:取指令, 译码, 执行, 输出.
其中执行只要一个时钟周期就可以了.
我想知道它是怎么实习的.

怎样在一个时钟周期完成移位功能
抱歉,只会用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;
都是可综合的,没有问题。

怎样在一个时钟周期完成移位功能
q<= d << N;
在vhdl中有rla, rll 等命令,但只能做行为仿真, 不能综合.我写了一个与你的case 完全相似的实现.
case shift_num is
when0=> bsu_result <= gr;
when1=> bsu_result <= gr(word_width-2downto 0) & tmp_v(0);
when2=> bsu_result <= gr(word_width-3downto 0) & tmp_v( 1 downto 0);
when3=> bsu_result <= gr(word_width-4downto 0) & tmp_v( 2 downto 0);
.......
我想知道有没有更好的办法.

怎样在一个时钟周期完成移位功能
应该是利用桶行移位寄存器实现的!楼上兄弟们估计你们使用CASE语句描述的电路综合后是这样吗?

怎样在一个时钟周期完成移位功能
楼上几位都很正确,就是barrel shifter来实现的,不过n越大,synthesis出来的电路会非常大。其实有点象32个32选1的mux的组合。

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

网站地图

Top