У меня есть условная 2-битная переменная. Исходя из ее значения, текущее значение увеличивается или уменьшается.Под этим я подразумеваю:
module verilog_block(clk, cond, incr, curr_val)
input clk;
input [1:0] cond;
input [5:0] incr;
output reg [5:0] curr_val;
always @ posedge(clk)
begin
curr_val <= curr_val + (!cond[1] - cond[1]) * incr * cond[0];
end
endmodule
Извините, если я допустил какие-либо ошибки, я не проверял этот конкретный код, так как я просто пытаюсь проиллюстрировать свой вопрос.Если cond[0]==0
, я не хочу менять curr_val
(независимо от cond[1]
).Если cond[1]==1
, я хочу, чтобы curr_val
уменьшилось на incr
, а если cond[1]==0
, я хочу, чтобы curr_val
увеличилось на incr
.
Я думаю, что это работает теоретически, но мойцель состоит в том, чтобы расширить это в намного больший код.Поэтому его нужно оптимизировать.Я знаю, что оператор *
может быть медленным и требовать большого количества ресурсов, но я не уверен, относится ли это к случаю умножения только с одним битом.
Если вы можете найти способ оптимизировать этот код для области, пожалуйста, дайте мне знать.Большое спасибо.