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

System verilog 如何实现参数化桶形移位器(旋转器)?,system-verilog,System Verilog,我刚刚实现了一个旋转器,它使用8:1 muxes将8位从0旋转到7位 现在,我需要实现一个旋转器,它有64位的输入和移位量。 我可以制作一个64:1位的多路复用器,但这太麻烦了,不可能是正确的 我如何解决这个问题?(最好是同时适用于8位和64位版本的参数化版本)旋转器可以如下所示: parameter W = 64; logic [W-1:0] data_in; logic [W-1:0] data_out; logic [$clog2(W)-1:0] shift; always_comb

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

现在,我需要实现一个旋转器,它有64位的输入和移位量。 我可以制作一个64:1位的多路复用器,但这太麻烦了,不可能是正确的


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

旋转器可以如下所示:

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
如果需要消除围绕分配宽度不匹配的问题,可以添加以下操作:

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

在我看来,你的思维水平太低了。你正在尝试做结构设计,当你可以做功能设计的时候,让你的合成工具来完成繁重的工作。如果你把你迄今为止尝试过的东西包括进去,那就太好了。