带累加器的8位串行加法器

时间:2013-12-19 15:06:59

标签: vhdl xilinx

我正在编写一个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;

`

2 个答案:

答案 0 :(得分:1)

您的第二个流程写错了。在编写流程之前,您应始终确定流程是顺序流程还是组合流程,然后相应地编写流程。

为了帮助您编写代码,特别是在开始使用硬件描述语言时,请始终首先绘制一个框图,然后使用VHDL描述该框图。

实际上,你的第二个过程是:

  1. 混合组合逻辑和顺序逻辑。
  2. 过程敏感度列表中缺少信号。
  3. 生成一个锁存器,因为C和D未在整个过程的所有路径中分配。
  4. 你的第一个过程有类似的问题。

答案 1 :(得分:0)

尝试初始化ps和ns看看我是不是现在在我的手机上的技巧所以我无法模拟帮助但是通常我在VHDL设计中的问题是形式未经整数的整数

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

您可能需要查看警告列表,看看是否有帮助