Tengo que restringir un FPGA de Lattice Semiconductor y tengo algunas dudas sobre la restricción de múltiples ciclos descrita aquí . Tengo el siguiente RTL:
Básicamente,esuncontadorqueseactivamedianteundetectordeflancoascendente.Cadavezqueunaseñalaumentade0a1,segeneraunimpulsoyelcontadoraumenta.EsteestambiénelcódigoVHDL,paraquequedeclaro:
typeCOM_PACKETS_COUNTERisarray(7downto0)ofstd_logic_vector(31downto0);signalcapture_com_tx_packet_counter:COM_PACKETS_COUNTER;signalcapture_com_rx_packet_counter:COM_PACKETS_COUNTER;signalcapture_com_tx_data_reg:std_logic_vector(7downto0);signalcapture_com_rx_data_reg:std_logic_vector(7downto0);signalcapture_com_tx_start_byte_reg:std_logic_vector(7downto0);signalcapture_com_rx_start_byte_reg:std_logic_vector(7downto0);signalcapture_com_tx_start_byte_reg_delay:std_logic_vector(7downto0);signalcapture_com_rx_start_byte_reg_delay:std_logic_vector(7downto0);signalcapture_com_tx_start_byte_reg_edge:std_logic_vector(7downto0);signalcapture_com_rx_start_byte_reg_edge:std_logic_vector(7downto0);..........................COM_COUNTER_PROCESS:foriin0tocapture_com_tx_data_reg'length-1generateprocess(clk_i,rst_i)beginifrst_i='1'thencapture_com_rx_start_byte_reg_delay(i)<='0';capture_com_rx_start_byte_reg_edge(i)<='0';capture_com_tx_start_byte_reg_delay(i)<='0';capture_com_tx_start_byte_reg_edge(i)<='0';elsifclk_i='1'andclk_i'eventthencapture_com_rx_start_byte_reg_delay(i)<=capture_com_rx_start_byte_reg(i);capture_com_rx_start_byte_reg_edge(i)<=not(capture_com_rx_start_byte_reg_delay(i))andcapture_com_rx_start_byte_reg(i)andCAPTURE_COM_RX_SELECTED_FILTER(i);capture_com_tx_start_byte_reg_delay(i)<=capture_com_tx_start_byte_reg(i);capture_com_tx_start_byte_reg_edge(i)<=not(capture_com_tx_start_byte_reg_delay(i))andcapture_com_tx_start_byte_reg(i)andCAPTURE_COM_TX_SELECTED_FILTER(i);endif;endprocess;process(clk_i,rst_i)beginifrst_i='0'thencapture_com_tx_packet_counter(i)<=(others=>'0');elsifclk_i'eventandclk_i='1'thenifcapture_com_tx_start_byte_reg_edge(i)='1'thencapture_com_tx_packet_counter(i)<=capture_com_tx_packet_counter(i)+1;endif;ifcapture_com_rx_start_byte_reg_edge(i)='1'thencapture_com_rx_packet_counter(i)<=capture_com_rx_packet_counter(i)+1;endif;endif;endprocess;endgenerate;
Tengovariosmostradoresenmidiseño.Ahoraquierorelajareltiempo,asíquemepreguntosipuedousaruna"restricción de multiciclos" entre el registro de origen (capture_com_rx_start_byte_reg_edge) y el registro de destino (capture_com_rx_packet_counter) porque no necesito que el contador se actualice después de la subida de capture_com_tx_start_byte_reg.
Mi única preocupación es que el impulso generado podría durar más que un ciclo de reloj, lo que podría ser un problema porque el contador podría incrementarse más de 1 unidad.