アプリ版:「スタンプのみでお礼する」機能のリリースについて

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値を変更できれば構いません。
参考記述、ご紹介頂けると助かります。
説明が分かりづらいかもしれませんが、よろしくおねがいします。
   

A 回答 (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は代入できません」というようなエラーが出て、コンパイルできません。
このようなことは実現可能でしょうか?よろしくお願いします。

補足日時:2010/02/28 22:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!