Also by developing our own language from scratch we have much greater flexibility when it comes to tools development. With VHDL for example it is necessary to use an awkward foreign-language interface to add our own tools to the simulator. With our own language we have total flexibility to integrate our tools as we wish.
I1?x | I2?y ;
O!(x&y)
But in this code the two input channels are acknowledged before the result is sent to the output - there are implied latches on the inputs. We would prefer that the inputs are not acknowledged until after the output has been acknowledged. LARD's channel communication model allows this using this syntax:
I1? I2? O!(?I1&?I2)
wait until a_req='1' and b_req='1';
do_something_with_a_and_b;
( a_ack <= '1'; wait_until a_req='0'; a_ack='0' ) |
( b_ack <= '1'; wait_until b_req='0'; b_ack='0' )
Since there is no | operator it has to become the following:
wait until a_req='1' and b_req='1';
do_something_with_a_and_b;
a_ack <= '1';
b_ack <= '1';
wait until a_req='0' or b_req='0';
if a_req='0' then
a_ack <= '0';
wait until b_req='0';
b_ack <= '0';
else
b_ack <= '0';
wait until a_req='0';
a_ack <= '0';
end if;
This is bad enough, but there are generally more channels to deal with leading to a huge increase in code size.