我刚刚实现了一个旋转器,它使用8:1多路复用器将8位从0位旋转到7位。
现在,我需要实现一个输入为64位且移位量的旋转器。 我可以制作一个64:1的多路复用器,但是工作量太大而且不对。
我该如何解决这个问题? (最好是适用于8位和64位版本的参数化版本)
答案 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