Jump to content

    

Параметризовать fixed-point константу в SV

Имеется модуль с примерно таким содержимым:

module real_test
#(parameter src_dw = 8, coeff_dw = 16)
(
   input       clk,
   input       reset,
   input       signed [src_dw - 1: 0] d_in,
   output      reg signed [src_dw + coeff_dw - 1: 0] d_out
);
localparam f2 = int' (0.123*(2**(coeff_dw - 2)));
//localparam f2 = int' (0.123*(2**14));
always @(posedge clk) begin
   if (reset) begin
       d_out = '0;
   end
   else begin
       d_out = d_in*f2;
   end
end
endmodule

Если константу f2 объявить, как в закомментированном куске, то модуль нормально синтезируется (квартус). Если же собирать в текущем виде (а константу хотелось бы менять для разных инстансов), то f2 квартус превращает в 0 и выбрасывает всю связанную логику. Как бы это победить?

 

победил:

localparam f2 = int' (0.123*(int'(2**(coeff_dw - 2))));

Share this post


Link to post
Share on other sites

Непонятно, как.

А если поменять местами 0.123 и (2**...?

Share this post


Link to post
Share on other sites

переписать в виде

localparam f2 = int' ((2**(coeff_dw - 2))*123/1000);

Share this post


Link to post
Share on other sites
переписать в виде

localparam f2 = int' ((2**(coeff_dw - 2))*123/1000);

тоже вариант, но в оригинале константы пострашнее, букав будет сильно много :)

тот, что я в итоге нашел, лаконичнее

Share this post


Link to post
Share on other sites

Вообще, вам к типу real надо привести оба множителя, почему int -то?

 

localparam f2 = int' (0.123*(real' (2**(coeff_dw - 2))));

Share this post


Link to post
Share on other sites
Вообще, вам к типу real надо привести оба множителя, почему int -то?

да, real логичнее. мне не понятно, почему он автоматически тип не привел (или привел, но получил в результате 0), параметр ведь тот же int по сути.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this