精华内容
下载资源
问答
  • vhdl硬件设计语言 四输入表决器电路 二位二进制乘法器电路 一位二进制全减器等源代码及仿真波形 MAX plus II 仿真波形
  • 用74ls138实现2位二进制乘法器74LS138为3线-8线译码器,共有54/74S138和 54/74LS138两种线路结构型式,其工作原理如下:当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的...

    用74ls138实现2位二进制乘法器

    74LS138为3线-8线译码器,共有54/74S138和 54/74LS138两种线路结构型式,其工作原理如下:

    当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。利用 G1、/(G2A)和/(G2B)可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。

    c23c6adf04b860a4f6dd772cc81e3efd.png

    无论从逻辑图还是功能表我们都可以看到74LS138的八个输出引脚,任何时刻要么全为高电平1—芯片处于不工作状态,要么只有一个为低电平0,其余7个输出引脚全为高电平1。如果出现两个输出引脚同时为0的情况,说明该芯片已经损坏。

    使用74138和必要的门电路设计一个乘法器电路。能实现两位二进制数相乘,并输出结果。

    57ef577858e3a433c252a7e32acb11c9.png

    两位二进制数相乘真值表。设两个乘数是AB和CD,结果是F3F2F1F0

    9a6423d7fb3140390b61a1ebe31517ad.png

    写出最小项逻辑表达式:

    F3=m15

    F2=m10+m11+m14→F2=(m10’m11’m14’)’

    F1=m6+m7+m9+m11+m13+m14

    F0=m5+m7+m13+m15 。 (本文来源网友上传,如有侵权,可联系管理员删除)

    展开全文
  • quartus软件设计实现8位二进制乘法器电路

    万次阅读 多人点赞 2018-03-25 10:40:29
    一、选题目的1、学会使用quartus软件设计电路及对其进行仿真,设计实现8位二进制乘法器电路。2、学习并掌握8位二进制乘法器的原理、设计、分析和测试方法。二、设计目标采用移位相加的方法实现8位二进制乘法器电路。...

    一、选题目的

    1、学会使用quartus软件设计电路及对其进行仿真,设计实现8位二进制乘法器电路。

    2、学习并掌握8位二进制乘法器的原理、设计、分析和测试方法。

    二、设计目标

    采用移位相加的方法实现8位二进制乘法器电路。用户通过输入两个8位二进制数Y和B,八位乘法器可以实现其乘积,并输出结果。

    三、实现方案(包括原理框图和HDL设计流程图)

    该乘法器是由8位二进制加法器构成的以时序方式设计的乘法器,通过逐项移位相加原理来实现。用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。直到所有的部分积都被加过一次即可得到相应的乘积。

    在这里,我们用Y代表被乘数,B寄存器存放乘数N,A累加寄存器存放部分积,而A和B相级联又构成了一个16bit的移位寄存器,每次移位时A中最低位的数被移入B的最高位,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据,而寄存器A中保存的是运算积的高8位数据。

    由于乘数的每一位不是0就是1 ,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:如该位为1,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移位。

    移位相加的次数用一个时钟控制计数器来控制,由于第一个时间脉冲被用于A累加寄存器的置数,并无移位操作,故设计电路时采用了模为9的计数器来实现8位移位操作。当计数器计得9个数时,发出一个信号,使电路停止操作,并输出运算结果。

    两个n位二进制数相乘的结果最多可以有2n位的二进制数。

    例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)

    分别为11010101和10010011,其计算过程如下图(a):


    原理框图和简单流程图如下图(b)和图(c):


    四、设计过程

    1、模9计数器cnt9的设计

    模9计数器由时钟控制,开始时由异步置数端RST进行清置“1”操作。当RST为高电平且使能端EN为高电平时,每来一个时钟上升沿,计数器计一个数,直到内部变量Q计到“10”时,即在第九个上升沿时,输出端COUT输出1,变量Q回到初始值“1”。

    该模块元件的程序如下:

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    USEIEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY cnt9 IS

        PORT(CLK,RST,EN:IN STD_LOGIC;

                    COUT:OUTSTD_LOGIC);

    END cnt9;

    ARCHITECTURE behav OF cnt9IS

    BEGIN

    PROCESS(CLK,RST,EN)

       VARIABLE Q:STD_LOGIC_VECTOR(3 DOWNTO 0);

    BEGIN   

      IF RST='0' THEN Q:="0001";

          ELSIF CLK'EVENT AND CLK='1' THEN

                        IF EN='0'THEN

                                 IFQ<"1010" THEN Q:=Q+1;

                                 ELSE Q:="0001"; 

                                   END IF;

                                END IF;

      END IF;

     IF Q="1010"       THEN COUT<='1';

        ELSE COUT<='0';

     END IF;

    END PROCESS;

    END behav;

    2、具有使能端的d触发器dffen的设计

    D触发器由使能端EN控制,当EN为低电平时对输出端Q进行清零操作,当EN为高电平时将输入端D赋给输出端Q。

    该模块元件的程序如下:

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    USEIEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY dffen IS

        PORT(EN:IN STD_LOGIC;

                   D:INSTD_LOGIC_VECTOR(7 DOWNTO 0);

                   Q:OUTSTD_LOGIC_VECTOR(7 DOWNTO 0));

    END dffen;

    ARCHITECTURE behav OF dffenIS

    BEGIN

    PROCESS(D,EN)

    BEGIN   

       IF EN='0' THEN Q<=(OTHERS=>'0');

          ELSE  Q<=D;

       END IF; 

    END PROCESS;

    END behav;

    3、累加寄存器SHFTA的设计

    累加寄存器A虽然与寄存器B相级联构成16位移位寄存器,但就累加寄存器A本来而言并不是严格意义上的寄存器。SHFTA工作时先由清零端CLR高电平清零,之后每一个时钟上升沿置一次数,用于存放部分积的和。输出端DOUT为一个8位二进制数,其最高位存放右移值SR,在乘法器电路中SR存放部分积和的进位;其后7位存放部分积和的高7位,形成模拟的“移位”操作。输出端QB存放部分积的最低位,用于向B寄存器移位。

    该模块元件的程序如下:

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    USEIEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY SHFTA IS

        PORT(CLK,CLR,SR:IN STD_LOGIC;

                   DIN:INSTD_LOGIC_VECTOR(7 DOWNTO 0);

                   QB:OUTSTD_LOGIC;

                   DOUT:OUTSTD_LOGIC_VECTOR(7 DOWNTO 0));

    END SHFTA;

    ARCHITECTURE behav OF SHFTAIS

     SIGNAL REG8:STD_LOGIC_VECTOR(7 DOWNTO 0);

     SIGNAL Q:STD_LOGIC;

    BEGIN

     PROCESS(CLK,CLR)

     BEGIN 

             IF CLR='1' THENREG8<=(OTHERS=>'0');Q<='0';

                ELSIF CLK'EVENT ANDCLK='1' THEN

                   REG8<=DIN;Q<=SR;

                        END IF;  

          DOUT<=Q&REG8(7 DOWNTO 1);

    END PROCESS;

    QB<=REG8(0);

    ENDbehav;

    4、移位寄存器B的设计

    移位寄存器B工作时先由输入端LOAD高电平置数,置入乘数B,再由时钟脉冲上升沿控制移位操作,先把内部信号REG8的高7位赋给它的低7位,再把输入端SR接收到的值赋给REG8的最高位,即把A的最低位移入B中。为了在输出最后结果时,乘积的低8位和高8位能够正常的连接,输出端DOUT的设计也与A规则相同,输出最高位为SR,低7位为REG8高7位的8位二进制数,QB输出B的最低位,用于控制加法器中从取出的右移后的部分积的和是与0相加还是与被乘数相加。

    该模块元件的程序如下:

    LIBRARY IEEE;

    USEIEEE.STD_LOGIC_1164.ALL;

    USEIEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY SHFTB IS

        PORT(CLK,LOAD,SR:IN STD_LOGIC;

           DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

           QB:OUT STD_LOGIC;

           DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

    END SHFTB;

    ARCHITECTURE behav OF SHFTBIS

     SIGNAL REG8:STD_LOGIC_VECTOR(7 DOWNTO 0);

    BEGIN

     PROCESS(CLK,LOAD)

     BEGIN 

              IF LOAD='1' THENREG8<=DIN;

                ELSE IF CLK'EVENTAND CLK='1' THEN

                 REG8(6 DOWNTO0)<=REG8(7 DOWNTO 1);REG8(7)<=SR;

                       END IF;

               END IF;

    END PROCESS;

    QB<=REG8(0);

    DOUT<=SR&REG8(7DOWNTO 1);

    END behav;

    5、8位二进制乘法器的顶层设计

    其顶层电路图如图:


    如图所示,当异步输入端LOAD为高电平时,累加寄存器A清零,同时移位寄存器置乘数,之后每次时钟上升沿到来时,由B中数据最低位控制dffen的EN使能端,当EN为0时,输出0,当EN为1时,输出被乘数Y,由此可实现从A中取出的右移过的部分积的和是与0或被乘数Y相加的判断和选择,即实现了被乘数Y与0相乘或与1相乘的操作。B寄存器每次移位时,最高位置入的均为A中部分积的和的最低位,即实现A与B的级联移位操作。部分积的和移位8次完成时,即计数器计9次时间脉冲时,计数器的COUT端输出1到使能端EN,使计数器停止置数,同时控制乘积输出端的两个普通d触发器输出分别输出乘积的高8位和低8位。。

    五、遇到问题及解决方法

    1、一开始从电路尽可能简洁这方面考虑,想尽可能使用少一些的模块或者尽可能使用相同的模块简化电路设计,所以花了大量的时间试图让同一个移位寄存器模块实现累加器A和移位寄存器B的功能,但是由于A和B两寄存器工作原理很不相同,导致原理图连线反而更加复杂和逻辑错乱。

    解决方法:放弃用同一寄存器同时实现两个功能的想法,改而设计不同寄存器模块SHFTA和SHFTB分别实现累加寄存器A和移位寄存器B的功能。

    2、每一次进行累加操作时,部分积需要先移位,再与下一个部分积相加,而累加寄存器A每次时间脉冲到来时只实现置数操作,当我想改变程序实现累加寄存器A在同一时间上升沿既置数又移位时,却发现寄存器A根本不能工作,输出0。据分析,出现这种的原因在于在同一时间上升沿同时实现对同一个内部变量的操作会产生冲突,导致寄存器A不能正常工作。

    解决方法:放弃让累加寄存器进行移位操作,改用虚拟“移位”的方式,让8位二进制输出端DOUT的最高位置“右移输入端”SR的值,即将加法器的进位端置最高位,而后7位数据置内部变量REG8的前7位数,实现虚拟的“移位”操作。

    3、在进行乘法操作时,计数器cnt9从0计到9,理应在第九个时间脉冲时COUT输出1,控制输出端输出乘积,可是在进行仿真时我发现,COUT端在第八个时间脉冲到来时总要有一个窄脉冲出现(见最后一道波形),导致输出两次乘积。据分析,出现这种情况的原因在于计数器从7计到8,即从“0111”计到“1000”时,由于数据翻转出现延迟,会短暂的出现“1001”,导致计数器感应到“9”,从而COUT输出1,控制输出端输出乘积。

    其仿真波形如下:


    解决方法:改变计数器从0计到9的计数方式,使其从1计到10,即从“0001”计到“1010”,避免了由于翻转不及时导致的计数错误。

    六、实现结果

    输入 8位二进制数的乘数B和被乘数Y,该乘法器实现其乘积,并分高8位和低8位输出结果。

    仿真波形如下:


    如图所示,在第九个时间脉冲上升沿到来时,输出端h输出乘积的高8位,输出端l输出乘积的第8位。

    七、对该课程的实施意见及建议

    在程序设计和原理图设计的过程中,我通过对quartus的学习和使用,锻炼了自己的编程能力,也学会了如何在遇到错误的时候冷静分析原因,利用对中间量的观测对程序进行调试和改进,对EDA课程和HVDL语言的理解有了很大的提升。



    展开全文
  • 位二进制乘法器

    2017-05-12 15:34:34
  • 数字电路-四位二进制乘法器课程设计报告完整版!!可以直接用的。
  • 用VHDL语言做的4位二进制乘法器,编写用的是QuartusII软件。调用了寄存器,加法器,计数器。外加状态机,用原理图实现顶层的编写。
  • Based on verilog HDL language 4-bit binary multiplier design, its function is fast and reliable to achieve binary multiplication operation.
  • 简易两位二进制乘法器设计

    千次阅读 2018-09-23 14:33:06
    一、 设计原理: 1、基本公式: A1 A0 * B1 B0=Y3 Y2 Y1 Y0 ...3、归纳得出:由上式可归纳得出输出的4位二进制数与输入的两位二进制数之间的逻辑,得出下表: Y0 A0 B0 Y1 ...

    一、   设计原理:

    1、基本公式:   A1 A0 * B1 B0=Y3 Y2 Y1 Y0

    2、设计理念:  两位二进制数 A1 A0 和B1 B0 相乘后,结果最高为四位Y3 Y2 Y1 Y0

    简易两位二进制乘法器设计
     

    3、归纳得出:由上式可归纳得出输出的4位二进制数与输入的两位二进制数之间的逻辑,得出下表:

    Y0

    A0 B0

    Y1

    A1 B0  A0 B1

    Y2

    A1 B1  ( A1 B0 * A0 B1 )

    Y3

    A1 B1 * ( A1 B0 * A0 B1 )

      

     

     

     

     

    二、 Verilog模块描述:

    代码表:

    源代码:

    module multiply(A,B,Y);

    input[1:0] A,B;

    output[3:0] Y;

    and #1 u1(Y[0],A[0],B[0]);

    and #1 u2(sela,A[1],B[0]);

    and #1 u3(selb,A[0],B[1]);

    and #1 u4(selc,A[1],B[1]);

    and #1 u5(seld,sela,selb);

    xor #1 u6(Y[1],sela,selb);

    xor #1 u7(Y[2],seld,selc);

    and #1 u8(Y[3],seld,selc);

    endmodule

    测试文件:

    module multiply_t;

    reg[1:0]ain,bin;

    reg clock;

    wire[3:0]yout;

    initial

    begin

       ain=0;bin=0;clock=0;

    end

      always #50 clock=~clock;

    always@(posedge clock)

    begin

    ain={$random}%4;

    bin={$random}%4;

    end

    multiply m(.A(ain),.B(bin),.Y(yout));

    endmodule

    仿真图:

    简易两位二进制乘法器设计
     

    仿真图分析: 在  117ns时,ain=01,bin=11,yout=0011;

                     275ns时,ain=01,bin=01,yout=0001;

                     375ns时,ain=01,bin=10,yout=0010;

                     575ns时,ain=10,bin=01,yout=0010;

    分析可知  yout=ain*bin 式成立,此逻辑设计可行。

    三、 电路设计:

    由verilog逻辑代码可作出以下逻辑电路图:

    简易两位二进制乘法器设计

     Multisim电路连接图:

     简易两位二进制乘法器设计

     

    逻辑仿真图:

    简易两位二进制乘法器设计

    (仿真先自上到下依次为 A1 A0 B1 B0 Y3 Y2 Y1 Y0)

    由仿真图分析:8ms时     A1A0*B1B0=11*00=0000

                  14.4ms时  A1A0*B1B0=11*10=0110

                  20.8ms时  A1A0*B1B0=01*10=0010

                  24ms时    A1A0*B1B0=00*00=0000

    由仿真图分析可得出此两位二进制乘法器电路设计可行。

    (以下电路图及版图均为手绘图,不考虑尺寸宽长比)

     简易两位二进制乘法器设计
     

    简易两位二进制乘法器设计
     

    展开全文
  • 74LS138译码器实现2位二进制乘法器-QuartusII 软件仿真 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录74LS138译码器实现2位二进制乘法器-QuartusII 软件仿真一、74LS138译码器介绍二...

    一、74LS138译码器介绍

    74LS138是3-8译码器,一共有3个地址输入端,即C、B、A(A为低位),3个选通输入端G1、G2AN、G2BN,以及8个译码输出端Y0N、Y1N、Y2N、…、Y7N。译码输出为低电平有效。通过地址输入端可以控制相应的输出端子为低电平有效,完成地址的译码输出。

    二、真值表和逻辑表达式构建

    逻辑定义:输入端为B1、B0、A1、A0,分别代表第一个数的高位和低位,第二个数的高位和低位;输出用Y3、Y2、Y1、Y0表示,分别连接对应的LED灯,如果LED点亮(逻辑输出1)则表示该处输出位计算结果为1,否则为0,最后输出Y3、Y2、Y1、Y0顺序组合则代表最终计算结果。

    以下是真值表和逻辑表达式:
    在这里插入图片描述

    `

    三、原理图设计及实验仿真

    包括:仿真波形截图、仿真结果表(代替测试表格)
    在这里插入图片描述
    在这里插入图片描述
    仿真结果表:
    在这里插入图片描述


    四、总结用译码器设计组合逻辑电路的方法

    使用编码器设计电路有以下流程:

    1. 分析题意,将要求转化成逻辑实现功能,同时进行逻辑定义

    2. 根据功能实现列出真值表,根据真值表列写逻辑表达式

    3. 根据表达式变量选择合适的译码器,确定使用译码器的数量、型号等

    4. 选好地址端和数据输入端,结合简单逻辑门器件完成电路设计

    5. 使用Quartus进行初步的逻辑波形仿真,检验仿真效果和功能

    6. 对电路进一步优化,包括方案思路、电路元器件选择、排线走线等等
      7)对电路方案进行评价

    展开全文
  • ## 线上实验五:2个2位二进制乘法器

    千次阅读 2020-08-05 19:22:48
    线上实验五:2个2位二进制乘法器 一、实验目的 设计一个乘法器, 实现两个四位二进制数的乘法。 两个二进制数分别是被乘数 AB和乘数CD。被乘数和乘数这两个二进制数分别由高低电平给出。 乘法运算的结果即乘积由一...
  • 八位二进制乘法器VHDL

    千次阅读 2020-11-02 21:56:08
    八位二进制乘法器VHDL工程文件一、 实验目的二、设计要求三、实验仪器与环境四、实现原理五、系统设计及仿真六、顶层设计:七、结果仿真:附录: 工程文件 点击下载八位二进制乘法器工程文件 一、 实验目的 熟习...
  • 八位二进制乘法器.zip

    2020-11-02 22:10:22
    用移位相加的方法设计一个8位二进制串行乘法器。基于EP4CE1022C8芯片,于Quartus Ⅱ 13.1中实现。包含仿真文件,上板子验证成功。此为西电EDA课设大作业,实验报告见博客,仅供参考。
  • 1、 分别用for语句和repeat语句两种方法实现8位二进制乘法器; 2、 提交乘法器程序和测试程序,观测仿真波形,并对仿真波形做分析,说明设计的正确性。 二、实验过程及结果: 1、for语句实现8位二进制乘法器 module ...
  • 使用vhdl实现四位二进制数值的相乘 vhd文件可以使用文本文档打开
  • **规则:**两个r为二进制数相乘时,乘积为2r;乘数的第i(i为1、2…)为0时,第i的部分积为0;第i为1时,第i的部分积时被乘数。 (2)原始乘法算法过程 (3)改进算法过程 ASM图规则: a.在ASM图的起始点...
  • module mul(ina,inb,out); output[7:0] out; input[3:0] ina,inb; reg[7:0] out,temp,ci; integer i,j; always @(ina,inb) ...请教上面这个4位乘法器是如何实现的,小弟刚接触verilog,看不太懂。。。
  •   在嵌入式环境中虽然有乘法运算,而且芯片运算速度越来越快,但运算还是最快速的,为了提高计算效率,可以将乘法运算使用运算替换。 原理   乘法可以用按运算的基本原理,分两步 因式分解: A * (B + ...
  • 组成原理 课程设计报告 四位二进制加法器 乘法器
  • 想实现一个最基本的z = x*y的乘法器,并看看其电路内部逻辑是怎么形成的。因为我们都知道数电中多bit数据是由多个单bit数据并行组成,因此提出一个问题: 多bit数据是怎么相乘的?或者说相乘时他们是如何变化的?...
  • 组成原理用VHDL 实现四加法器乘法器完整论文
  • 本实验借助于FPGA设计一个通用的4位乘法器,开发软件为Xilinx的ISE10。还需要安装第三方仿真软件,如ModelSim等,选用芯为Spartan2。通过对乘法器的设计明白FPGA开发的优越性和整个FPGA的开发流程。
  • 在搭建乘法器,验证波形时,多比特二进制数手算比较麻烦,所以导入matlab计算正确的输出结果。 此时要注意乘法器的特性,举个例子吧 5 × 5 = 25 也就是4‘b0101(+5) * 4’b0101(+5) = 0011001(+25) 那 -5 × 5 = -...
  • 二进制乘法器是数字电路的一种元件,它可以将两个二进制数相乘,乘法器是由更基本的加法器组成。----------维基百科 一、两个二进制数相乘原理 举例:,实现相乘过程如下: 图1 两个二进制数相乘过程 由图...
  • 实验题目 设计、实现八位二进制数全加器 设计思路 ...使用两个四位二进制加法组成。 功能设计 实现八位二进制数加法,并保存可能存在的溢出值。 波形图 源代码 library ieee; use ieee.std_logic_11
  • 可以实现2位二进制乘法器,该电路的输入接收2个2位二进制

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 303
精华内容 121
关键字:

二位二进制乘法器