首页>>论坛 >>技术社区 >>OpenHW社区论坛 >>System Generator及DSP算法
|
我要发帖  | 我要投票  | 我要回复  | 收藏
1

带累加器的串行加法器

版主: Terry_ni  玄剑  kk_Edward  XUPteam 
带累加器的串行加法器
 
 

原理

       在这一节中,我们设计一个带累加器的串行加法器的控制电路。如图 1。 
 

带累加器的串行加法器

图 1 带累加器的串行加法器

       两个移位寄存器用来保存要相加的4位数字X和Y。X寄存器当作一个累加器来用,而Y寄存器当作一个加数寄存器来用。当加法完成之后,X寄存器的内容被X和Y的和代替。而加数寄存器被连接成一个循环移位的寄存器,使得四次移位之后,它又回到初始状态,因而数字Y的值没有丢失。这里,全加器是组合电路,在传输延迟之后,进位和两个数的和分别出现在全加器的输出。加法器的控制电路必须设计成:当接收到一个开始信号之后,控制电路会输出四个移位,然后停止。

       补充:这里的带累加器的串行加法器,是一个典型的串行处理单元,它的特点是:每个时钟周期处理一位数据。典型的串行处理单元如图 2,它具有两个移位寄存器;两个移位寄存器的输出被输入一个组合逻辑网络中,产生至少一位输出;该输出位被反馈给某一个移位寄存器的输入。当时钟有效沿再出现的时候,这一位被存入移位寄存器的第一位。

 

  典型串行处理单元
图 2 典型串行处理单元

<1-2待续>

[最后修改于2007-11-26 09:27]
 
相关主题
当校车来到:A大家都不挤队,每个人都得3分;B 你不去挤,人家去挤,那么你得0分别人得5分;C. 大家都挤,大家都得1分
回复 链接 收藏
 
RE:带累加器的串行加法器
 
不错
 
一个人之所以快乐,不是因为他得到的多,而是因为他计较的少
回复 链接 收藏
 
回复:带累加器的串行加法器
 

串行加法器的VHDL代码

       描述4位串行加法器的状态转移图,如 3。电路保持在S0状态直到接收到开始信号(St=1),然后电路输出En=1并且转入S1状态。然后在连续的时钟周期内,输入另外的三个En=1信号。图中的短划线说明,一旦进入了S1状态,电路将继续运行不管St的值是什么。

状态转换图
3 状态转换图

       具体的实现代码,参考下文,这里全加器的进位存储在触发器中,同时寄存器在时钟的下降沿进行移位。

----------------------------------------------------------------------------------

-- Company:

-- Engineer:

--

-- Create Date:    09:45:07 11/18/2007

-- Design Name:

-- Module Name:    serial - Behavioral

-- Project Name:

-- Target Devices:

-- Tool versions:

-- Description:

--

-- Dependencies:

--

-- Revision:

-- Revision 0.01 - File Created

-- Additional Comments:

--

----------------------------------------------------------------------------------

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

 

---- Uncomment the following library declaration if instantiating

---- any Xilinx primitives in this code.

--library UNISIM;

--use UNISIM.VComponents.all;

 

entity serial is

       port(St: in std_logic;

              Clk:  in     std_logic;

              Xout:      out std_logic_vector(3 downto 0));

end serial;

 

