• ベストアンサー

VHDLに関して

hara2_2iaの回答

  • ベストアンサー
回答No.1

VHDLではvectorタイプの場合には downto を使用すると文法で決まっていたと記憶しています。 selについてはブロック図にスラッシュ2と書いてあります。 線は1本しか書いていませんが、2本をまとめて書いている という意味のため、2bitになります。

関連するQ&A

  • VHDLの書き方について

    教科書で signal a : std_logic_vector (3 downto 0); a <= (others => '0'); -- A というような書き方がありました。 この Aの意味は何なのでしょうか?

  • VHDLのvector

    VHDLにおいて「vector(5bitとします)の全bitが'0'である場合」という条件のif文を書く場合、if(Data = "00000") then と記述する以外に方法はありませんか? ここでは Data :in std_logic_vector(4 downto 0); としています。 5bitくらいならまだいいですが、16bitなどでもひたすら'0'を羅列するしかないのでしょうか?よろしくお願いします。

  • VHDL記述の回路設計「加算減算器」

    VHDL記述の回路を設計というかプログラミングをしたのですが、出力が正しくありませんでした。内容は「加算・減算器」です。今回はオーバーフローを(考えてもいいのですが)考えないことにします。 記述内容は以下のようになっています。P_A で加算と減算を切り替えています。問題のボードへの出力ですが、 X_A + X_B = L_A としています。 0000 0000 0000 0001 0000 0001 0010 0000 0010 0011 0000 0011 0100 0000 0100 … という風に X_A だけを 0 に統一した場合でも正しく出力されていますが、 0000 0001 0001 0001 0001 0000 0010 0001 0011 0011 0001 0010 0100 0001 0101 0101 0001 0100 … このように、ビット同士の和の繰り上がりがきいてない感じなんですね。これって下の記述が間違ってるんでしょうか。それとも、ボード出力時のピンの当て方が間違ってるんでしょうか。詳しい方、アドバイスよろしくお願いします。 library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity EX is port ( P_A : in std_logic; X_A : in std_logic_vector(3 downto 0); X_B : in std_logic_vector(3 downto 0); L_A : out std_logic_vector(3 downto 0) ); end EX; architecture STRUCTURE of EX is begin process ( X_A, X_B, P_A ) begin if P_A = '1' then L_A <= X_A + X_B; else L_A <= X_A - X_B; end if; end process; end STRUCTURE;

  • カウントダウン VHDL記述に困っています。

    入力側には、4Bit入力データバス、Clock、Reset 出力側には、4Bit出力データバス のカウントダウン回路のVHDLの記述にトライしているのですが、シミュレーションを行うと、期待通りの動作が得られません。 イネーブルは入れません。 参考に下記に記述を記載します。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity CNT_DOWN is port(D_IN : in std_logic_vector(3 downto 0); CLK, RST : in std_logic; D_OUT : out std_logic_vector(3 downto 0) ); end CNT_DOWN; architecture RTL of CNT_DOWN is D_OUT_TMP <= D_OUT; begin process(RST,CLK) begin if(RST='0') then D_OUT_TMP<=(others=>'0'); elsif(CLK'event and CLK='1') then if(D_OUT_TMP=D_IN) then D_OUT_TMP <= D_OUT_TMP - '1'; end if; end if; end process; end RTL; なのですが、きちんと動きません。 アドバイス下さい。

  • FPGA > ポート downtoを使う

    FPGAの勉強を始めています。 http://www.kumikomi.net/archives/2009/07/verilog_hdl_1.php 上記のサイトの「(2) エンティティ」のポート宣言の説明のところに port(a, b: in std_logic_vector (3 downto 0); ...略... ) のような部分の"downto"に関して 「downtoは,降順で範囲を指定する予約語です.昇順の場合toを 使います.実際の設計ではもっぱら降順を使います.」 とあります。 downtoをよく使う理由というのはあるのでしょうか?

  • VHDLについてですが何がおかしいのでしょう?

    VHDLについてですが何がおかしいのでしょう? 下記をSynthesize実行すると「 Line 22. rol can not have such operands in this context.」という表示がでます。どういうことなのでしょうか?ソースは本のサンプルどおりのはずなのですが・・。(VHDLとCPLDによるロジック設計入門)という本の126Pのリスト6.12です。 CPLDでザイリンクスWebpackV6.31を使っています。 ===================== library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use IEEE.NUMERIC_STD.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity shift2 is port( SW : in unsigned(1 to 4); SW2,SW3 : in std_logic; LED : out unsigned(5 downto 2)); end shift2; architecture RTL of shift2 is signal S : integer; begin S <= CONV_INTEGER( not (SW3 & SW2)); LED <= SW rol S; ------------------------------Line22 end RTL;

  • VHDLにおける「generic」について

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

  • VHDLについて教えてください

    VHDLついてお教えください。 今、VHDLの勉強しているのですがsignal文とvariable文の違いが良く分かりません。 以下の記述で(1)の結果なぜこのようになるのか分かりません。 ご存知の方、ご教授願います。 例(1) process(A, B, C, D) begin D < = A; X < = B + D; D < = C; Y < = B + D; end process; 結果 X < = B + C; Y < = B + C; 例(2) process(A, B, C) variable D : std_logic_vector( 3 downto 0 ); begin D := A; X < = B + D; D := C; Y < = B + D; end process; 結果 X < = B + A; Y < = B + C;

  • Verilogでメモリに初期値を記憶する方法

    VHDL言語で次のようにしてRAMエリアに初期値を記憶しましたが, Verilogで同じことをinitialで行おうとしてもうまくいきません。 どうすればよいかアドバイスを下さい。 type ram_type is array (0 to 3) of std_logic_vector (7 downto 0); -- RAM : 4 Byte signal RAM : ram_type:= ("00010010", "10010001","00001111","10001001");

  • std_logic_vector のピンアサイン

    cyclone ii ボード、Quartus ii 13.0sp1 です。 port ( a, b : in std_logic_vector (15 downto 0); としたとき (1)Pin Planner でピンアサインをしないで、コンパイルするとOKです。 (2)まずa[15]にFitter Location に表示されているピンを設定して、コンパイルするとOKです。    全てをFitter LocationのようにすればOKだと思うのですが、そうすると配線が整然としません。 そこで、自由に設定できるのかな(?)と思って どういうルールで設定するべきかもわからぬままに a[15]にいろいろなPIN_xを設定してみると (3)PIN_141ならばコンパイルはOKでした。 (4)PIN_1ならばコンパイルエラーでした。 std_logic_vector (15 downto 0) の場合どのようなルールでピンアサイン するのか教えてください。