如何实现参数化桶形移位器(旋转器)?

时间:2014-11-29 23:10:54

标签: system-verilog

我刚刚实现了一个旋转器,它使用8:1多路复用器将8位从0位旋转到7位。

现在,我需要实现一个输入为64位且移位量的旋转器。 我可以制作一个64:1的多路复用器,但是工作量太大而且不对。

我该如何解决这个问题? (最好是适用于8位和64位版本的参数化版本)

1 个答案:

答案 0 :(得分:3)

旋转器可以像这样直接:

parameter W = 64;
logic [W-1:0] data_in;
logic [W-1:0] data_out;

logic [$clog2(W)-1:0] shift;

always_comb begin
  data_out = {data_in, data_in} >> shift;
end

如果您需要删除周围任务宽度不匹配的问题,可以添加do:

logic [W-1:0] temp;
always_comb begin
  {temp, data_out} = {data_in, data_in} >> shift;
end