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 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_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_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_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 : std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0);
|
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 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;
|
signal f_start_user, f_ack_user, f_done_user, f_taken_user : std_logic;
|
||||||
@ -489,6 +489,8 @@ begin
|
|||||||
-- ###GENERATED END###
|
-- ###GENERATED END###
|
||||||
end generate;
|
end generate;
|
||||||
|
|
||||||
|
sequence_id <= sequence_id_sig;
|
||||||
|
service_info <= service_info_sig;
|
||||||
|
|
||||||
main_prc : process(all)
|
main_prc : process(all)
|
||||||
begin
|
begin
|
||||||
@ -496,6 +498,8 @@ begin
|
|||||||
stage_next <= stage;
|
stage_next <= stage;
|
||||||
cnt_next <= cnt;
|
cnt_next <= cnt;
|
||||||
return_code_latch_next <= return_code_latch;
|
return_code_latch_next <= return_code_latch;
|
||||||
|
sequence_id_sig_next <= sequence_id_sig;
|
||||||
|
service_info_sig_next <= service_info_sig;
|
||||||
-- DEFAULT Unregistered
|
-- DEFAULT Unregistered
|
||||||
f_start_user <= '0';
|
f_start_user <= '0';
|
||||||
f_opcode_user <= NOP;
|
f_opcode_user <= NOP;
|
||||||
@ -505,8 +509,6 @@ begin
|
|||||||
g_opcode_user <= NOP;
|
g_opcode_user <= NOP;
|
||||||
c_start_user <= '0';
|
c_start_user <= '0';
|
||||||
c_opcode_user <= NOP;
|
c_opcode_user <= NOP;
|
||||||
sequence_id <= (others => '0');
|
|
||||||
service_info <= EMPTY_SERVICE_INFO;
|
|
||||||
ack <= '0';
|
ack <= '0';
|
||||||
done <= '0';
|
done <= '0';
|
||||||
return_code <= ROS_RET_OK;
|
return_code <= ROS_RET_OK;
|
||||||
@ -560,9 +562,9 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
sequence_id <= g_sequence_id_user;
|
sequence_id_sig_next <= g_sequence_id_user;
|
||||||
done <= g_done_user;
|
done <= g_done_user;
|
||||||
return_code <= g_return_code_user;
|
return_code <= g_return_code_user;
|
||||||
|
|
||||||
if (g_done_user = '1') then
|
if (g_done_user = '1') then
|
||||||
-- DONE
|
-- DONE
|
||||||
@ -583,12 +585,12 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
service_info <= g_service_info_user;
|
service_info_sig_next <= g_service_info_user;
|
||||||
return_code <= g_return_code_user;
|
|
||||||
|
|
||||||
if (g_done_user = '1') then
|
if (g_done_user = '1') then
|
||||||
if (g_taken_user = '1') then
|
if (g_taken_user = '1') then
|
||||||
done <= g_done_user;
|
done <= g_done_user;
|
||||||
|
return_code <= g_return_code_user;
|
||||||
stage_next <= IDLE;
|
stage_next <= IDLE;
|
||||||
else
|
else
|
||||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||||
@ -610,9 +612,9 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
sequence_id <= r_sequence_id_user;
|
sequence_id_sig_next <= r_sequence_id_user;
|
||||||
done <= r_done_user;
|
done <= r_done_user;
|
||||||
return_code <= r_return_code_user;
|
return_code <= r_return_code_user;
|
||||||
|
|
||||||
if (r_done_user = '1') then
|
if (r_done_user = '1') then
|
||||||
-- DONE
|
-- DONE
|
||||||
@ -633,12 +635,12 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
service_info <= r_service_info_user;
|
service_info_sig_next <= r_service_info_user;
|
||||||
return_code <= r_return_code_user;
|
|
||||||
|
|
||||||
if (r_done_user = '1') then
|
if (r_done_user = '1') then
|
||||||
if (r_taken_user = '1') then
|
if (r_taken_user = '1') then
|
||||||
done <= r_done_user;
|
done <= r_done_user;
|
||||||
|
return_code <= r_return_code_user;
|
||||||
stage_next <= IDLE;
|
stage_next <= IDLE;
|
||||||
else
|
else
|
||||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||||
@ -660,9 +662,9 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
sequence_id <= c_sequence_id_user;
|
sequence_id_sig_next <= c_sequence_id_user;
|
||||||
done <= c_done_user;
|
done <= c_done_user;
|
||||||
return_code <= c_return_code_user;
|
return_code <= c_return_code_user;
|
||||||
|
|
||||||
if (c_done_user = '1') then
|
if (c_done_user = '1') then
|
||||||
-- DONE
|
-- DONE
|
||||||
@ -683,12 +685,12 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
service_info <= c_service_info_user;
|
service_info_sig_next <= c_service_info_user;
|
||||||
return_code <= c_return_code_user;
|
|
||||||
|
|
||||||
if (c_done_user = '1') then
|
if (c_done_user = '1') then
|
||||||
if (c_taken_user = '1') then
|
if (c_taken_user = '1') then
|
||||||
done <= c_done_user;
|
done <= c_done_user;
|
||||||
|
return_code <= c_return_code_user;
|
||||||
stage_next <= IDLE;
|
stage_next <= IDLE;
|
||||||
else
|
else
|
||||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||||
@ -740,10 +742,14 @@ begin
|
|||||||
stage <= IDLE;
|
stage <= IDLE;
|
||||||
cnt <= 0;
|
cnt <= 0;
|
||||||
return_code_latch <= ROS_RET_OK;
|
return_code_latch <= ROS_RET_OK;
|
||||||
|
sequence_id_sig <= (others => '0');
|
||||||
|
service_info_sig <= EMPTY_SERVICE_INFO;
|
||||||
else
|
else
|
||||||
stage <= stage_next;
|
stage <= stage_next;
|
||||||
cnt <= cnt_next;
|
cnt <= cnt_next;
|
||||||
return_code_latch <= return_code_latch_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 if;
|
end if;
|
||||||
end process;
|
end process;
|
||||||
|
|||||||
@ -235,8 +235,8 @@ architecture arch of Fibonacci_ros_action_client is
|
|||||||
signal cnt, cnt_next : natural range 0 to 5;
|
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_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_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_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 : std_logic_vector(ROS_SEQUENCE_ID_WIDTH-1 downto 0);
|
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 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;
|
signal f_start_user, f_ack_user, f_done_user, f_taken_user : std_logic;
|
||||||
@ -518,6 +518,8 @@ begin
|
|||||||
-- ###GENERATED END###
|
-- ###GENERATED END###
|
||||||
end generate;
|
end generate;
|
||||||
|
|
||||||
|
sequence_id <= sequence_id_sig;
|
||||||
|
service_info <= service_info_sig;
|
||||||
|
|
||||||
main_prc : process(all)
|
main_prc : process(all)
|
||||||
begin
|
begin
|
||||||
@ -525,6 +527,8 @@ begin
|
|||||||
stage_next <= stage;
|
stage_next <= stage;
|
||||||
cnt_next <= cnt;
|
cnt_next <= cnt;
|
||||||
return_code_latch_next <= return_code_latch;
|
return_code_latch_next <= return_code_latch;
|
||||||
|
sequence_id_sig_next <= sequence_id_sig;
|
||||||
|
service_info_sig_next <= service_info_sig;
|
||||||
-- DEFAULT Unregistered
|
-- DEFAULT Unregistered
|
||||||
f_start_user <= '0';
|
f_start_user <= '0';
|
||||||
f_opcode_user <= NOP;
|
f_opcode_user <= NOP;
|
||||||
@ -534,8 +538,6 @@ begin
|
|||||||
g_opcode_user <= NOP;
|
g_opcode_user <= NOP;
|
||||||
c_start_user <= '0';
|
c_start_user <= '0';
|
||||||
c_opcode_user <= NOP;
|
c_opcode_user <= NOP;
|
||||||
sequence_id <= (others => '0');
|
|
||||||
service_info <= EMPTY_SERVICE_INFO;
|
|
||||||
ack <= '0';
|
ack <= '0';
|
||||||
done <= '0';
|
done <= '0';
|
||||||
return_code <= ROS_RET_OK;
|
return_code <= ROS_RET_OK;
|
||||||
@ -589,9 +591,9 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
sequence_id <= g_sequence_id_user;
|
sequence_id_sig_next <= g_sequence_id_user;
|
||||||
done <= g_done_user;
|
done <= g_done_user;
|
||||||
return_code <= g_return_code_user;
|
return_code <= g_return_code_user;
|
||||||
|
|
||||||
if (g_done_user = '1') then
|
if (g_done_user = '1') then
|
||||||
-- DONE
|
-- DONE
|
||||||
@ -612,12 +614,12 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
service_info <= g_service_info_user;
|
service_info_sig_next <= g_service_info_user;
|
||||||
return_code <= g_return_code_user;
|
|
||||||
|
|
||||||
if (g_done_user = '1') then
|
if (g_done_user = '1') then
|
||||||
if (g_taken_user = '1') then
|
if (g_taken_user = '1') then
|
||||||
done <= g_done_user;
|
done <= g_done_user;
|
||||||
|
return_code <= g_return_code_user;
|
||||||
stage_next <= IDLE;
|
stage_next <= IDLE;
|
||||||
else
|
else
|
||||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||||
@ -639,9 +641,9 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
sequence_id <= r_sequence_id_user;
|
sequence_id_sig_next <= r_sequence_id_user;
|
||||||
done <= r_done_user;
|
done <= r_done_user;
|
||||||
return_code <= r_return_code_user;
|
return_code <= r_return_code_user;
|
||||||
|
|
||||||
if (r_done_user = '1') then
|
if (r_done_user = '1') then
|
||||||
-- DONE
|
-- DONE
|
||||||
@ -662,12 +664,12 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
service_info <= r_service_info_user;
|
service_info_sig_next <= r_service_info_user;
|
||||||
return_code <= r_return_code_user;
|
|
||||||
|
|
||||||
if (r_done_user = '1') then
|
if (r_done_user = '1') then
|
||||||
if (r_taken_user = '1') then
|
if (r_taken_user = '1') then
|
||||||
done <= r_done_user;
|
done <= r_done_user;
|
||||||
|
return_code <= r_return_code_user;
|
||||||
stage_next <= IDLE;
|
stage_next <= IDLE;
|
||||||
else
|
else
|
||||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||||
@ -689,9 +691,9 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
sequence_id <= c_sequence_id_user;
|
sequence_id_sig_next <= c_sequence_id_user;
|
||||||
done <= c_done_user;
|
done <= c_done_user;
|
||||||
return_code <= c_return_code_user;
|
return_code <= c_return_code_user;
|
||||||
|
|
||||||
if (c_done_user = '1') then
|
if (c_done_user = '1') then
|
||||||
-- DONE
|
-- DONE
|
||||||
@ -712,12 +714,12 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
-- Wait for Subscriber
|
-- Wait for Subscriber
|
||||||
when 1 =>
|
when 1 =>
|
||||||
service_info <= c_service_info_user;
|
service_info_sig_next <= c_service_info_user;
|
||||||
return_code <= c_return_code_user;
|
|
||||||
|
|
||||||
if (c_done_user = '1') then
|
if (c_done_user = '1') then
|
||||||
if (c_taken_user = '1') then
|
if (c_taken_user = '1') then
|
||||||
done <= c_done_user;
|
done <= c_done_user;
|
||||||
|
return_code <= c_return_code_user;
|
||||||
stage_next <= IDLE;
|
stage_next <= IDLE;
|
||||||
else
|
else
|
||||||
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
return_code_latch_next <= ROS_RET_ACTION_CLIENT_TAKE_FAILED;
|
||||||
@ -769,10 +771,14 @@ begin
|
|||||||
stage <= IDLE;
|
stage <= IDLE;
|
||||||
cnt <= 0;
|
cnt <= 0;
|
||||||
return_code_latch <= ROS_RET_OK;
|
return_code_latch <= ROS_RET_OK;
|
||||||
|
sequence_id_sig <= (others => '0');
|
||||||
|
service_info_sig <= EMPTY_SERVICE_INFO;
|
||||||
else
|
else
|
||||||
stage <= stage_next;
|
stage <= stage_next;
|
||||||
cnt <= cnt_next;
|
cnt <= cnt_next;
|
||||||
return_code_latch <= return_code_latch_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 if;
|
end if;
|
||||||
end process;
|
end process;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user