Me gustaría crear un módulo que pueda cambiar el valor de un registro que se le pasa (+/- 1) usando un puerto de entrada. Escribí esto:
module tune(
input clk,
input read,
input [15:0] x,
inout [15:0] y,
input plus,
input minus
);
reg [15:0] a;
reg [15:0] b;
assign y = read ? a:'bz;
always@(posedge clk) begin
b<=y;
a<=x;
if (plus) b<=b+1;
end
endmodule
Cuando leer es ALTO, espero que y se inicialice con el valor de x . Cuando leer es BAJO, espero generar el valor de b (que puede disminuir o aumentar usando menos o más ). Sin embargo, actualmente plus no hace nada y lee alterna y entre 0xFFFF y 2 (cuando paso 2'd42 a x).
Admito que no tengo un buen conocimiento de las asignaciones de no bloqueo. ¿Qué debo cambiar para que mi código funcione, o hay una mejor manera de implementar el comportamiento deseado?