精华内容
下载资源
问答
  • 设计、实现八位二进制数全加器 设计思路 总体设计三输入,两输出。具体:实体声明部分描述电路模块的端口,即指定输入输出口及其大小。设计具有8位位宽的矢量或总线端口信号a,b以及标准一位输入的cin。然后在...

    实验题目
    设计、实现八位二进制数全加器

    设计思路
    总体设计为三输入,两输出。具体:实体声明部分描述电路模块的端口,即指定输入输出口及其大小。设计具有8位位宽的矢量或总线端口信号a,b以及标准一位输入的cin。然后在结构体描述部分对电路模块的功能进行描述,指明整个电路时如何运作的:对3个二进制的9位矢量数进行加法运算输出到data。
    使用两个四位二进制加法器组成。

    功能设计
    实现八位二进制数加法,并保存可能存在的溢出值。

    波形图
    在这里插入图片描述
    源代码

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity ADD8 is
    	port (a,b : in std_logic_vector(7 downto 0);
    	count : out std_logic;
    cin : in std_logic;
    	dount : out std_logic_vector(7 downto 0) );
    end entity Add8;
    architecture bhv of add8 is
    signal data :std_logic_vector(8 downto 0);
    	begin
    	data <= ('0' & a) + ('0' & b) + ("00000000" & cin);
    	count <= data(8);
    	dount <= data(7 downto 0);
    end architecture bhv;
    

    实验题目
    设计、实现八位无符号二进制数乘法器

    设计思路
    八位乘法器由八位全加器以时序逻辑构成,通过逐项移位相加原理实现乘法。乘数的各位数码从被乘数的最低位开始依次相乘,每相乘一次得到部分积,若为此位的数码为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位,所有的部分积被加过一次可以得到相应的乘积。由于乘数的每一位不是0就是1,对应的部分积不是0就是和被乘数相等的部分积,所以实际作部分积相加这一步时,只要根据乘数的对应位判断,如过该位为1,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移1位。然后对乘法器的进行自顶而下设计,把乘法器的设计分成几个功能模块,进而逐步细化。该任务需了解各个模块的引脚含义以及内部构造,并对各个模块的实现功能进行分析,通过VHDL对这些模块进行编程,调试。最后在QuartusⅡ进行模拟仿真,得出正确的运行结果。

    功能设计
    本设计采用移位和加法来实现两个8位二进制数相乘,使用VHDL语言完成八位乘法器,以及如何做二进制位相乘的运算过程。该乘法器是由八位加法器构成八位乘法器,通过逐项移位相加来实现乘法功能,并以QuartusⅡ软件工具进行模拟。

    波形图
    在这里插入图片描述
    源代码:

    1.library ieee;                               //四位二进制并行加法器                   
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity add4 is
    port( cin:in std_logic;
          a,b:in std_logic_vector(3 downto 0);
            s:out std_logic_vector(3 downto 0);
           cout:out std_logic);
    end;
    architecture one of add4 is
      signal sint,aa,bb:std_logic_vector(4 downto 0);
    begin
             aa<='0' & a;
             bb<='0' & b;
         sint<=aa+bb+cin;
      s<=sint(3 downto 0);
    cout<=sint(4);
    end;
    
    2.library ieee;          //由两个加法器结合成八位加法器;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity add8 is
    port( cin:in std_logic;
          a,b:in std_logic_vector(7 downto 0);
            s:out std_logic_vector(7 downto 0);
           cout:out std_logic);
    end;
    architecture one of add8 is
    component add4                    //说明要调用的元件端口
    port( cin:in std_logic;
          a,b:in std_logic_vector(3 downto 0);
            s:out std_logic_vector(3 downto 0);
           cout:out std_logic);
    end component;
    signal carryout: std_logic;
    begin
           u1:add4 port map(cin,a(3 downto 0),b(3 downto 0),s(3 downto 0),carryout);
           u2:add4 port map(carryout,a(7 downto 4),b(7 downto 4),s(7 downto 4),cout);
    end;
    
    3.library ieee;                  //一位乘法器;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity andarith is
    port( abin:in std_logic;
          din:in std_logic_vector(7 downto 0);
            dout:out std_logic_vector(7 downto 0));
    end;
    architecture one of andarith is
    begin
      process(abin,din)
    begin
       for i in 0 to 7 loop
            dout(i)<=din(i) and abin;
             end loop;
      end process;
    end;
    
    4.library ieee;          //乘法运算控制器                 
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity arictl is
    port( clk,start:in std_logic;
           clkout,rstall,ariend:out std_logic);
    end;
    architecture one of arictl is
    signal cnt4b:std_logic_vector(3 downto 0);
    begin
    rstall<=start;
      process(clk,start)
    begin
      if start='1' then cnt4b<="0000";
           elsif clk'event and clk='1' then
               if cnt4b<8 then        //小于8:计数,等于8:表明乘法运算结束
                  cnt4b<=cnt4b+1;
           end if;
    end if;
    end process;
    process(clk,cnt4b,start)
        begin
              if start='0' then
                  if cnt4b<8  then
                     clkout<=clk;    ariend<='0';
                      else clkout<='0'; ariend<='1';
                  end if;
              else clkout<=clk; ariend<='0';
         end if;
           end process;
    end;
    
    5.library ieee;                            
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity reg16b is
    port( clk,clr:in std_logic;
          d:in std_logic_vector(8 downto 0);
           q:out std_logic_vector(15 downto 0));
    end;
    architecture one of reg16b is
    signal r16s:std_logic_vector(15 downto 0);
    begin
      process(clk,clr)
    begin
       if clr='1' then r16s<="0000000000000000";
        elsif clk'event and clk='1'  then
            r16s(6 downto 0)<=r16s(7 downto 1);
               r16s(15 downto 7)<=d;
       end if;
    end process;
       q<=r16s;
    end;
    
    6.library ieee;                         //8位右移寄存器:在时钟信号作用下,进行输入值的移位与锁存。           
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity sreg8b is
    port( clk,load:in std_logic;
          din:in std_logic_vector(7 downto 0);
           qb:out std_logic);
    end;
    architecture one of sreg8b is
    signal reg8:std_logic_vector(7 downto 0);
    begin
      process(clk,load)
    begin
        if clk'event and clk='1'  then
         if load='1' then reg8<=din;
          else reg8(6 downto 0)<=reg8(7 downto 1);
            end if;
         end if;
       end process;
      qb<=reg8(0);
    end;
    
    7.library ieee;               //8位乘法器顶层设计
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    entity mult8x8 is
    port( clk:in std_logic;
    start:in std_logic;
          a,b:in std_logic_vector(7 downto 0);
             dout:out std_logic_vector(15 downto 0);
          ariend:out std_logic);
    end;
    architecture struc of mult8x8 is 
    component add8 is
    port( cin:in std_logic;
          a,b:in std_logic_vector(7 downto 0);
            s:out std_logic_vector(7 downto 0);
           cout:out std_logic);
    end component;
    component andarith is
    port( abin:in std_logic;
          din:in std_logic_vector(7 downto 0);
            dout:out std_logic_vector(7 downto 0));
    end component;
    component arictl is
    port( clk,start:in std_logic;
           clkout,rstall,ariend:out std_logic);
    end component;
    component reg16b is
    port( clk,clr:in std_logic;
          d:in std_logic_vector(8 downto 0);
           q:out std_logic_vector(15 downto 0));
    end component;
    component sreg8b is
    port( clk,load:in std_logic;
          din:in std_logic_vector(7 downto 0);
           qb:out std_logic);
    end component;
    signal gndint  :std_logic;
    signal intclk  :std_logic;
    signal rstall  :std_logic;
    signal qb  :std_logic;
    signal andsd  :std_logic_vector(7 downto 0);
    signal  dtbin :std_logic_vector(8 downto 0);
    signal  dtbout :std_logic_vector(15 downto 0);
    begin 
        dout<=dtbout; gndint<='0';
    u1:arictl port map( clk,start,intclk,rstall,ariend);
    u2:sreg8b port map(intclk,rstall,b,qb);
    u3:andarith port map(qb,a,andsd);
    u4:add8 port map(gndint,dtbout(15 downto 8),andsd,dtbin(7 downto 0),dtbin(8));
    u5:reg16b port map(intclk,rstall,dtbin,dtbout);
    end;
    

    学习心得
    通过本次课外实验项目,我了解了如何使用QuartusⅡ软件、加深了对VHDL语言结构的认识以及如何设计加法乘法器。虽然途中出现了一些困难与问题,比如说运行波形图时结果出现毛刺,设置为功能仿真后又出现Error等等的问题。但是我还是在查询资料的过程中,通过对同一个工程下不同程序的连接,逻辑结构的梳理,对最后结果的测试验证等方面的学习,加深了对整个代码及软件的认识。。此外,在团队中,我们独立思考,互相分享经验和进步,这也改善了自己的各项能力。

    展开全文
  • 所以下面是学习啦小编给大家总结的八位二进制补码最小值和二进制补码知识点。八位二进制补码最小值8位二进制补码表示整数的最小值是 -128, 最大值是 +127.原因:正数的补码就是其本身,8位二进制最大正整数是 ...

    好吧,小编虽然上个C++语言和VB语言基础,虽然那个爱笑的从国外留学回来的老师讲课很好很精彩,但无奈小编跟不上呀。所以下面是学习啦小编给大家总结的八位二进制补码最小值和二进制补码知识点。

    八位二进制补码最小值

    8位二进制补码表示整数的最小值是 -128, 最大值是 +127.

    原因:正数的补码就是其本身,8位二进制最大正整数是 0111111,也就是十进制值 127。

    负数的补码是它原数的反码加1,最小值,就是负得最多的数,

    即二进制 1000 0000。十进制-128。

    推导: -128 =(-1)+(-127) = 原码 1000 0001+原码 1111 1111 =

    补码 1111 1111 + 补码 1000 0001 = 补码 1000 0000。

    什么是二进制的补码?

    注明:正数的补码与负数的补码一致,负数的补码符号位为1,这位1即是符号位也是数值位,然后加1

    补码借鉴的模概念,虽然理解起来有点晦涩难懂。可以跳过

    模的概念:把一个计量单位称之为模或模数。例如,时钟是以12进制进行计数循环的,即以12为模。

    在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射为+2。由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10和2对模12而言互为补数。同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为16),因此它的运算也是一种模运算。当计数器计满16位也就是65536个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,16位二进制数,它的模数为2^16=65536。在计算中,两个互补的数称为“补码”。比如一个有符号8位的数可以表示256个数据,最大数是0 1 1 1 1 1 1 1(+127),最小数1 0 0 0 0 0 0 0 (-128);那么第255个数据,加2和减254都是一样的效果得出的结果是第一个数据 ,所以2和254是一样的效果。对于255来说2和254是互补的数。

    求一个正数对应补码是一种数值的转换方法,要分二步完成:

    第一步,每一个二进制位都取相反值,即取得反码;0变成1,1变成0。比如,00001000的反码就是11110111。

    第二步,将上一步得到的反码加1。11110111就变成11111000。所以,00001000的二进制补码就是11111000。也就是说,-8在计算机(8位机)中就是用11111000表示。

    不知道你怎么看,反正我觉得很奇怪,为什么要采用这么麻烦的方式表示负数,更直觉的方式难道不好吗?

    二进制补码的好处

    首先,要明确一点。计算机内部用什么方式表示负数,其实是无所谓的。只要能够保持一一对应的关系,就可以用任意方式表示负数。所以,既然可以任意选择,那么理应选择一种用的爽直观方便的方式。

    二进制的补码就是最方便的方式。它的便利体现在,所有的加法运算可以使用同一种电路完成。

    还是以-8作为例子。假定有两种表示方法。一种是直觉表示法,即10001000;另一种是2的补码表示法,即11111000。请问哪一种表示法在加法运算中更方便?随便写一个计算式,16 + (-8) = ?16的二进制表示是 00010000,所以用直觉表示法,加法就要写成:

    00010000

    +10001000原码形式-8

    ---------

    10011000

    可以看到,如果按照正常的加法规则,就会得到10011000的结果,转成十进制就是-24。显然,这是错误的答案。也就是说,在这种情况下,正常的加法规则不适用于正数与负数的加法,因此必须制定两套运算规则,一套用于正数加正数,还有一套用于正数加负数。从电路上说,就是必须为加法运算做两种电路。所以用原码表示负数是不行的。

    现在,再来看二进制的补码表示法。

    00010000

    +11111000补码形式-8

    ---------

    100001000

    可以看到,按照正常的加法规则,得到的结果是100001000。注意,这是一个9位的二进制数。我们已经假定这是一台8位机,因此最高的第9位是一个溢出位,会被自动舍去。所以,结果就变成了00001000,转成十进制正好是8,也就是16 + (-8) 的正确答案。这说明了,2的补码表示法可以将加法运算规则,扩展到整个整数集,从而用一套电路就可以实现全部整数的加法。(特别说明,有部分素材来自博主JQ_AK47)

    展开全文
  • 八位二进制就是8个按顺序排列的二进制数。例如:11111000,00000001,00000101等。进制(binary)在数学和数字电路中指以2基数的记数系统,以2基数代表系统是二进位制的。这一系统中,通常用两个不同的符号0(代表...

    八位二进制就是8个按顺序排列的二进制数。例如:11111000,00000001,00000101等。进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。

    这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示。数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(Bit,Binary digit的缩写)。

    f510b145300279f12c8a215d4b329dac.png

    扩展资料

    一个十进制数转换为二进制数要分整数部分和小数部分分别转换,最后再组合到一起 。

    整数部分采用 "除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。例:125。

    小数部分要使用“乘 2 取整法”。即用十进制的小数乘以 2 并取走结果的整数(必是 0 或 1),然后再用剩下的小数重复刚才的步骤,直到剩余的小数为 0 时停止,最后将每次得到的整数部分按先后顺序从左到右排列即得到所对应二进制小数。

    展开全文
  • 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数...

    问题描述

    给定n个十六进制正整数,输出它们对应的八进制数。

    输入格式

    输入的第一行为一个正整数n (1<=n<=10)。

    接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

    输出格式

    输出n行,每行为输入对应的八进制正整数。

    【注意】

    输入的十六进制数不会有前导0,比如012A。

    输出的八进制数也不能有前导0。

    样例输入

    2

    39

    123ABC

    样例输出

    71

    4435274

    【提示】

    先将十六进制数转换成某进制数,再由某进制数转换成八进制。
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    int reward(char str[]);
    int n;
    long long str1[1000];
    char a[100000];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
    scanf("%s",a);
    str1[i]=reward(a);
    }
    for(int i=0;i<n;i++){
    printf("%d",str1[i]);
    printf("\n");//输出转换完成的数
    }
    return 0;
    }
    int reward(char str[])//转换函数
    {
    long long num=0;
    long long sum=0;
    int n=1;
    long long m;
    m=strlen(str);
    for(int i=m-1;i>=0;i–){
    if (i<m-1)
    n=n*16;
    if(str1[i]>=‘A’)
    sum=sum+((int)str[i]-55)n;
    else
    sum=sum+((int)str[i]-‘0’)n;//十六进制转换十进制
    }
    int i=1;
    while(sum>0){
    num=num+sum%8
    i;
    sum=sum/8;
    i=i
    10;//十进制转换八进制
    }
    return num;
    }

    QIWEI
    输入位数大于八位就会输出0,小于八位数是输出正常,请大神们帮我看一下哪里出错了?谢谢Thanks♪(・ω・)ノ```

    展开全文
  • //根据Value中的十进制数,返回一个存有二进制每一位的数组 function ten_two(c_Value){  var two=parseInt(c_Value).toString(2);  var Point=[];  if(two.length<8){  for(var j=0;j<(8-two.length...
  • 二进制为何用八位来表示?

    千次阅读 2019-02-21 16:49:02
    八位(8bit)是一个字节,计算机中...八位二进制数最大值就是255,刚好表示255个ASCII字符。 我们汉字使用的是unicode编码的,unicode编码要用两个字节,所以要存放16位二进制数才能代表一个unicode字符。 另外还...
  • 为什么八位二进制数表示范围为-128~+127? 在昨天的文章中我们讲解了什么原码反码补码,以及计算机中为什么要使用补码,在文章最后的时候我们说了一个问题,八位二进制(在Java中就是byte类型)的取值范围是从-128到...
  • (本文转自曲行客作者:...首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果表示无符号整数可以表示0
  • Java将十进制转换8位二进制(Java convert from decimal to 8-bit binary)我写了简单的java代码来从十进制转换8位二进制:抱歉这个愚蠢的问题1 int dec=1;2 String result="";3 String reverse = "";4 while(dec!...
  • 八位二进制数能表示数的范围以及...如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0代表正数,1代表负数,后面7位数值域,这就是原码定义。这样在现实生活中完全没有问题,但在计算机中就出现...
  • 八位二进制转化十进制

    千次阅读 2020-07-28 11:01:27
    二进制转化十进制数 用字符型接收二进制的0、1然后判断是否‘1’ 功能实现 代码片. #include<iostream> using namespace std; double powe(double x, int n); int main() { int su = 0; char a; for ...
  • 八位二进制乘法器.zip

    2020-11-02 21:16:21
    用移位相加的方法设计一个8位二进制串行乘法器。基于EP4CE1022C8芯片,于Quartus Ⅱ 13.1中实现。包含仿真文件,上板子验证成功。此西电EDA课设大作业,实验报告见博客,仅供参考。
  • 八位二进制数转化十进制数输出 分析:将二进制转化十进制,只要将二进制数的每一位乘以该位的权然后相加 */ #include "iostream" using namespace std; //计算x的n次方 double power(double x,int n); int...
  • 二进制代码语言定义:机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义,例如某台计算机字长16位,即有16个二进制数组成...
  • 首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果表示无符号整数可以表示0~255。计算方法就是二进制与十进制之间的转换。 如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0...
  • 初学者,文件过程:先设计一位的加法计数,再一个个进位达成八位二进制加法,若要改成十进制的只需要修改加法部分语言将二进制改成十进制即可
  • 八位二进制转三位十进制电路multisim源文件,十进制数字用数码管显示,multisim13及以上版本的软件可以正常打开仿真。
  • 计算机对带符号数的表示有三种方法:原码、反码和补码。... 10000000-11111111表示-128到-1, 00000000-01111111表示0-127 补码的1111 1111转换成原码就是1000 0001,也就是-1,补码就是二进制表...
  • 八位二进制为什么表示范围是:-128~~+127? 计算机对带符号数的表示有三种方法:原码、反码和补码 8位原码和反码能够表示数的范围是-127~127 8位补码能够表示数的范围是 -128~127 所以既然范围是-128~127,那...
  • 八位二进制转bcd码

    2011-07-17 15:20:35
    用multisim11来实现八位二进制对bcd码得转换。其中包含了multisim实验电路图,可进行仿真看结果。
  • 本文主要给出VHDL八位二进制数减法器不带符号和带符号的两个程序。
  • 八位二进制的十进制整数范围

    千次阅读 2019-02-20 20:10:18
    八位二进制从 0000 0000 开头是0,正数,所对应的十进制0 0000 0001 正数,所对应的十进制1 0000 0002 正数,所对应的十进制2 . . . 到 0111 1111 正数,所对应的十进制127 1000 0000 开头是0,...
  • 计算机对带符号数的表示有三种方法:原码、反码和补码。... 10000000-11111111表示-128到-1, 00000000-01111111表示0-127 补码的1111 1111转换成原码就是1000 0001,也就是-1,补码就是二进制表示负数的
  • 八位二进制乘法器VHDL

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,114
精华内容 9,245
关键字:

二进制为什么是八位