zoukankan      html  css  js  c++  java
  • VHDL之Serial-Parallel Multiplier

    1  Serial-parallel multiplier

      Figure 12.1 shows the RTL diagram of a serial-parallel multiplier. One of the input vectors (a) is applied serially to the circuit (one bit at a time, starting from the LSB), while the other (b) is applied in parallel (all bits simultaneously). Say that a has M bits, while b has N. Then, after all M bits of a have been presented to the system, a string of M ‘0’s must follow, in order to complete the (M þ N)-bit output product.

      

      This system is pipelined, and is constructed using AND gates, full-adder units, plus registers (flip-flops). Each unit of the pipeline (except the leftmost one) requires one adder and two registers, plus an AND gate to compute one of the inputs. Thus for an M x N multiplier, O(N) of such units are required.

    2  VHDL

      1) and_2.vhd

     1 library IEEE;
     2 use ieee.std_logic_1164.all;
     3 
     4 entity and_2 is
     5 port
     6 (
     7     a, b:    in    std_logic;
     8     y:        out    std_logic
     9 );
    10 end and_2;
    11 
    12 architecture sim of and_2 is
    13 begin
    14     y    <=    a and b;
    15 
    16 end sim;

      2) reg.vhd

     1 library IEEE;
     2 use ieee.std_logic_1164.all;
     3 
     4 entity reg is 
     5 port
     6 (
     7     d, clk, rst:    in    std_logic;
     8     q:                out std_logic
     9 );
    10 end reg;
    11 
    12 architecture sim of reg is 
    13 begin
    14     process(clk, rst)
    15     begin    
    16         if (rst = '1') then q <= '0';
    17         elsif (clk'event and clk = '1') then q <= d;
    18         end if;
    19     end process;
    20     
    21 end sim;

      3) fau.vhd

     1 library IEEE;
     2 use ieee.std_logic_1164.all;
     3 
     4 entity fau is 
     5 port
     6 (
     7     a, b, cin:    in    std_logic;
     8     s, cout:    out    std_logic
     9 );
    10 end fau;
    11 
    12 architecture sim of fau is 
    13 begin
    14     s <= a xor b xor cin;
    15     cout <= (a and b) or (a and cin) or (b and cin);
    16 
    17 end sim;    

      4)  pipe

     1 library IEEE;
     2 use ieee.std_logic_1164.all;
     3 
     4 library work;
     5 use work.my_components.all;
     6 
     7 entity pipe is 
     8 port
     9 (
    10     a, b, clk, rst: in    std_logic;
    11     q:                out    std_logic
    12 );
    13 end pipe;
    14 
    15 architecture sim of pipe is 
    16     signal s, cin, cout: std_logic;
    17 begin
    18     U1: component fau port map(a, b, cin, s, cout);
    19     U2: component reg port map(cout, clk, rst, cin);
    20     U3: component reg port map(s, clk, rst, q);
    21 end sim;

      5) my_components.vhd

     1 library IEEE;
     2 use ieee.std_logic_1164.all;
     3 
     4 package my_components is
     5 
     6 component and_2 is 
     7 port
     8 (
     9     a, b:    in    std_logic;
    10     y:        out    std_logic
    11 );
    12 end component;
    13 
    14 component fau is 
    15 port
    16 (
    17     a, b, cin:    in    std_logic;
    18     s, cout:    out std_logic
    19 );
    20 end component;
    21 
    22 component reg is 
    23 port
    24 (
    25     d, clk, rst:    in    std_logic;
    26     q:                out    std_logic
    27 );
    28 end component;
    29 
    30 component pipe is 
    31 port
    32 (
    33     a, b, clk, rst:    in    std_logic;
    34     q:                out std_logic
    35 );
    36 end component;
    37 
    38 end my_components;

      6) multiplier.vhd

     1 library IEEE;
     2 use ieee.std_logic_1164.all;
     3 
     4 library work;
     5 use work.my_components.all;
     6 
     7 entity multiplier is 
     8 port
     9 (
    10     a, clk, rst:    in    std_logic;
    11     b:                in    std_logic_vector(3 downto 0);
    12     prod:            out std_logic
    13 );
    14 end multiplier;
    15 
    16 architecture sim of multiplier is 
    17     signal and_out, reg_out: std_logic_vector(3 downto 0);
    18 begin
    19     U1: component and_2 port map(a, b(3), and_out(3));
    20     U2:    component and_2 port map(a, b(2), and_out(2));
    21     U3: component and_2 port map(a, b(1), and_out(1));
    22     U4: component and_2 port map(a, b(0), and_out(0));
    23     U5: component reg port map(and_out(3), clk, rst, reg_out(3));
    24     U6: component pipe port map(and_out(2), reg_out(3), clk, rst, reg_out(2));
    25     U7: component pipe port map(and_out(1), reg_out(2), clk, rst, reg_out(1));
    26     U8: component pipe port map(and_out(0), reg_out(1), clk, rst, reg_out(0));
    27     
    28     prod <= reg_out(0);
    29     
    30 end sim;
  • 相关阅读:
    CSS3 3D转换
    CSS3 2D转换
    CSS3 字体
    CSS3 文本效果
    Spring核心技术(十三)——环境的抽象
    表达式求值
    一些设计上的原则
    POJ2503字典树
    MBR结构解析与fdisk的bash实现
    微服务指南走北(三):Restful API 设计简述
  • 原文地址:https://www.cnblogs.com/mengdie/p/4634586.html
Copyright © 2011-2022 走看看