Quiero implementar el siguiente circuito contador de programas de 32 bits:
yesteesmicódigoverilogactual:
moduleprogram_counter(d,inc,ld,clr,clk,Q);input[31:0]d;inputinc,ld,clr,clk;outputreg[31:0]Q;reg[31:0]q_inter;always@(posedgeclk)beginif(clr)q_inter=32'b0;elseif(ld)begincase(inc)1'b0:q_inter=d;1'b1:q_inter=q_inter+4;endcaseendQ=q_inter;endendmodule
Cambiélasasignacionesalasasignacionesdebloqueoporquequeríaesperaraqueelq_interrecibieralaseñalactualizadaantesdeasignarlaaQ,yaquemedicuentadequesinoestabanbloqueando,daríacomoresultadounarespuestaretardadaenlasimulación.
Inicialmenteestabaintentandohacerlomismocambiandoelpuertoqaunpuertodeentradayhaciendoalgocomoesto:
moduleprogram_counter(d,inc,ld,clr,clk,Q);input[31:0]d;inputinc,ld,clr,clk;inoutreg[31:0]Q;always@(posedgeclk)beginif(clr)Q=32'b0;elseif(ld)begincase(inc)1'b0:Q=d;1'b1:Q=Q+4;endcaseendendendmodule
peromedaelsiguienteerror:"El puerto Q no de red no puede estar en modo inout"
Mis preguntas:
1) ¿Alguien puede explicar por qué hacer una Q inout me da este error?
2) ¿Cambiar las asignaciones de bloqueo a no bloqueo resultará en menores restricciones de tiempo? en otras palabras, ¿se traducirá en un circuito menos demorado?