構造モデリングを使用して 4 ビットの加算減算器を使用して 4 ビットのアップダウン カウンターを作成しようとしています。問題は、加算減算器の入力 (A) を合計と等しくなるように更新する必要があることです。これを修正しますが、シミュレーションで U が得られますが、a を等しい出力に設定することはできませんが、出力が A に等しいと書く必要がありました
また、シグナル s が 0 になるという警告が表示されます。アップ ダウン カウントを行うため、0 と 1 を変更する必要がありますが、テスト ベンチで値を設定しようとするとエラーが発生します。
私はこれを理解することができません、どんな助けも大歓迎です
シミュレーション エラー : ERROR:Xst:528 - ユニットのマルチ ソース オン シグナル >; この信号は複数のドライバーに接続されています。ERROR:Xst:528 - ユニットのマルチソース オン シグナル >; この信号は複数のドライバーに接続されています。ERROR:Xst:528 - ユニットのマルチソース オン シグナル >; この信号は複数のドライバーに接続されています。ERROR:Xst:528 - ユニットのマルチソース オン シグナル >; この信号は複数のドライブに接続されています
シミュレーションの警告: 入力は使用されません。このポートが最上位ブロックに属している場合、またはサブブロックに属しており、このサブブロックの階層が保持されている場合、このポートは保持され、未接続のままになります。WARNING:Xst:653 - シグナルは使用されていますが、割り当てられていません。このソースレス信号は自動的に値 0 に接続されます。
This is the counter code
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity upDown is
Port ( a: in STD_LOGIC_VECTOR(3 downto 0 );
b : in STD_LOGIC_VECTOR(3 downto 0 );
clk,reset,enable : in STD_LOGIC ;
o : out STD_LOGIC_VECTOR(3 downto 0 )
);
end upDown;
architecture Behavioral of upDown is
component addersub4bits is
Port ( a,b : in STD_LOGIC_VECTOR (3 downto 0);
y : out STD_LOGIC_VECTOR (3 downto 0);
s : in STD_LOGIC );
end component ;
signal s : STD_LOGIC ;
-- signal tmp2 : STD_LOGIC_VECTOR(3 downto 0) ;
signal outputsignal: STD_LOGIC_VECTOR(3 downto 0) ; --inside process
begin
ad : addersub4bits port map( a,"0001" ,outputsignal ,s) ;
process (clk,reset,enable)
begin
if(reset= '1' )
then outputsignal <= "0000";
elsif(clk' event and clk='1' ) then
if(enable ='1' ) then
outputsignal<=a ;
else
outputsignal<=outputsignal ; --zay mahowa
end if ;
end if ;
end process ;
--o <= tmp ;
o <=outputsignal ;
end Behavioral ;
加算減算器
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity addersub4bits is
Port ( a,b : in STD_LOGIC_VECTOR (3 downto 0);
y : out STD_LOGIC_VECTOR (3 downto 0);
s : in STD_LOGIC);
end addersub4bits;
architecture dataflow of addersub4bits is
begin
Process(a,b,s)
begin
if (s='1') then
y<= (a + b) ;
else
y<=(a-b) ;
end if ;
end process ;
end dataflow;
テストベンチ
-------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
ENTITY uD_testbench IS
END uD_testbench;
ARCHITECTURE behavior OF uD_testbench IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT upDown
PORT(
a : IN std_logic_vector(3 downto 0);
b : IN std_logic_vector(3 downto 0);
clk : IN std_logic;
reset : IN std_logic;
enable : IN std_logic;
o : OUT std_logic_vector(3 downto 0)
);
END COMPONENT;
--Inputs
signal a : std_logic_vector(3 downto 0) := (others => '0');
signal b : std_logic_vector(3 downto 0) := (others => '0');
signal clk : std_logic := '0';
signal reset : std_logic := '0';
signal enable : std_logic := '0';
--Outputs
signal o : std_logic_vector(3 downto 0);
-- Clock period definitions
constant clk_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: upDown PORT MAP (
a => a,
b => b,
clk => clk,
reset => reset,
enable => enable,
o => o
);
-- Clock process definitions
clk_process :process
begin
clk <= '0';
wait for 100 ns ;
clk <= '1';
wait for 100 ns ;
end process;
-- Stimulus process
stim_proc: process
begin
reset <= '1' ;enable <= '0' ; wait for 150 ns ;
reset <= '0'; wait for 300 ns ;
--enable <= '0' ; wait for 200 ns ;
enable <='1' ;wait ;
end process;
END;