
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で質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Visual Basic(VBA) vbaで色付けされたセルを除外したいのですが 5 2023/01/28 17:22
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonでのカーソル移動がずれる
-
HP作成に於いて、スマホでのサ...
-
cnt <= (others => '0'); の意...
-
秀丸で複数行コメントアウトを...
-
行頭から全角で3文字位さげた...
-
htmlの文字が縦書きになる
-
含む含まないという概念自体の...
-
htmlのolやulなどlistにtitleや...
-
訪問済のリンク色を変えない方法
-
HTML属性での「""」 「''」違い
-
マージソートの計算量について-...
-
スタイルシート<記述>
-
liタグの中に<p>タグやら<dl>を...
-
僻む人
-
アイフレームについて
-
<h1>、<h2>と<p><div>の行間を...
-
ナマズのスコアについて
-
footerの背景が切れて、背景画...
-
スタイルシートについて
-
NからZへの全単射を具体的に構...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cnt <= (others => '0'); の意...
-
pythonでのカーソル移動がずれる
-
質問です。 新規登録ボタンが全...
-
ASP.NETでプレーンなページに文...
-
行頭から全角で3文字位さげた...
-
HTMLの出力で改行をさせない方...
-
CSSでの2段組レイアウトでdiv#c...
-
chromedriverのver-upで動作不...
-
検索結果がツリー状に表示され...
-
Excel VBAでのIE操作でクリック...
-
VBAでの素数の求め方
-
RubyのHTMLパーサーで複数のタ...
-
SEO対策セミナー
-
IE8では大丈夫なのに、IE7では...
-
エキサイトブログでマイスキン...
-
DIVの入れ子で、FireFoxだとレ...
-
SEO 検索エンジンについて
-
【Ruby】改行挿入 文字列操作
-
safariで見るとページ上部に余...
-
Dreamweaver について
おすすめ情報