-1

VHDL の N-Length STD_LOGIC_VECTOR に '1' を追加しようとしています

VHDLを使用するのはこれが初めてなので、冗長に見えるフルアダーを構築せずにこの1を追加する方法がまったくわかりません

コード内で 1 つ以上のライブラリを使用することは許可されていません。

    LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;


ENTITY cnt IS

 GENERIC (n: natural :=3);

 PORT( clk: IN  std_logic;      -- clock
   rst: IN  std_logic;      -- reset
   cntNum: IN  std_logic_vector(n-1 DOWNTO 0); -- # of counting cycles
   cntOut: OUT std_logic_vector(n-1 DOWNTO 0) -- count result
 );
END cnt;


architecture CntBhvArc OF cnt IS

    signal counta : std_logic_vector(n-1 DOWNTO 0);

begin

 process (clk, rst)

 begin

     if rst='1' then

         counta<="0";

     elsif (clk'event) and (clk='0') then

         counta<= counta+'1';

     end if;

 cntOut<=counta;

 end process;

END CntBhvArc

また...プログラミングの経験がほとんどない人のために、VHDL totrialを指摘できますか?

ありがとう

4

3 に答える 3

5

ライブラリを使用しないでくださいIEEE.STD_LOGIC_UNSIGNED.ALL

このライブラリは非推奨です ( VHDL FAQを参照)。代わりに使用ieee.numeric_std.allします。

于 2010-11-14T06:55:07.050 に答える
1

最後のポイントに答えるには、プログラミングとは考えないでください。HDL は「ハードウェア記述言語」の略です。あなたはハードウェアについて説明していますが、コードを書くときは常にそれを念頭に置いてください:)

また、STD_LOGIC_UNSIGNED を使用せず、代わりに NUMERIC_STD を使用することについても詳しく書いています。これが宿題であり、STD_LOGIC_UNSIGNED を使用するように教えられている場合、私は教育機関に絶望しています。それが理にかなってから何年も経ちました。

VHDL は厳密に型指定されているため、count が数値を表している場合 (そのような名前の場合は、: の方がよい)、signedまたはunsignedベクトル、または のいずれかを使用しますinteger。整数は、作成しない限りシミュレーションでラップアラウンドしません (整数が最大値にあるときに整数に 1 を追加すると、シミュレーターは終了します)。ベクトル型はそうです。1 つの動作が必要な場合もあれば、別の動作が必要な場合もあります。

最後に、私はこれに注意しました:

elsif (clk'event) and (clk='0') then

これは次のように書く方が良いです:

elsif falling_edge(clk) then

繰り返しますが、これは約10年か2年の間そうです。立ち下がりエッジを使用するつもりでしたか - 立ち上がりエッジがより一般的です。

于 2010-11-15T14:21:07.470 に答える
0

std_logic_vector を unsigned 値にキャストして追加できるようにする必要があります。その後、出力に割り当てることができるようにキャストし直します。

これは宿題のように見えるので、実装の正確な方法はあなたに任せます。

于 2010-11-13T23:16:29.703 に答える