architecture Behavioral of serial is

       signal X, Y: std_logic_vector(3 downto 0);

       signal En: std_logic;

       signal Ci, Ciplus: std_logic;

       signal Sumi: std_logic;

       signal State, NextState: integer range 0 to 3;

      

       begin 

              Sumi <= X(0) xor Y(0) xor Ci;

              Ciplus <= (Ci and X(0)) or (Ci and Y(0)) or (X(0) and Y(0));

              Xout <= X;

             

              process(State, En)

                     begin

                            case State is

                                   when 0 =>

                                          if St ='1' then En <='1'; NextState <= 1;

                                          else En <= '0'; NextState <= 0; end if;

                                   when 1 => En <= '1'; NextState <= 2;

                                   when 2 => En <= '1'; NextState <= 3;

                                   when 3 => En <= '1'; NextState <= 0;

                            end case;

                     end process;

                    

              process (Clk)

                     begin

                            if (Clk' event and Clk = '0') then

                                   State <= NextState;

                                   if En = '1' then

                                          X <= Sumi & X(3 downto 1);

                                          Y <= Y(0) & Y(3 downto 1);

                                          Ci <= Ciplus;

                                   end if;

                            end if;

                     end process;

end Behavioral;

 

1给出了该串行加法器的资源使用状况。

      

1 资源使用状况

Device Utilization Summary

Logic UtilizationUsedAvailableUtilizationNote(s)
Number of Slice Flip Flops81,9201% 
Number of 4 input LUTs31,9201% 
Logic Distribution    
Number of occupied Slices79601% 
    Number of Slices containing only related logic77
 
当校车来到:A大家都不挤队,每个人都得3分;B 你不去挤,人家去挤,那么你得0分别人得5分;C. 大家都挤,大家都得1分
回复 链接 收藏
 
RE:带累加器的串行加法器
 
你好 我想问你一下 怎么看资源的使用状况
 
回复 链接 收藏
 
回复:带累加器的串行加法器
 
你好 我想请问你一下怎么看资源利用状况

 

回复第 3 楼 uoyna于2007-11-30 13:09:20发表:
 

串行加法器的VHDL代码

       描述4位串行加法器的状态转移图,如 3。电路保持在S0状态直到接收到开始信号(St=1),然后电路输出En=1并且转入S1状态。然后在连续的时钟周期内,输入另外的三个En=1信号。图中的短划线说明,一旦进入了S1状态,电路将继续运行不管St的值是什么。

 

状态转换图
3 状态转换图

       具体的实现代码,参考下文,这里全加器的进位存储在触发器中,同时寄存器在时钟的下降沿进行移位。

----------------------------------------------------------------------------------

-- Company:

-- Engineer:

--

-- Create Date:    09:45:07 11/18/2007

-- Design Name:

-- Module Name:    serial - Behavioral

-- Project Name:

-- Target Devices:

-- Tool versions:

-- Description:

--

-- Dependencies:

--

-- Revision:

-- Revision 0.01 - File Created

-- Additional Comments:

--

----------------------------------------------------------------------------------

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

 

---- Uncomment the following library declaration if instantiating

---- any Xilinx primitives in this code.

--library UNISIM;

--use UNISIM.VComponents.all;

 

entity serial is

       port(St: in std_logic;

              Clk:  in     std_logic;

              Xout:      out std_logic_vector(3 downto 0));

end serial;

 

architecture Behavioral of serial is

       signal X, Y: std_logic_vector(3 downto 0);

       signal En: std_logic;

       signal Ci, Ciplus: std_logic;

       signal Sumi: std_logic;

       signal State, NextState: integer range 0 to 3;

      

       begin 

              Sumi <= X(0) xor Y(0) xor Ci;

              Ciplus <= (Ci and X(0)) or (Ci and Y(0)) or (X(0) and Y(0));

              Xout <= X;

             

              process(State, En)

                     begin

                            case State is

                                   when 0 =>

                                          if St ='1' then En <='1'; NextState <= 1;

                                          else En <= '0'; NextState <= 0; end if;

                                   when 1 => En <= '1'; NextState <= 2;

                                   when 2 => En <= '1'; NextState <= 3;

                                   when 3 => En <= '1'; NextState <= 0;

                            end case;

                     end process;

                    

              process (Clk)

                     begin

                            if (Clk' event and Clk = '0') then

                                   State <= NextState;

                                   if En = '1' then

                                          X <= Sumi & X(3 downto 1);

                                          Y <= Y(0) & Y(3 downto 1);

                                          Ci <= Ciplus;

                                   end if;

                            end if;

                     end process;

end Behavioral;

 

1给出了该串行加法器的资源使用状况。

      

1 资源使用状况

Device Utilization Summary

Logic UtilizationUsedAvailableUtilizationNote(s)
Number of Slice Flip Flops81,9201% 
Number of 4 input LUTs31,9201% 
Logic Distribution    
Number of occupied Slices
 
回复 链接 收藏
 
我要发帖  | 我要投票  | 我要回复  | 收藏
1