![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
VHDLの設計にて、
上位のモジュールから下位へgenericを用いて integer値を渡したいのですが、
この時に最上位のモジュールにおける信号「A」の状態をみて、
下位へ渡す integer値を切替えることは可能でしょうか。
例えば Aが '0'なら integer に 10を代入、
Aが '1'なら integer に 15を代入して下位に渡すという感じです。
やりたいことの記述イメージを書いてみました。
--Top モジュールです
・
・ (略)
・
architecture
component Module <- 下位モジュールの宣言
generic(
value: integer:=10 <- generic を宣言 初期値は10
); ここの値を信号「A」の状態によって切り替える
port(
din : std_logic;
dout: std_logic
);
end component;
signal A: std_logic; <- 信号「A」を宣言
・ この値('0'、'1')を見て integer値を決める
・ (略)
・
単純にif文を使えば、Aの状態によって value へ異なる値を代入することはできますか?
それともgenericで一度宣言したら、その後は値を変更できないのでしょうか。
上記に示した方法でなくても、上位のモジュールで何かの値を判断し、下位に渡す generic の integer値を変更できれば構いません。
参考記述、ご紹介頂けると助かります。
説明が分かりづらいかもしれませんが、よろしくおねがいします。
No.1ベストアンサー
- 回答日時:
論理合成対象だと仮定して・・・
generic値は論理合成時に静的に確定している定数である必要があるので
ロジック動作中に動的に変更することは基本的に無理です.
valueが変数ならportから入力する必要があります.
bit幅の定数など, どうしてもgenericする必要があるならば
generic値の異なる2つを両方インスタンシエーションしておいて
上位側にてsignal A相当の信号によってdoutを選択すればOKでは?
valueの使い道が分からないのでこれがベストとは言い切れませんが.
この回答への補足
ご回答ありがとうございます。
もうちょっと詳しく書きますと、
「value」はカウンタ値の比較対象として使用しており、value 以外にも複数あります。
シミュレーション時に、実際に使用する値を入れているとシミュレーション時間がやたらとかかってしまうので、
シミュレーションを行う時だけはこれらの値を小さくしたいのです。
それぞれの値をひとつずつ書き換えればそれで済むのですが、トップモジュールにおける何かひとつの信号(本質問でいえばsignal A)の
'0'(シミュレーション) or '1'(シミュレーションではない) をみてシミュレーション用の値へ一気に書き換えられないかと思い、
今回の質問をさせて頂きました。実際には下記のような記述を考えていました。
---Topのモジュールです。
generic(
simulation: std_logic:='0'; <-- '0'ならシミュレーションモード
);
・
・ (略)
・
architecture
component Module <- 下位モジュールの宣言
generic(
generic_value: integer:=10
);
port(
din : std_logic;
dout: std_logic
);
end component;
constant value integer:='10';
constant value_sim integer:='2'
signal value_top integer;
・
・ (略)
・
module_A: Module
generic map(
generic_value => value_top <--simulation の値によって value か value_sim のどちらかを代入する。
・
・ (略)
・
上記のように通常用とシミュレーション用の value を宣言して置き、
simulation の値を見て、value と value_sim のどちらを下位のモジュールに渡すかを選択したいのです。
if文でsimulation の値をみて value もしくは value_simを value_topに代入して下位に渡そうとしたのですが、
「genericに signalは代入できません」というようなエラーが出て、コンパイルできません。
このようなことは実現可能でしょうか?よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBでグローバル変数を宣言するには
-
Excel VBAでリンク切れをチェッ...
-
エクセルVBAでシートモジュール...
-
EXCELのVBAで、あるワークシー...
-
Excel VBAで、ユーザーフォーム...
-
vba userFormのSubを標準モジュ...
-
Tomcat マイナーバージョン移行...
-
エクセルVBAで標準モジュー...
-
Excel VBA 標準モジュール内で...
-
Access VBA標準モジュールにつ...
-
Excel VBA 『Call』で呼び出す...
-
大量の標準モジュールを解放す...
-
ベースモジュールって?
-
Workbook.BeforeSave イベント...
-
ユーザーフォームに最小化・最...
-
プラグイン、ライブラリ、コン...
-
フォーム名一覧の取得
-
フォーム内のテキストボックス...
-
ユーザー定義関数に#NAME?が返...
-
perlで可逆な暗号化
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
グラフのX,Y座標を取得したい
-
Excel VBA 『Call』で呼び出す...
-
VBAで別モジュールへの変数の受...
-
エクセルVBAでシートモジュール...
-
'Range'メソッドは失敗しました
-
VBでグローバル変数を宣言するには
-
モジュールの最大数はいくつな...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとは何ですか
-
Excel VBAで、ユーザーフォーム...
-
【vba】フォームに書いてあ...
-
VBA This Workbookモジュール...
-
Form間の値の渡し方
-
標準モジュールを削除したい。(...
-
Excel VBA 定義されたプロージ...
-
Access VBA標準モジュールにつ...
-
Excel VBA 標準モジュール内で...
-
本当にPublicな変数(配列で)
おすすめ情報