• 締切済み

VHDLのセンシティブリストに関して

VHDLのセンシティブリストに関して質問があります。 初心者です。 下記の2つで違いがでるのでしょうか? (1)================================= process(SEL, IA, IB ,IC ,ID) begin case SEL is when '0' => OA <= not IA; OB <= not IB; when '1' => OA <= not IC; OB <= not ID; when others => null; end case; end process; (2)================================= process(SEL, ,IC ,ID) begin case SEL is when '0' => OA <= not IA; OB <= not IB; when '1' => OA <= not IC; OB <= not ID; when others => null; end case; end process; ================================= ネットで調べるとセンシティブリストに登録された信号が変化した場合に begin以下の処理が行われるとあります。 つまりは、 (1)の場合は、SEL=0固定でもIAやIBが変化した場合にOAやOBは変化するが、 (2)の場合は、SEL=0固定でIAやIBが変化した場合は、OAやOBは変化しないということでしょうか?

みんなの回答

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

> 実際に動作させると変化するのです。 > シュミレーションでは、もちろん変化しません。 「シミュレーション」と「実際に動作」の違いは何ですか? (シミュレーションだって動作はさせてるわけで。) 論理合成後の動作のことを言っているなら、 (2)の記述がちゃんと論理合成できる記述であるかどうか確認しましたか? (ぱっと見は、論理合成向きの記述には見えませんが。)

全文を見る
すると、全ての回答が全文表示されます。
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

そこまでできてるなら実際に動かして確かめた方が早いよ。

GACHAPINA
質問者

お礼

