
VHDL 2008のソースリストを読んでいるところですが、以下のプログラムの意味がわからないので教えて下さい。50MHzのクロックから1MHのクロックい分周する回路の一部です。
CLK_WIDTH は分周比50という値を示す5ビットの定数(?)です。
C言語なら理解できるので、C言語で書き直す(?)としたらどのようなコードに対応するのでしょうか?
具体的には、cnt <= (others => '0');で cnt にどんな値が代入されるのでしょう?
なお、
<= はコンカレント代入文
:= はシーケンシャル代入文
といった違いは理解しています。
よろしくお願いします
process( S_AXI_ACLK ) is
begin
if (rising_edge (S_AXI_ACLK)) then
if ( S_AXI_ARESETN = '0' ) then
cnt <= (others => '0');
div <= (others => '0');
else
if ( div = CLK_WIDTH ) then
div <= (others => '0');
cnt <= cnt + 1;
else
div <= div + 1;
end if;
No.1ベストアンサー
- 回答日時:
私はほとんどVerilogしか使わないので、VHDLにそれほど詳しいわけではないけど、この場合のOthersはその名の通り「その他」の意味です。
あなたのコードではわかりにくいので、別の例を出すと以下の文はすべて同じことです。
cnt <= ( 4=>'1', 3 down to 1=>'0', 0=>'1');
cnt <= '10001';
cnt <= (4=>'1', 0=>'1', others=>'0');
これを見ればわかるけど、5ビットのcntがあって、明確に値が与えられている要素(indexが0と4の要素)以外のインデックスがothersと表現されます。
であなたのコードではcntのどの要素にも明示的に値が与えられていないので、others=>'0'ですべてのビットに0が与えられる、つまりカウンタの全ビットが0に初期化されているということです。
VHDLのようなハードウェア記述言語はその性格上すべてがビット単位で処理されます。だからカウンター値でもわざわざ5ビットの配列にしなければならないのだけど、Cは高級言語なので同じことをするのなら単に、
int cnt = 0;
でいいと思います。
ありがとうございます
>Cは高級言語なので同じことをするのなら単に、
>int cnt = 0;
>でいいと思います。
なるほど。 (others => '0')は、(変数のビット数に関係なく)全ビットが0という意味ですね、
ということは、
signal cnt : std_logic_vector(7 downto 0); -- 0 ~ 256 @ 1MHz
signal div : std_logic_vector(5 downto 0); -- 0 ~ DIV(49)
と宣言されているので、
cnt <= (others => '0');
div <= (others => '0');
は
cnt <= '00000000';
div <= '000000';
ということですね。
No.2
- 回答日時:
件のコードをCで置き換えるなら...
クロック(S_AXI_ACLK)の立ち上がりをどうC言語で表現するかはこれだけではなんといえないので端折るけど、if文内でやっていることは以下のような感じです。
if(S_AXI_ARESETN == 0) {
cnt = 0;
div = 0;
}
else {
if(div == CLK_WIDTH) {
div = 0;
cnt++;
}
else {
div++;
}
}
divは、それが50に達したら0にリセットされるフリーランニングのカウンタで、cntはクロックのカウント数が50, 100, 150, 200、....と50の倍数になるたびにカウントアップされる。
再度の回答ありがとうございます
C言語にするとよく理解できますね。
ようするに、
S_AXI_ARESETNがリセット信号で
クロック(S_AXI_ACLK)の立ち上がりで6ビットの内部カウンタdivをカウントアップ
50クロック毎に、8ビットの外部カウンタ cnt をカウントアップ
ということですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
cnt <= (others => '0'); の意...
-
pythonでのカーソル移動がずれる
-
プログラマーの方に質問です。 ...
-
質問です。 新規登録ボタンが全...
-
htmlの文字が縦書きになる
-
個別にリンクの色を変える方法
-
ボタンをセル内一杯に表示させ...
-
htmlのolやulなどlistにtitleや...
-
画像イメージの上下左右、欲し...
-
aの中にspan
-
含む含まないという概念自体の...
-
iframe 内の画像を自動縮小させ...
-
ブログのサイドバーが下にくる
-
HRタグ 枠線を透明にするには?
-
ulタグやliタグの中でbrタグ...
-
<div id="container">の使いか...
-
CSS質問:大手サイトを見ると何...
-
テンソル解析(絶対微分学)は...
-
html divボックスの入れ子で中...
-
複数のボタンを等間隔に、かつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cnt <= (others => '0'); の意...
-
pythonでのカーソル移動がずれる
-
CSSで背景色を指定しても、読み...
-
回り込みfloatの連続?
-
csvファイルについて
-
コーディングで「float」のclea...
-
ASP.NETでプレーンなページに文...
-
Excel VBAでのIE操作でクリック...
-
htmlを組んでいるのですが、DIV...
-
CSSで高さを自動にするとレイア...
-
.htaccessについて
-
現在作成しているページで、一...
-
検索結果がツリー状に表示され...
-
秀丸で複数行コメントアウトを...
-
RubyのHTMLパーサーで複数のタ...
-
safariで見るとページ上部に余...
-
css リンクの色が全部変わって...
-
CSSメニューボタンのセンター配置
-
忍者ツールズのカウンタを右寄...
-
CSSのdivタグの名称には決まり...
おすすめ情報