[PR]
2025年04月25日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
属性
2008年12月08日
再利用可能な部品を作るにはcomponent宣言、subproglam宣言、generic文だけではなく、
attribute(属性)の考え方が必要です。何も難しいことは無く、
signal A : STD_LOGIC_VECTOR(7 downto 0);と定義した場合。
A'left --Aのdowntoの左側の7を返す。
A'right --Aのdowntoの右側の0を返す。
A'length --Aのビット幅である8を返す。
といった具合です。前述のsubproglam宣言と組み合わせた関数を作ってみました。
どんなビット幅のデータが入っても40bitにしてくれる関数です。Excel用です。
難しいことは無く、40bit以下のデータに0か1を付加して拡張しているだけです。
--追記:40bit以上のデータも対応しました。
--追記:40の部分をパラメータ化すればもっと汎用性の高い部品になりますね
function BITCHANGER(din : STD_LOGIC_VECTOR)
return STD_LOGIC_VECTOR is
variable dout : STD_LOGIC_VECTOR(40-1 downto 0);
variable all_zero : STD_LOGiC_VECTOR(40- din'length-1 downto 0):=(others=>'0');
variable all_one : STD_LOGiC_VECTOR(40- din'length-1 downto 0):=(others=>'1');
begin
if(din'length > 40)then
dout := din(40-1 downto 0);
else
if(din(din'high)= '0')then
dout:=(all_zero&din);
elsif(din(din'high)= '1')then
dout:=(all_one&din);
else
null;
end if;
end if;
return dout;
end BITCHANGER;
attribute(属性)の考え方が必要です。何も難しいことは無く、
signal A : STD_LOGIC_VECTOR(7 downto 0);と定義した場合。
A'left --Aのdowntoの左側の7を返す。
A'right --Aのdowntoの右側の0を返す。
A'length --Aのビット幅である8を返す。
といった具合です。前述のsubproglam宣言と組み合わせた関数を作ってみました。
どんなビット幅のデータが入っても40bitにしてくれる関数です。Excel用です。
難しいことは無く、40bit以下のデータに0か1を付加して拡張しているだけです。
--追記:40bit以上のデータも対応しました。
--追記:40の部分をパラメータ化すればもっと汎用性の高い部品になりますね
function BITCHANGER(din : STD_LOGIC_VECTOR)
return STD_LOGIC_VECTOR is
variable dout : STD_LOGIC_VECTOR(40-1 downto 0);
variable all_zero : STD_LOGiC_VECTOR(40- din'length-1 downto 0):=(others=>'0');
variable all_one : STD_LOGiC_VECTOR(40- din'length-1 downto 0):=(others=>'1');
begin
if(din'length > 40)then
dout := din(40-1 downto 0);
else
if(din(din'high)= '0')then
dout:=(all_zero&din);
elsif(din(din'high)= '1')then
dout:=(all_one&din);
else
null;
end if;
end if;
return dout;
end BITCHANGER;
PR
昨夜は、かなり飛ばしてましたね。
お疲れ様でした。
おかげで一日潰してしまったよ。