Посчитать отношение (пропорция) на Verilog
Имеется отрезок, предположительно, длиной 250 единиц (1). На нем расположена точка на метке 180. В реальности длина отрезка 224 единицы (2).
Значение искомой точки должно быть пропорционально 180, при длине отрезка 250, и равно в данном случае 161 на отрезке, длиной 224. По сути расчет сводится к пропорции: (224 * 180) / 250.
module WorkController(
// DATA IN
input wire [15:0] i_Input_1_SegmentLength, // 250 - длина отрезка 1
input wire [15:0] i_Input_2_SegmentLength, // 224 - длина отрезка 2
input wire [15:0] i_InputPointPosition, // 180 - положение точки на отрезке 1
// DATA OUT
output reg [15:0] o_OutputPointPosition); // ? - результат расчета - положение точки на отрезке 2
//o_OutputPointPosition должен быть равен 161;
endmodule
Если я пишу в лоб вот так: assign o_OutputPointPosition = (i_Input_2_SegmentLength * i_InputPointPosition) / i_Input_1_SegmentLength;, то это занимает от 300-500 LE, что не допустимо для простенького камня EPM240 на 240LE, на котором хотелось бы это реализовать. Можно пожертвовать точностью. Может быть существуют побитовые хитрости для подобных задач или расчет в несколько шагов?
Как средствами Verilog оптимально рассчитать положение точки на отрезке (2) с некоторым минимально возможным округлением? Как получить значение 161? Желательно с примером кода.