ご回答ありがとうございます。 不思議なのですが、 (2)の場合は、SEL=0固定でIAやIBが変化した場合は、OAやOBは変化しないはずなのですが、 実際に動作させると変化するのです。 シュミレーションでは、もちろん変化しません。 何か変だな?と思い質問させていただいたしだいです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 記述の仕方について(VHDL)

    VHDLの記述で、同一の出力に入力の条件に対応した複数の値を代入することは出来ないのでしょうか? 7セグメントを光らせるプログラムなのですが、1つは1)時計回りにセグメントが光っていくもの、もうひとつは2)反時計回りに光っていくものとなっています。これをif文で条件をつけて、Aの場合は1)のprocessをBの場合には2)のをという感じで書いてみたんですが、FITをしようとするとエラーが出てしまいます。出力はportで「SEG」と定義しています。 プログラムの一部: process 1) begin  case 1) is when ・・・ => SEG <= ・・・   end case end process process 2) begin case 2) is when ・・・ => SEG <= ・・・ ・・・

  • VHDLで、case文とwhen文のどちらを使おうか迷っています。

    VHDLで、case文とwhen文のどちらを使おうか迷っています。 以下のようなプログラムを作ろうと思っています。 //ここからcase文もしくはwhen文 SWの値を読み込み、 1の時signalに10を代入 2の時signalに20を代入 ・ ・ ・ 10の時signalに100を代入 //ここまでcase文もしくはwhen文 process(clk) clkが立ち上がる回数をカウントしていき、signalと同じ数になった時に1を出力 それ以外は0を出力 end process case文はprocess文で、when文は同時処理文で記述することは知っていますが、このような場合、どちらを使ったらいいのでしょうか?

  • 未知数が6つの連立方程式。

    高専生で、電気回路という科目の中で、キルヒホッフの法則というものがでてきたのですが、 未知数が6つもある連立方程式を解かなければなりません。(I=電流) その式は、 I=Ia+Ib…(1) Ia=Ic+Ie…(2) Ib+Ie=Id…(3) 6Ib+4Id=20…(4) 3Ia+4Id+6Ie=20…(5) 6Ib+14Ic-6Ie=20…(6) です。 本来a,b,c…は1,2,3…なのですが、係数と混ざってわかりにくいので、 こちらでお願いします。 この問題の解き方(できれば簡単な解き方)を教えてください。 お願いします。

  • 【PL/SQL】IF文( EXIT WHEN )でプロシージャの実行結果から判断させたい

    Oracleで動くPL/SQLを作成してます。 プロシージャの実行結果をIF文に入れて、 実行結果からさらに処理を走らせたいのですが エラーが出てしまいます。 例) CREATE PROCEDURE TEST1(id NUMBER) BEGIN select NAME from TBLA where DID = id and ROWNUM <= 1; END; CREATE PROCEDURE TEST2(id NUMBER) BEGIN LOOP EXIT WHEN ( TEST1(id) is not null );☆ここがうまくいかない。 id := id + 1; END LOOP; END; TEST2のCreate時にTEST1は関数として存在しないというエラーメッセージが表示されます。 IF(EXIT WHEN)文中からはずして TEST1(id)のみの実行では、エラーが起きず IF文に入れるとエラーが起きるところまでは分かりました。 例はかなり簡略しているのですが、 どうしたらうまく動くのか分かる方がいれば 教えてもらいたいです。

  • VHDLのFF記述について

    お世話になります。VHDL同期FFの基本的な使い方で、今一イメージができない部分がありますのでご教示いただけたら有難いです。 次のようなVHDL記述で、 entity test is port (    CLK : in  std_logic;    xRST : in  std_logic;    A  : in std_logic;    B  : in std_logic;    X  : out std_logic;    Y  : out std_logic ); end; architecture RTL of test is signal  A_in: std_logic; signal  A_out: std_logic; signal  B_out: std_logic; begin    A_in <= A ;    X <= A_out;    Y <= B_out; process (CLK, xRST ) begin    if(xRST = '0')then       A_out <= '0';       B_out <= '0';    elsif (CLK' event and CLK ='1') then       A_out <= A_in;       B_out <= B;    end if;  end process; end; ・入力Aは一度A_inというsignalを通ってFF出力していて、この時出力XはAが1クロック分遅れて出力されます。 ・入力BはそのままFF出力しているのですが、出力YはAと同期して出力されます。 B-->Yのような場合、はFFがかからないのがなぜなのか、Aとの違いを教えていただけませんでしょうか? 初歩的な質問で恐縮ですが宜しくお願いいたします。

  • PL/SQL での判定(分岐?)の仕方を教えてください!

    PL/SQLで、以下の(1)の処理があった場合、 (2)はどのようにすればいいでしょうか? ※(2)は2つのどちらかの場合に処理をするような 判定をしたいのですが "OR" は使えないですよね? (1)個人IDを取得している場合(NULL以外) IF kojin_id NOT NULL THEN BEGIN SELECT KANRI_NO --管理NOを取得 FROM AAA WHERE KOJIN_ID = kojin_id; EXCEPTION WHEN NO_DATA_FOUND zero_check_flg := 1; --(2)で判定する用のチェックフラグ(※(2)の判定で使えるかなと思ったので) END; END IF; (2)個人IDがNULL、または、(1)で管理NOが取得できなかった場合   ↑   ここの判定文が作れません!!!!!

  • SQLでのCASEの使い方

    ASPからSQLを実行し、DBを操作するプログラムを組んでいます。 SQLをクエリアナライザで実行したときに→のところでエラーが出るのですが、どのようにしたらいいでしょうか? ----------------------------------------------- if object_id('xxxx') is not null  drop procedure xxxx go CREATE PROCEDURE xxxx (  @client_id char(10),  @user_id  char(10),   :(省略)  @code_1  char(6) output,  @code_2  char(6) output,   :(省略)  @code_9  char(6) output ) AS BEGIN  SET NOCOUNT ON  BEGIN TRANSACTION    DECLARE @no     int  SELECT @no = '0'  WHILE (@no <= 9)  BEGIN   SELECT @AAA = ISNULL(MAX job_code), '000000')    FROM TABLE    WHERE client_id = @client_id     And user_id = @user_id    SET @AAA = dbo.fbx_NextAlphanumeric(@AAA)   :(省略)   :   CASE @no →正しくない構文    WHEN 0 THEN SELECT @code_1 = @AAA    WHEN 1 THEN SELECT @code_2 = @AAA →正しくない構文     :(省略)    WHEN 9 THEN SELECT @code_9 = @AAA   END   SELECT @no = @no + 1  END  COMMIT TRANSACTION  RETURN 1 END go ----------------------------------------------- やりたいのは、SQL実行後にOUTPUTする変数「@code_1~9」にWHILEでループしながら求めた変数@AAAをセットしたいのですが。 初歩的なことだとは思いますが、よろしくお願いします。

  • 電源用パスコンを削除できる目安について

    電源ラインにパスコン(電源安定用)をつける際、 電源とICが近い場合や供給先の2つのICが近い場合などは パスコンを取ってしまってよいのでは、と考えています。 このときのパスコン削除の目安について自分なりに考えてみたので アドバイスをいただけないでしょうか。 まず、パスコンの役割として、 ICの消費電流が変化した時に配線のコイル成分が必要とするエネルギーを、 コンデンサ(パスコン)が持っているエネルギーで相殺していると考えました。 つまり、 消費電流の変化前/後でのコイル成分のエネルギーの差分 =安定時/変化時に許容できる電圧でのパスコンのエネルギーの差分 これを式にすると、(ICは1個、パスコンも1個)(C以外は既知) 1/2*L*(Ia^2-Ib^2)-1/2*C*(Va^2-Vb^2)=0 Ia:変化前の電流、Ib:変化後の電流 Va:安定時の電圧、Vb:電流変化時の電圧 L:配線のコイル成分、C:パスコンの容量 このときのCの値がパスコンの容量の目安になって、 十分に小さければ削除OK、と思っています。 この考え方で問題ないでしょうか。 よろしくお願いします。

  • 中学の電流・電圧・豆電球の明るさに関する問題です

    中学の息子がテストで解らなかったので教えてほしいと言ってきました。単に電流や電圧を求めるだけの問題はオームの法則を使ってテスト前に教えてやりましたが、豆電球の明るさを絡めたこの問題がよくわかりません。 問1 図1、図2で、豆電球a、豆電球bの明るさはどうなるか。正しいものを選べ。 あ 豆電球aの方が豆電球bより明るい。 い 豆電球bの方が豆電球aより明るい。 う 明るさはどちらも同じ。 問2 図1のA、B、C、D点の電流をそれぞれ IA、IB、IC、IDとすると、次のうち正しいものはどれか、すべて答えよ。 あ.IA =IB い.IA =IC う.IC =ID え.IA<IB お.IB<IC か.IC>ID き.IA +IB +IC =ID く.IA +IB =IC け.IA +IB =ID こ.ID ÷ 2 =IA 問3 図1の豆電球 a 、b にかかる電圧をそれぞれ Va 、Vb とする。 また、 ア、イ の間にかかる電圧を Vアイ とする。 Va 、Vb 、Vアイ の関係を正しくあらわしているものは次のうちどれか、すべて選べ。 あ. Va = Vb い. Va > Vb う. Va = Vアイ え. Va + Vb = Vアイ お. Va <Vb < Vアイ か. Vb = Vアイ き. Vアイ ÷ 2 = Va く. Vアイ ÷ 2 = Vb け. Vアイ ÷ 2 > Va こ. Vアイ ÷ 2 < Vb 問4 図2の豆電球 a 、b にかかる電圧をそれぞれ Va 、Vb とする。 また、 ア、イ の間にかかる電圧、 ア、ウ間にかかる電圧、 イ、ウ間にかかる電圧をそれぞれ Vアイ 、 Vアウ 、 Vイウ とする。 Va 、Vb 、Vアイ 、 Vアウ 、 Vイウ の関係を正しくあらわしているものは次のうちどれか、すべて選べ。 あ. Va = Vb い. Va > Vb う. Va + Vb = Vアイ え. Va + Vb = Vアウ お. Va + Vb = Vイウ か. Va = 0 き. Vアウ = 0 く. Vアイ ÷ 2 = Vb け. Vアイ ÷ 2 > Vb こ. Vアイ ÷ 2 < Vb 補足(画像がわかりにくい場合は参照してください) 図1は接点左からD、C。上からB、A。左からイ、ア。抵抗は上から豆電球b 3.8V用、豆電球a 2.5V用。図2はスイッチがウ、下の左からイ、ア。抵抗は左から豆電球b 3.8V用、豆電球a 2.5V用。右の文は上が「豆電球aは2.5Vの電圧をかけると0.3Aの電流が流れる」下が「豆電球bは3.8Vの電圧をかけると0.3Aの電流が流れる」です。スイッチは繋いだ状態です。電源は全て3V。

  • ユーザ定義関数を使用して、列名を返すことは可能?

    22歳男性です。SQLServerについて質問があります。 =============================================== select * from テーブル名 where F_xxx(@a) like '%あ' ----------------------------------- create function F_xxx (@a int) returns ■■■ as begin return ( case @a when 1 then '社員ID' when 2 then '社員名' end ) end =============================================== 上記のように、ユーザ定義関数(F_xxx)を作り、特定の数値が来た場合に列名を返すプログラムを作りたいのですが、戻り値のデータ型(■■■)がわかりません。 データ型に「Column型」みたいのはあるのでしょうか? 知っている方がいましたら、教えてくださいマシ。