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 (?ip-?ops). 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;
时间: 2024-10-10 23:15:20

VHDL之Serial-Parallel Multiplier的相关文章

[转]JVM系列二:GC策略&amp;内存申请、对象衰老

原文地址:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037056.html JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young genera

深入JVM系列(二)之GC机制、收集器与GC调优(转)

一.回顾JVM内存分配 需要了解更多内存模式与内存分配的,请看 深入JVM系列(一)之内存模型与内存分配 1.1.内存分配: 1.对象优先在EDEN分配2.大对象直接进入老年代 3.长期存活的对象将进入老年代 4.适龄对象也可能进入老年代:动态对象年龄判断 动态对象年龄判断: 虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold才能晋升到老年代,当Survivor空间的相同年龄的所有对象大小总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代

Java Garbage Collection/垃圾收集

Java 的垃圾收集有各种各样的策略,默认的策略也会经常的改变. --比如到底是 serial , parallel, CMS; 具体到 Minor 怎么样,Old 又怎么样? 命令 java -XX:+PrintFlagsFinal -version ,提供帮助: bool UseParNewGC = false {product} bool UseParallelGC = false {product} bool UseParallelOldGC = false {product} bool

关于垃圾回收被误解的7件事

转自:http://www.importnew.com/15796.html 对Java垃圾回收最大的误解是什么?它实际又是什么样的呢? 当我还是小孩的时候,父母常说如果你不好好学习,就只能去扫大街了.但他们不知道的是,清理垃圾实际上是很棒的一件事.可能这也是即使在Java的世界中, 同样有很多开发者对GC算法产生误解的原因——包括它们怎样工作.GC是如何影响程序运行和你能对它做些什么.因此我们找到了Java性能调优专家Haim Yadid,并把名为Java performance tuning

数据并行(Data Parallelism)

数据并行,不同的数据输入以并行方式运行同一个函数,它把一个任务分解成不连续的单元,因此,可以在单独的线程上并行处理,保证这个任务可以在可用的处理之间进行分配. 通常是处理数据集合,这种方法利用了集合中的项目自然提供了任务分配.最简单的情况,是一个并行的映射函数,对集合的中每一项应用一个转换,结果形成一个新的集合.这种简单的情况通常是可以工作的,是因为集合中的每一项通常可按任意顺序.进行单独处理:用这种处理更复杂的情况,比如汇总列表中所有项,也是可能的:然而,对于一些更复杂的情况,以及必须按顺序处

Java GC - 垃圾回收机制

1.简介 对于Java developer来说,了解JVM GC工作原理能够帮助我们开发出更优秀的应用,同时在处理JVM瓶颈时能够更加自由.在最近一年的应用开发中能体会到这些知识带来的好处,并且让我们的应用在较大规模的并发时能够良好的工作. 本文部分知识和图片来源于书籍<Java Performance> - Charlie Hunt & Binu John 著,该书全面讲解了Java 应用的性能分析.优化点与JVM原理等知识,本文(以及稍候的一些文章)只包含 GC collector

JVM系列二:GC策略&amp;内存申请、对象衰老

JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young generation,tenured generation和permanet generation.绝大部分的objec被分配在young gener

命令拷屏之硬件信息

dmesg cat /proc/cpuinfo,/proc/meminfo,/proc/bus/usb/devices lspci,lsusb,lshal dmidecode [[email protected] ~]# dmesg |wc -l 1079 [[email protected] ~]# dmesg |grep cpu powernow-k8: Found 4 AMD Opteron(TM) Processor 6212 processors (16 cpu cores) (ver

GC 算法(实现篇) - GC参考手册

您应该已经阅读了前面的章节: 垃圾收集简介 - GC参考手册 Java中的垃圾收集 - GC参考手册 GC 算法(基础篇) - GC参考手册 学习了GC算法的相关概念之后, 我们将介绍在JVM中这些算法的具体实现.首先要记住的是, 大多数JVM都需要使用两种不同的GC算法 -- 一种用来清理年轻代, 另一种用来清理老年代. 我们可以选择JVM内置的各种算法.如果不通过参数明确指定垃圾收集算法, 则会使用宿主平台的默认实现.本章会详细介绍各种算法的实现原理. 下面是关于Java 8中各种组合的垃圾

devices-list

转自:https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt LINUX ALLOCATED DEVICES (2.6+ version) Maintained by Torben Mathiasen <[email protected]> Last revised: 25 January 2005 This list is the Linux Device List, the official regi