返された型/値の属性を、何らかの形で、拘束のない型を返す関数の中から参照できるかどうかは疑問です。私が知っている関数の戻り値の型の属性を参照することは可能ですか?
function f return std_logic_vector is begin
-- how do we access attributes of what we are returning?
-- "return_type" is a placeholder for it here, it would be nice if
-- this information propagated up into the function based on the way
-- the function's result is used when invoked
return (return_type'high - 2 downto return_type'low + 1 => '0', others => '1');
end function;
signal x: std_logic_vector(7 downto 0);
signal y: std_logic_vector(11 downto 0);
[...]
x <= f; -- expect x = "11000001"
y <= f; -- expect y = "110000000001"
:たとえば(?制約も、何かがそうではない私に語った、と戻り値の型の制約が実際に関数の内部で返されているものによって決定されていることをすべての機能にまで伝播してください)これはそうのように、パラメータとして関数に所望のタイプのものを渡すことによって、周りのハッキングすることができますが、私は可能であればそれを避けるしたいと思います:それは問題にした場合
function f(hint: std_logic_vector) return std_logic_vector is
variable retval: std_logic_vector(hint'range);
begin
retval := (hint'high - 2 downto hint'low + 1 => '0', others => '1');
return retval;
end function;
signal x: std_logic_vector(7 downto 0);
signal y: std_logic_vector(11 downto 0);
[...]
x <= f(x); -- x = "11000001"
y <= f(y); -- y = "110000000001"
、私は、Quartusを使用していますし、この合成する必要があります。コードの2番目のブロックはうまく動作すべきです(私は間違いを犯していないと仮定します)。しかし、これを達成するためのよりよい方法があるのだろうかと思います。
これらは、人為的な例であり、もちろんこれらの値を割り当てる簡単な方法があります。私は一般的に余分なパラメータを渡すハックを避ける良い方法があるかどうか尋ねています。
誰でもLRMトラフ掘ると関連する何かを見つけましたか?最初のコードを実行しようとすると、あなたのシミュレータは何を言っていますか? – Philippe