Fix Bug in TEMPLATE_ros_action_client where sequence_id & request_id output signals are only valid for one clock cycle.
This commit is contained in:
parent
c577d4f671
commit
839170c5ad
@ -222,8 +222,8 @@ architecture arch of TEMPLATE_ros_action_client is
|
||||
signal cnt, cnt_next : natural range 0 to 5;
|
||||
signal g_start_user, r_start_user, c_start_user, g_ack_user, r_ack_user, c_ack_user, g_taken_user, r_taken_user, c_taken_user, g_done_user, r_done_user, c_done_user : std_logic;
|
||||
signal g_opcode_user, r_opcode_user, c_opcode_user : ROS_SERVICE_OPCODE_TYPE;
|
||||
signal g_service_info_user, r_service_info_user, c_service_info_user : SERVICE_INFO_TYPE;
|
||||
signal g_sequence_id_user, r_sequence_id_user, c_sequence_id_user : std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0);
|
||||
signal g_service_info_user, r_service_info_user, c_service_info_user, service_info_sig, service_info_sig_next : SERVICE_INFO_TYPE;
|
||||
signal g_sequence_id_user, r_sequence_id_user, c_sequence_id_user, sequence_id_sig, sequence_id_sig_next : std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0);
|
||||
signal g_return_code_user, r_return_code_user, c_return_code_user : std_logic_vector(ROS_RETCODE_WIDTH-1 downto 0);
|
||||
|
||||
signal f_start_user, f_ack_user, f_done_user, f_taken_user : std_logic;
|
||||
@ -489,6 +489,8 @@ begin
|
||||
-- ###GENERATED END###
|
||||
end generate;
|
||||
|
||||
sequence_id <= sequence_id_sig;
|
||||
service_info <= service_info_sig;
|
||||
|
||||
main_prc : process(all)
|
||||
begin
|
||||
@ -496,6 +498,8 @@ begin
|
||||
stage_next <= stage;
|
||||
cnt_next <= cnt;
|
||||
return_code_latch_next <= return_code_latch;
|
||||
sequence_id_sig_next <= sequence_id_sig;
|
||||
service_info_sig_next <= service_info_sig;
|
||||
-- DEFAULT Unregistered
|
||||
f_start_user <= '0';
|
||||
f_opcode_user <= NOP;
|
||||
@ -505,8 +509,6 @@ begin
|
||||
g_opcode_user <= NOP;
|
||||
c_start_user <= '0';
|
||||
c_opcode_user <= NOP;
|
||||
sequence_id <= (others => '0');
|
||||
service_info <= EMPTY_SERVICE_INFO;
|
||||
ack <= '0';
|
||||
done <= '0';
|
||||
return_code <= ROS_RET_OK;
|
||||
@ -560,7 +562,7 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
sequence_id <= g_sequence_id_user;
|
||||
sequence_id_sig_next <= g_sequence_id_user;
|
||||
done <= g_done_user;
|
||||
return_code <= g_return_code_user;
|
||||
|
||||
@ -583,12 +585,12 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
service_info <= g_service_info_user;
|
||||
return_code <= g_return_code_user;
|
||||
service_info_sig_next <= g_service_info_user;
|
||||
|
||||
if (g_done_user = '1') then
|
||||
if (g_taken_user = '1') then
|
||||
done <= g_done_user;
|
||||
return_code <= g_return_code_user;
|
||||
stage_next <= IDLE;
|
||||
else
|
||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||
@ -610,7 +612,7 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
sequence_id <= r_sequence_id_user;
|
||||
sequence_id_sig_next <= r_sequence_id_user;
|
||||
done <= r_done_user;
|
||||
return_code <= r_return_code_user;
|
||||
|
||||
@ -633,12 +635,12 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
service_info <= r_service_info_user;
|
||||
return_code <= r_return_code_user;
|
||||
service_info_sig_next <= r_service_info_user;
|
||||
|
||||
if (r_done_user = '1') then
|
||||
if (r_taken_user = '1') then
|
||||
done <= r_done_user;
|
||||
return_code <= r_return_code_user;
|
||||
stage_next <= IDLE;
|
||||
else
|
||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||
@ -660,7 +662,7 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
sequence_id <= c_sequence_id_user;
|
||||
sequence_id_sig_next <= c_sequence_id_user;
|
||||
done <= c_done_user;
|
||||
return_code <= c_return_code_user;
|
||||
|
||||
@ -683,12 +685,12 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
service_info <= c_service_info_user;
|
||||
return_code <= c_return_code_user;
|
||||
service_info_sig_next <= c_service_info_user;
|
||||
|
||||
if (c_done_user = '1') then
|
||||
if (c_taken_user = '1') then
|
||||
done <= c_done_user;
|
||||
return_code <= c_return_code_user;
|
||||
stage_next <= IDLE;
|
||||
else
|
||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||
@ -740,10 +742,14 @@ begin
|
||||
stage <= IDLE;
|
||||
cnt <= 0;
|
||||
return_code_latch <= ROS_RET_OK;
|
||||
sequence_id_sig <= (others => '0');
|
||||
service_info_sig <= EMPTY_SERVICE_INFO;
|
||||
else
|
||||
stage <= stage_next;
|
||||
cnt <= cnt_next;
|
||||
return_code_latch <= return_code_latch_next;
|
||||
sequence_id_sig <= sequence_id_sig_next;
|
||||
service_info_sig <= service_info_sig_next;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
@ -235,8 +235,8 @@ architecture arch of Fibonacci_ros_action_client is
|
||||
signal cnt, cnt_next : natural range 0 to 5;
|
||||
signal g_start_user, r_start_user, c_start_user, g_ack_user, r_ack_user, c_ack_user, g_taken_user, r_taken_user, c_taken_user, g_done_user, r_done_user, c_done_user : std_logic;
|
||||
signal g_opcode_user, r_opcode_user, c_opcode_user : ROS_SERVICE_OPCODE_TYPE;
|
||||
signal g_service_info_user, r_service_info_user, c_service_info_user : SERVICE_INFO_TYPE;
|
||||
signal g_sequence_id_user, r_sequence_id_user, c_sequence_id_user : std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0);
|
||||
signal g_service_info_user, r_service_info_user, c_service_info_user, service_info_sig, service_info_sig_next : SERVICE_INFO_TYPE;
|
||||
signal g_sequence_id_user, r_sequence_id_user, c_sequence_id_user, sequence_id_sig, sequence_id_sig_next : std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0);
|
||||
signal g_return_code_user, r_return_code_user, c_return_code_user : std_logic_vector(ROS_RETCODE_WIDTH-1 downto 0);
|
||||
|
||||
signal f_start_user, f_ack_user, f_done_user, f_taken_user : std_logic;
|
||||
@ -518,6 +518,8 @@ begin
|
||||
-- ###GENERATED END###
|
||||
end generate;
|
||||
|
||||
sequence_id <= sequence_id_sig;
|
||||
service_info <= service_info_sig;
|
||||
|
||||
main_prc : process(all)
|
||||
begin
|
||||
@ -525,6 +527,8 @@ begin
|
||||
stage_next <= stage;
|
||||
cnt_next <= cnt;
|
||||
return_code_latch_next <= return_code_latch;
|
||||
sequence_id_sig_next <= sequence_id_sig;
|
||||
service_info_sig_next <= service_info_sig;
|
||||
-- DEFAULT Unregistered
|
||||
f_start_user <= '0';
|
||||
f_opcode_user <= NOP;
|
||||
@ -534,8 +538,6 @@ begin
|
||||
g_opcode_user <= NOP;
|
||||
c_start_user <= '0';
|
||||
c_opcode_user <= NOP;
|
||||
sequence_id <= (others => '0');
|
||||
service_info <= EMPTY_SERVICE_INFO;
|
||||
ack <= '0';
|
||||
done <= '0';
|
||||
return_code <= ROS_RET_OK;
|
||||
@ -589,7 +591,7 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
sequence_id <= g_sequence_id_user;
|
||||
sequence_id_sig_next <= g_sequence_id_user;
|
||||
done <= g_done_user;
|
||||
return_code <= g_return_code_user;
|
||||
|
||||
@ -612,12 +614,12 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
service_info <= g_service_info_user;
|
||||
return_code <= g_return_code_user;
|
||||
service_info_sig_next <= g_service_info_user;
|
||||
|
||||
if (g_done_user = '1') then
|
||||
if (g_taken_user = '1') then
|
||||
done <= g_done_user;
|
||||
return_code <= g_return_code_user;
|
||||
stage_next <= IDLE;
|
||||
else
|
||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||
@ -639,7 +641,7 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
sequence_id <= r_sequence_id_user;
|
||||
sequence_id_sig_next <= r_sequence_id_user;
|
||||
done <= r_done_user;
|
||||
return_code <= r_return_code_user;
|
||||
|
||||
@ -662,12 +664,12 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
service_info <= r_service_info_user;
|
||||
return_code <= r_return_code_user;
|
||||
service_info_sig_next <= r_service_info_user;
|
||||
|
||||
if (r_done_user = '1') then
|
||||
if (r_taken_user = '1') then
|
||||
done <= r_done_user;
|
||||
return_code <= r_return_code_user;
|
||||
stage_next <= IDLE;
|
||||
else
|
||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||
@ -689,7 +691,7 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
sequence_id <= c_sequence_id_user;
|
||||
sequence_id_sig_next <= c_sequence_id_user;
|
||||
done <= c_done_user;
|
||||
return_code <= c_return_code_user;
|
||||
|
||||
@ -712,12 +714,12 @@ begin
|
||||
end if;
|
||||
-- Wait for Subscriber
|
||||
when 1 =>
|
||||
service_info <= c_service_info_user;
|
||||
return_code <= c_return_code_user;
|
||||
service_info_sig_next <= c_service_info_user;
|
||||
|
||||
if (c_done_user = '1') then
|
||||
if (c_taken_user = '1') then
|
||||
done <= c_done_user;
|
||||
return_code <= c_return_code_user;
|
||||
stage_next <= IDLE;
|
||||
else
|
||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||
@ -769,10 +771,14 @@ begin
|
||||
stage <= IDLE;
|
||||
cnt <= 0;
|
||||
return_code_latch <= ROS_RET_OK;
|
||||
sequence_id_sig <= (others => '0');
|
||||
service_info_sig <= EMPTY_SERVICE_INFO;
|
||||
else
|
||||
stage <= stage_next;
|
||||
cnt <= cnt_next;
|
||||
return_code_latch <= return_code_latch_next;
|
||||
sequence_id_sig <= sequence_id_sig_next;
|
||||
service_info_sig <= service_info_sig_next;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user