8-битный последовательный сумматор с аккумулятором

Я пишу код VHDL для реализации 8-битного последовательного сумматора с аккумулятором. Когда я делаю симуляцию, на выходе всегда нули! И иногда он дает мне тот же номер, но со сдвигом! Я не знаю, в чем проблема, я пытался поставить A, B как inout, но это тоже не сработало. Кто-нибудь может помочь, пожалуйста.

Это код:

entity SA is

Port ( st : in std_logic;
        A,B: inout std_logic_vector ( 7 downto 0);
       clk : in std_logic;
       acc : out bit_vector(7 downto 0)); end SA; 
architecture Behavioral of SA is

 signal ps,ns: integer range 0 to 7;

signal C,D: bit_vector (7 downto 0);


signal ci,ciplus,si,sh:bit;

begin

 si<=A(0) xor B(0) xor ci ;
 ciplus <=(A(0) and B(0)) or (A(0) and ci ) or ( B(0) and ci );


   process(ps,st)
   begin
  case ps  is
  when 0=> if(st='0')then 
      ns<=0;
      else
       ns<=1;
       sh<='1';
       end if;
       when 1 to 6 => sh<='1';
       ns<= ps+1;
        when 7=> sh<='1';
        ns <=0;
        end case;
        end process;


        process(clk)
        begin
        if(clk 'event and clk ='1')then
             ps <= ns;
        ci<= ciplus;
                end if;
        if(sh='1') then 
        C<=si & A(7 downto 1) ;
         D<=B(0) & B(7 downto 1);
        end if;

        end process;

        acc<= C;

        end Behavioral;

`


person user3119621    schedule 19.12.2013    source источник
comment
Пожалуйста, очистите свой код с правильным отступом.   -  person zennehoy    schedule 19.12.2013


Ответы (2)


Ваш второй процесс написан неправильно. Прежде чем писать процесс, вы всегда должны решить, является ли процесс последовательным или комбинаторным, а затем соответствующим образом написать процесс.

Чтобы помочь вам написать свой код, особенно когда вы начинаете с языков описания оборудования, всегда сначала рисуйте блок-схему, а затем описывайте ее с помощью VHDL.

Как есть, ваш второй процесс:

  1. Смешивает комбинаторную и последовательную логику.
  2. Отсутствуют сигналы в списке чувствительности процесса.
  3. Создает защелку, поскольку C и D не назначены на всех путях процесса.

Ваш первый процесс имеет аналогичные проблемы.

person zennehoy    schedule 19.12.2013

попробуйте инициализировать ps и ns, посмотрите, поможет ли это. Я сейчас на своем телефоне, поэтому я не могу смоделировать, чтобы помочь, но обычно мои проблемы в дизайне VHDL представляют собой неинициализированные целые числа.

signal ps,ns: integer range 0 to 7:=0;

вы можете проверить свой список предупреждений, посмотреть, поможет ли это

person Wissam Y. Khalil    schedule 19.12.2013
comment
В VHDL сигналы (и переменные) всегда инициализируются крайним левым значением в своем диапазоне, поэтому :=0 в этом случае не требуется, поскольку `0 уже является самым левым элементом. - person Martin Thompson; 21.12.2013