Quero acessar uma fatia com um valor dinâmico. Eu tentei fazer isso de maneiras diferentes. No primeiro caso reduzindo a lógica do módulo para controle do valor do índice etc, o verilator me disse que não é um valor constante e eu concordo com isso e depois mudei para a segunda versão mas obtive o mesmo resultado.
1:
module m1 (
input logic [4:0] in1, // 8-bit input vector 1
input logic [4:0] in2, // 8-bit index
output logic [4:0] out // 8-bit output vector
);
logic add;
always_comb begin
add = (in2[in1[4:0]-1] & (in2[(in1[4:0]-2):0] != '0); //summary rounding
end
out = in1 + add;//summary of the final operation
endmodule
2:
module m1 (
input logic [4:0] in1, // 8-bit input vector 1
input logic [4:0] in2, // 8-bit index
output logic [4:0] out // 8-bit output vector
);
logic add;
always_comb begin
for (int i = 0; i < 4; i++) begin
if((in1[4:0]-2) == i)begin
add = (in2[in1[4:0]-1] & (in2[(i:0] != '0); //summary rounding
end
end
out = in1 + add;//summary of the final operation
endmodule
A lógica que estou tentando implementar é o modo de arredondamento do riscv-v 1.0.
Já tentei vários testes tentando fazer lógica estática mas não consigo encontrar uma maneira de resolver o problema. Como posso implementar essa lógica em hardware.