16位的奇偶校验器设计

16位的奇偶校验器设计
16位的奇偶校验器设计

课程设计报告

学生姓名学号

班级电子信息工程

院系信院电子系

题目16位的奇偶校验器设计

指导教师

2012 年 5 月

题目一:设计一个16位的奇偶校验器,并仿真验证其功能。(1班1组)

(要求:输入一个16位的矢量数值,统计矢量中“1”的个数;并判断16位数中1的个数的奇偶性)

1、设计思路

2、VHDL程序(或原理图)

3、仿真波形(图片)

4、程序分析

1,设计思路如下:

可以使用FOR_LOOP语句,语法格式如下:

[LOOP标号: ] FOR 循环变量,IN 循环次数范围LOOP

顺序语句

END LOOP [LOOP标号];

FOR后的“循环变量”是一个临时变量,属LOOP语句的局部变量,不必事先定义。

“循环次数范围”规定LOOP语句中的顺序语句被执行的次数。循环变量从循环次数数范围的初值开始,每执行完一次顺序语句后递增1,直至达到循环次数范围指定的最大值。

其中定义输入端口十六位的数据总线为a, 输出端口y将其奇偶校验的结果输出, 输出端c统计1 的个数

2,VHDL程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY parity_check IS

PORT (a:IN STD_LOGIC_VECTOR (15 DOWNTO 0); y:OUT STD_LOGIC;

c:out integer range 0 to 16);

END parity_check;

ARCHITECTURE arch OF parity_check IS

BEGIN

PROCESS(a)

V ARIABLE temp:STD_LOGIC;

V ARIABLE m: INTEGER RANGE 0 TO 16; BEGIN

temp:='0';

m:=0; --偶校验初始值设为0,奇校验初始值设为1 FOR i IN 0 TO 15 LOOP

temp:=temp XOR a(i);

IF (a(i)='1') THEN m:=m+1;

END IF;

END LOOP;

y<=temp;

c<=m;

END PROCESS;

END arch;

原理图如下:

3,仿真波形如下:

程序分析

实体:

实体名parity_check

输入端口十六位的数据总线a:IN STD_LOGIC_VECTOR (15 DOWNTO 0)

输出端口y:OUT STD_LOGIC;将其奇偶校验的结果输出

若为奇数个1 输出为高电平;若为偶数个1输出为低电平

输出端c:out integer range 0 to 16)统计1 的个数

结构体:

结构体名arch

在进程PROCESS(a)中定义变量

V ARIABLE temp:STD_LOGIC;

V ARIABLE m: INTEGER RANGE 0 TO 16; 并进行变量的赋值

temp:='0';

m:=0;

loop循环

FOR i IN 0 TO 15 LOOP

temp:=temp XOR a(i);

IF (a(i)='1') THEN m:=m+1;

END IF;

END LOOP;

Temp与a(i)异或将其结果赋给temp

If语句

若a(i)为1 m加1计数

将其m的计数结果赋给c c 即为a中1 的个数

简单16位CPU的设计

简单CPU的设计 设计步骤: 1)确定CPU功能 2)拟定指令系统(采用MIPS) 3)分析指令系统,为数据通路选择合适的组件,并给出组件 所需的控制信号,连接组件建立数据通路 4)详细分析指令在多周期通路中的执行过程,给出指令执行 的流程图 5)依据指令执行的流程图,分析控制信号的取值,生成相应 的状态转换图 一、确定CPU功能 M[2]←M[0]+M[1] 二、拟定指令系统 J类型

4位12位 指令格式中的op(opcode)是指令操作码。rs(register source)是源操作数的寄存 器号。rd(register destination)是目的寄存器号。rt(register target)即可作为源寄 存器号,又可作为目的寄存器号,有具体的指令决定。func(function)可被认为 是扩展的操作码,Target表示一下个地址开始 注:操作码4位,寄存器字段rs,rt,rd各三位,Fun功能字段3位,Imm立即值字段6位;一共8个寄存器,R0只读不可写,恒为0。 R类型的指令 ADD Rd,Rs,Rt SUB Rd,Rs,Rt AND Rd,Rs,Rt OR Rd,Rs,Rt XOR Rd,Rs,Rt I类型的指令 LW Rt, Rs,imm6 SW Rt, Rs,imm6

存放在ROM中的汇编指令,完成M[2]←M[0]+ M[1] LW R1,0(R0);R1←M[R[0]+0],由于R(0)内容为0,即R1←M[0] LW R2,1(R0);R1←M[R[0]+1],由于R(0)内容为0,即R1←M[1] ADD R3,R1,R2 ; R3←R1+R2 SW R3,2(R0) ; M[R[0]+2]←R3 下面地址对应着rom模块里面

奇偶校验电路设计

奇偶校验电路设计 一、实验目的 1.熟悉QuartusII的使用; 2. 学习在QuartusII中; 3. 学习原理图方式自定义元件的输入,封装,调用; 4. 掌握奇偶校验原理; 5. 学会使用现成的芯片搭建目标电路。 二、实验内容和原理 实验内容: (1)在QuartusII环境下以原理图方式建立顶层文件工程。 利用多个74386芯片搭建一个奇偶校验电路。74386提供四个2输入异或门 (2)建立仿真文件,观察输出结果。 实验原理: 奇偶校验码是最简单的数据校验码,其码距为2,可以检测出一位错误,但无法指出错误的位置。 具体校验实现方法为将有效信息位和校验位读入,判断其1的个数是奇数个还是偶数个,在奇校验的情况下正常情况下个数应该为奇数个,偶校验正常情况下应该是偶数个。 校验码的生成:对于奇校验,判断有效信息位1的个数,若为偶数则校验位为1,奇数则校验位为0;偶校验反之。 具体实现的逻辑表达式如下:

三、实验设计原理图以及综合结果 记录逻辑单元的消耗情况等。 原理图如下: 偶校验奇校验 76543210校经过设计后用74386实现的原理图如下:

综合结果如下图所示: 四、仿真波形图 画出波形图以及波形图中仿真信号的说明。 并分析结果(实验现象结论)。 仿真波形图如下所示:

其中,D0-7为信息位,Djiao为校验位。实验结果如下: 说明:波形信息位为奇数个1,校验位为0时,输出的奇校验位为0,偶校验位为1,奇校验错误为0,偶校验错误为1(即有错)。同理其他测试分别测试了信息位为奇数个1,校验位为1、信息位为偶数个1,校验位为1、信息位为偶数个1,校验位为0的情况,图中波形的测试完全符合预期要求。 五、实验中遇到的问题和解决方法。 在实验中遇到的主要问题: (1)操作不熟悉导找不到部分功能元件 (2)由于连线有误,在仿真时结果出现错误。

实验一四位串行进位加法器的设计实验报告

实验一四位串行进位加法器的设计 一、实验目的 1.理解一位全加器的工作原理 2.掌握串行进位加法器的逻辑原理 3.进一步熟悉Quartus软件的使用,了解设计的全过程, 二、实验容 1.采用VHDL语言设计四位串行进位的加法器 2.采用画原理图的方法设计四位串行进位加法器 三、实验步骤 1、使用VHDL语言设计 1.打开File—>New Project Wizard输入文件名adder4保存在D 盘,打开File—>New—>VHDL File,从模版中选择库的说明,use 语句的说明,实体的说明,结构体的说明,编写VHDL代码,然后保存、编译。打开File—>New—>Other File—>Vector Waveform File,查找引脚,从Edit中选择End Time 输入40、ns 保存。从Assignments—>Settings—>Simulator Settings —>Functional 然后Processing—>Generate Functional Simnlation Netlist —>确定。选择Start Simulation保存最后的波形图,打开File —>close关闭工程。 底层文件: LIBRARY ieee;

USE ieee.std_logic_1164.ALL; ENTITY fadder IS PORT ( a, b,cin : IN STD_LOGIC; s, co : OUT STD_LOGIC ); END fadder; ARCHITECTURE arc1 OF fadder IS BEGIN s<=a xor b xor cin; co<=((a xor b)and cin)or(a and b); END arc1; 顶层文件: LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY adder4 IS PORT ( c0: IN STD_LOGIC; a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

16位超前加法器实验报告

16位超前加法器设计实验 一、实验分析: 四位超前进位加法器HDL程序: module add4_head ( a, b, ci, s, pp, gg); input[3:0] a; input[3:0] b; input ci; output[3:0] s; output pp; output gg; wire[3:0] p; wire[3:0] g; wire[2:0] c; assign p[0] = a[0] ^ b[0]; assign p[1] = a[1] ^ b[1]; assign p[2] = a[2] ^ b[2]; assign p[3] = a[3] ^ b[3]; assign g[0] = a[0] & b[0]; assign g[1] = a[1] & b[1]; assign g[2] = a[2] & b[2]; assign g[3] = a[3] & b[3]; assign c[0] = (p[0] & ci) | g[0]; assign c[1] = (p[1] & c[0]) | g[1]; assign c[2] = (p[2] & c[1]) | g[2]; assign pp = p[3] & p[2] & p[1] & p[0]; assign gg = g[3] | (p[3] & (g[2] | p[2] & (g[1] | p[1] & g[0]))); assign s[0] = p[0] ^ ci; assign s[1] = p[1] ^ c[0]; assign s[2] = p[2] ^ c[1]; assign s[3] = p[3] ^ c[2]; endmodule p表示进位否决信号(pass),如果p为0就否决调前一级的进位输入。否决的意思就是即使前一级有进位,本级也不会向后一级产生进位输出。 g表示进位产生信号(generate),如果g为1就表示一定会向后一级产生进位输出。p[n] = a[n] ^ b[n]这句话的意思是说,当a=1,b=0或a=0,b=1时前一级的进位输入信号不能否决。这样就有个问题了,即当a=1,b=1时前一级的进位输入信号也不能否决啊,怎么没有体现出来?其实当a=1,b=1时产生了进位产生信号g,它的优先级高于p信号,就忽略了p信号,直接产生了向后一级产生进位输出,是没有逻辑错误的。 g[n] = a[n] & b[n] 这句话的意思是说,如果a=1,b=1时就直接向后一级产生进位输出信号,而不用考虑其它的任何因素。

EDA 16位加法计数器的设计

北京理工大学 用程序输入方法设计一个16位二进制加法计数器 学院:机械xxxx学院 专业班级:10机械电子工程x班 姓名:陈xx 学号:10xxxxxx 指导教师:xxx 老师

目录 摘要 (1) 1 绪论 (2) 2 计数器的工作原理 (3) 3 设计原理 (4) 4 电路系统的功能仿真 (5) 6 个人小结 (20) 参考文献 (21)

摘要 计数器是数字系统中使用较多的一种时序逻辑器件。计数器的基本功能是统计时钟脉冲的个数,即对脉冲实现计数操作。计数器也可以作为分频、定时、脉冲节拍产生器和脉冲序列产生器使用。计数器的种类很多,按构成计数器中的各触发器是否使用一个时钟脉冲源来分,可分为同步计数器和异步计数器;按进位体制的不同,可分为二进制计数器、十进制计数器和任意进制计数器;按计数过程中数字增减趋势的不同,可分为加法计数器、减法计数器和可逆计数器;还有可预制数和可编计数器等等。本次课程设计将利用众多集成电路软件软件中的Quartus II软件,使用VHDL语言编程完成论文《用程序输入方法设计一个16位二进制加法计数器》,调试结果表明,所设计的计数器正确实现了计数功能。 关键词:二进制;加法计数器;VHDL语言

1 绪论 现代电子设计技术的核心已日趋转向基于计算机的电子设计自动化,即EDA(Electronic Design Automation)技术。EDA技术就是依赖功能强大的计算机,在集成电路软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。一般所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。 EDA工具软件可大致可分为芯片设计辅助软件、可编程芯片辅助设计软件、系统设计辅助软件等三类。常用的EDA工具软件平台有:Matlab、Protel、Proteus、OrCAD以及我们学习的本次课程结课论文所用到的Quartus II等。而且EDA工具软件平台一般都有第三方软件接口,以便于与其他软件联合使用。 本次课程结课论文在设计16位二进制加法计数器时所用到的EDA软件工具平台是Quartus II。Quartus II 是Altera公司的综合性PLD(可编程逻辑器件)开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II 通过和DSP

计算机组成原理课程设计---校验码生成电路的设计

计算机组成原理课程设计---校验码生成电路的设计

编 号: 课程设计 学 号: 201140410119 教学院计算机学院 课程名称计算机组成原理课程设计 题目校验码生成电路的设计 专业计算机科学与技术 班级计科一班 姓名陈建辉 同组人员周海涛石义沣明廷柱 指导教师杨斐

目录 一概述 (3) 1.课程设计的目的 (3) 2.课程设计的要求 (3) 二总体方案设计 (4) 1.设计原理 (4) 2.整体设计思路 (5) 3. EDA技术及QUARTUS II软件的简介 (5) 4. 主要特点 (8) 5. 具备的功能 (8) 6. 分工情况 (9) 7. 设计环境 (9) 三详细设计 (10) 1. 12位的寄存器设计 (10) 2. 奇偶校验电路的设计 (11)

3. CRC码生成电路的设计 (12) 4. 17位寄存器设计 (14) 5. 整体电路 (15) 四.程序的调试与运行结果说明 (16) 1. 建立工作库文件夹和编辑设计文件 (16) 2. 时序仿真 (17) 3. 设置开始时间和结束时间及时间段 (18) 4. 奇偶校验码波形图 (19) 5. CRC码校验仿真波形图 (19) 6. 整合电路校验码的波形图 (20) 五课程设计总结 (20) 参考文献 (22)

一概述 1.课程设计的目的 1. 理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养综合运用所学知识独立完成课题的能力。 3.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 2.课程设计的要求 1. 能够熟练掌握计算机中校验码的工作原理及其多种实现方案; 2. 掌握硬件描述语言VHDL及原理图设计方法; 3. 熟练掌握Quartus II软件平台; 4. 各小组按模块分工,每人独立完成自己负责的模块; 5. 合作完成最终的硬件下载及调试; 6. 独立撰写符合要求的课程设计报告。

16位vhdl乘法器详解,加仿真图

控制模块: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity cont_modu is port( Clk : in std_logic ; Start : in std_logic; //数据输入开始信号 en_sig : out std_logic; //控制运算信号,为‘1’运算数据 out_sig : out std_logic // 运算完成信号 ); end entity; architecture rlt_cont_modu of cont_modu is signal cnt :integer range 0 to 15 :=0;//定义从0到15 type state is(S_idle,S_work,S_1d,S_2d);//运算状态信号,状态机 signal st_ty : state :=S_idle; begin process(Clk) begin if rising_edge(Clk) then case st_ty is选择语句;S_idle为空闲状态,当输入数据后Start信号为1就开始工作 when S_idle => if Start ='1' then如果为1就跳转到S_work状态,并且使能信号置1 st_ty <= S_work; en_sig <='1'; else不然继续在S_idle状态 st_ty <= S_idle; en_sig <='0'; end if; out_sig <='0'; when S_work => if cnt =15 then在S_work状态下,cnt信号一直加1,加满16个数就跳转到S_1d,然后使能信号en_sig 就为0。 st_ty <= S_1d; cnt <= 0; en_sig <='0'; else如果没到16个数继续加1 st_ty <= S_work;

16位(8x8)硬件乘法器设计报告

EDA课程设计16位(8x8)硬件乘法器设计学校:华侨大学 学院:信息与工程学院 班级:10集成 姓名:项传煜 学号:1015251031 老师:凌朝东

目录 摘要 一.设计要求 二.正文 2.1. 系统设计 2.1.1 系统设计方案 (3) 2.1.2 系统设计原理 (4) 2.2. 各子模块设计 2.2.1 十进制加计数器设计 (5) 2.2.2 BCD码转二进制码BCD_B的设计 (5) 2.2.3 8位移位寄存器reg_8的设计 (6) 2.2.4 8位加法器adder_8的设计 (7) 2.2.5 1位乘法器multi_1的设计 (7) 2.2.6 16位移位寄存器reg_16的设计 (8) 2.2.7 16位二进制转BCD码B_BCD的设计 (9) 2.3. 软件设计 2.3.1 设计平台和开发工具 (10) 2.3.2 程序流程方框图 (10) 2.3.3 实现功能 (11) 2.3.4 8位乘法器的顶层设计 (11) 2.4. 系统测试 2.4.1 乘法器使用 (13) 2.4.2 仪器设备 (13) 2.4.3 测试数据 (14) 2.5. 结论 (14) 三.测试结果仿真图 (14) 四.参考文献 (15) 五.附录:设计说明书及使用说明书 (15)

摘要 本设计通过对一个8×8的二进制乘法器的设计,学习利用VHDL语言来描述简单的算法,掌握利用移位相加方法实现乘法运算的基本原理。在此次设计中该乘法器是由十进制计数器,BCD码(输入)转二进制码,8位寄存器,8位加法器,16位寄存器,8x1乘法器,二进制码转BCD码(输出显示)7个模块构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。设计中乘数,被乘数的十位和个位分别采用cnt10(十进制加法器)来输入,经拼接符“&”拼接成8位BCD码,再由BCD_B(BCD码转二进制码)转化成二进制码后计算,计算结果由B_BCD(二进制转BCD码)转化成BCD码输入到数码管中显示。此次设计的创新点在于cnt10,BCD_B,B_BCD的设计,使得电路的输入简单,显示方式为十进制,符合人们的习惯。使用中只要输入乘数,被乘数,按下键3(脉冲)就可以直接得出结果,显示结果稳定。可以满足两位十进制乘法的计算。 一.设计要求 设计一个十六位(8*8)硬件乘法器(难度系数1.0) 要求:2位十进制乘法;能同时显示乘数,被乘数和积的信息(LED数码管)。 二.正文 2.1. 系统设计 2.1.1 系统设计方案 方案一:直接生成乘法器,再配合输入,输出电路,构成2位十进制乘法器,该方案简单,原理清晰明了,但占用资源比较多,且不易于了解内部结构,及其乘法原理。 方案二:移位相加方法实现乘法运算再配合输入,输出电路,构成2位十进制乘法器,该方案原理简单,占用资源少,易于初学者掌握移位相加方法实现乘法运算的原理,但电路模块较多。方案选择:由于现在属初学阶段,掌握原理较为重要,故经小组讨论,一致同意采用方案二。

奇偶校验通信原理课程设计

西南科技大学通信原理设计报告 课程名称:通信原理课程设计 设计名称:奇偶校验编码仿真 姓名:王雷 学号: 班级:通信1004 指导教师:秦明伟 起止日期:2013年7月5日星期五 西南科技大学信息工程学院制

方向设计任务书 学生班级:通信1004 学生姓名:王雷学号:20105615 设计名称:奇偶校验编码仿真 起止日期:2013年7月5日星期五指导教师:秦明伟 方向设计学生日志

奇偶校验编码仿真 一、摘要(150-250字) 奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 二、设计目的和意义 认识matlab软件,学习掌握matlab的基本操作方法,熟悉M文件和simulink的具体实现方法,了解数据奇偶校验的原理和在matlab中的基本仿真,通过对简单的通信实验设计,提高了动手能力和对matlab操作,巩固了课程知识。 三、设计原理 在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。奇偶校验就是接收方用来验证发送方在传输过程中所传数据是否由于某些原因造成破坏。 奇偶校验原理是基于异或的逻辑功能。奇偶校验的编码方法是在原信号码组后面添加以为监督码元,奇偶校验分为奇校验和偶校验,奇校验是原信息码元加上监督码元后,使整个组成的数码组中,1的个数为奇数个。偶校验的工作原理则正好与奇校验相反。 对于n位二进码a1a2a3a4……a n奇校验有如下表示: a1⊕a2⊕a3⊕a4……⊕a n⊕C=1 偶校验的表达式为: a1⊕a2⊕a3⊕a4……⊕a n⊕C =1 其中,C为监督码元,在本设计中n为8,可以推出C的表达式为: C =a1⊕a2⊕a3⊕a4……⊕a8 在发送端让其监督码和信息码一起发送,在信息接收端,计算校验因子的表达式为: 、 S=a1⊕a2⊕a3⊕a4……⊕a n⊕C

VHDL实现16位全加器

[键入公司名称] [键入文档标题] [键入文档副标题] 姓名:托列吾别克·马杰尼 班级:电路与系统01班 学号:201221020141 2013/11/24

基于VHDL的16位全加器的设计 1.1设计题目的内容及要求 1.1.1目的: CMOS数字集成电路设计流程及数字集成电路自动化设计,包括功能验证、VHDL/Verlog建模、同步电路设计、异步数据获取、能耗与散热、信号完整性、物理设计、设计验证等技术 1.1.2内容: 主要实验内容是用0.18μm数字CMOS工艺,VHDL或Verlog设计一个16位全加器,用Synthesis 仿真工具验证功能,电路合成,及性能检测。 1.1.3主要测试参数及指标范围: 16位的全加器主要的设计指标是高于1GHz的频率,功耗,物理面积大小等参数。 1.2全加器的组成和原理分析 全加器是常用的组合逻辑模块中的一种,对全加器的分析和对组合逻辑电 路的分析一样。组合逻辑电路的分析,就是找出给定电路输入和输出之间的逻 辑关系,从而了解给定逻辑电路的逻辑功能。组合逻辑电路的分析方法通常采 用代数法,一般按下列步骤进行: (1)根据所需要的功能,列出真值表。 (2)根据真值表,写出相应的逻辑函数表达式。 (3)根据真值表或逻辑函数表达式,画出相应的组合逻辑电路的逻辑图[1]。 (4)用VHDL编写程序在QUARTUSⅡ上进行模拟,并分析结果的正确性。 1.3 全加器简介

全加器是组合逻辑电路中最常见也最实用的一种,考虑低位进位的加法运算就是全加运算,实现全加运算的电路称为全加器。它主要实现加法的运算,其中分为并行全加器和串行全加器,所谓并行就是指向高位进位时是并行执行的,而串行就是从低位到高位按顺序执行,为了提高运算,必须设法减小或消除由于进位信号逐级传递所消耗的时间,为了提高运算速度,制成了超前进位加法器,这是对全加器的一种创新[2]。 1.3.1半加器的基本原理 如果不考虑有来自低位的进位将两个1位二进制数相加,称为半加。实现半加运算的电路称为半加器。 按照二进制加法运算规则可以列出如表2所示的半加器真值表,其中A、B 是两个加数,S是相加的和,CO是向高位的进位。将S、CO和A、B的关系写成逻辑表达式则得到 S=A B+A B=A+B CO=AB 表1 半加器的真值表 因此,半加器是由一个异或门和一个与门组成的,如图1所示。

16位除8位有符号数的VHDL设计

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; Entity Divider is port( clk: in std_logic; --reset: in std_logic; start: in std_logic; word1: in std_logic_vector(15 downto 0);--被除数 word2: in std_logic_vector(7 downto 0);--除数 data_out: out std_logic_vector(15 downto 0)--商 ); end Divider; Architecture Divider_arc of Divider is type states is(S_Idle,S_Adivr,S_Adivn,S_div); signal state,next_state:states; signal dividend:std_logic_vector(16 downto 0); signal comparison:std_logic_vector(8 downto 0); signal divisor:std_logic_vector(7 downto 0); signal load_words,shift_divisor,shift_dividend,subtract:std_logic; signal num_shift_divisor,num_shift_dividend:integer range 0 to 16; signal quotient:std_logic_vector(15 downto 0); begin process(state,dividend,divisor) begin case state is when S_Adivr => if divisor(7)='0' then comparison<='1'&(not(divisor(6 downto 0)&'0')) +"000000001"+dividend(16 downto 8); else comparison<='1'&(not divisor) +"000000001"+dividend(16 downto 8); end if; when others => comparison<='1'&(not divisor) +"000000001"+dividend(16 downto 8); end case; end process; process(clk,start) begin

超前进位加法器设计报告

存档资料成绩: 华东交通大学理工学院 课程设计报告书 所属课程名称EDA课程设计 题目超前进位加法器设计 分院 专业班级 学号 学生姓名 指导教师 2013 年7月2日

目录 第一章设计内容与要求 (3) 第二章超前进位加法器设计原理 (3) 第三章详细设计流程 (4) 3.1.创建工程文件 (4) 3.2.程序的编译 (5) 3.3.波形的仿真 (7) 第四章设计结果分析 (11) 第五章源程序代码 (12) 第六章心得体会 (14) 第七章参考文献 (15)

第一章设计内容与要求 加法运算是最重要也是最基本的运算,所有的其他基本运算,如减、乘、除运算最终都能归结为加法运算。但因为加法运算存在进位问题,使得某一位计算结果的得出和所有低于他的位相关。因此为了减少进位传输所消耗的时间,提高计算速度,人们设计了多种类型的加法器,如跳跃进位加法器、进位选择加法器、超前进位加法器等。本设计采用的是超前进位加法器。通过Verilog 设计一个超前8位加法器。 要求在Quartus II软件下,利用Verilog编程完成层次式电路设计,电路中的元件可以用Verilog设计也可以用库元件连线构成再封装。8位超前进位加法器,借助EDA工具中的综合器,适配器,时序仿真器和编程器等工具进行相应处理。适配采用Cyclone系列的EP1C6Q240C8。 要求综合出RTL电路,并进行仿真输入波形设计并分析电路输出波形. 试比较并阐述数据类型reg型和wire型的区别。 第二章超前进位加法器设计原理 将n个全加器相连可得n位加法器,但是加法时间较长。解决的方法之一是采用“超前进位产生电路”来同时形成各位进位,从而实现快速加法。超前进位产生电路是根据各位进位的形成条件来实现的 首先对于1位加法器基本位值和与进位输出为1;如果a,b有一个为1,则进位输出等于cin; 令G=ab,P=a+b,则有: Cout==ab+(a+b)cin=G+P?cin 由此可以G和P来写出4位超前进位链如下(设定四位被加数和加数为A

16位全加器

四川理工大学 课程设计任务书设计题目:采用门电路设计一个16位的全加器电路 院系:计算机学院 专业:计算机科学与技术 班级:2008级6班 指导教师:朱文忠 学生姓名:赵******************

目录: 一引言 (1) 1.1 设计背景 (1) 1.2 设计分工 (1) 二设计目的 (2) 2.1 设计目的 (2) 2.2 设计内容 (2) 三设计过程 (2) 3.1 硬件方案 (2) 3.1.1 一位全加器的原理及设计 (2) 3.1.2 四位全加器的原理及设计 (4) 3.1.3 十六位全加器的原理及设计 (7) 3.2 软件方案 (9) 3.3 可行性论证 (13) 3.4 结论 (15) 四参考文献 (16)

引言 1. 设计背景 随着计算机科学技术的发展,人们获得信息的途径更加多样,获取信息的速度更加快捷。硬件的发展允许程序员编出很多精彩的使用软件,也使得计算机更加普及。中央处理器CP U的好坏是影响和制约计算机速度和性能的关键因素。而加法器是组成C PU的的重要部件,一般运算速度的快慢就取决与每秒执行加法的次数,加法器是算术逻辑单元中的基本逻辑器件。例如:为了节省资源,减法器和硬件乘法器都可由加法器来构成。但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度等两方面的问题。 多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。并行进位的并行加法器又可以分为组内并行、组间串行的进位链和组内并行、组间并行的进位链。通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。它们的目的就是要进位信号的产生尽可能的快,因此产生了二重进位链或更高重进位链,显然进位速度的提高是以硬件设计的复杂化为代价来实现的。 2. 设计分工 赵**(081010*****):硬件方案、排版 吴**(081010*****):可行性论证、结论

有符号5位整数乘法器设计与制作

哈尔滨工业大学(威海) 信息科学与工程学院 EDA课程设计报告 有符号5位整数乘法器设计与制作 指导老师:胡屏 学生班级:0802102 学生姓名:傅愉 学生学号:080210210 2009年11月10日

目录 1.课程设计的性质、目的和任务 (1) 2.题目要求 (1) 3.总体设计 (1) 3.1算法设计 (1) 3.2整体框图及原理 (2) 4.电路设计 (4) 4.1 乘法器总体电路原理图: (4) 4.2分时输入模块电路图: ........................................................... - 5 - 4.3乘法运算电路图: (6) 4.4阀门控制模块电路: ............................................................... - 9 - 4.5计数单元电路图: ................................................................. - 12 - 4.6数码管显示单元电路: ......................................................... - 14 - 4.7报警电路示意: ......................................... 错误!未定义书签。 5.调试过程中出现的问题以及解决办法 .......................................... - 19 - 6.心得体会........................................................................................... - 20 - 7.建议:............................................................................................... - 21 - 1.课程设计的性质、目的和任务 创新精神和实践能力二者之中,实践能力是基础和根本。这是由

用JKFF触发器设计一个模为8的加法计数器

题目:用JKFF 设计模为8的加法计数器 步骤1: 分析题意 根据题目所给的条件,待设计的计数器默认为模为8的加法器,不需要求加载初值。电路只需要故电路只需时钟输入端clk ,clk 作为电路的同步时钟,不必当做输入变量对待;输出一个8进制数要3个输出端,记为0Q 1Q 2Q 。要有输出信号Y ,故共需要3个输出端。因输出量0Q 1Q 2Q 就是计数值,故采用Moore 型电路较为合适。 步骤2:建立原始状态图 模8加法器要求逢8加1,。有此状态图做出如图所示。需要8个状态故不需要化简。 /Y /0 /0 /0 S0→ S1→ S2→ S3 ↑ /1 ↓ /0 S7←S6←S5← S4 /0 /0 /0 步骤3:状态分配。 由于最大模的值为8,因此必须取代码位数n=3。假设S0=000,S1=001,S2=010,S3=011,S4=100,S5=101,S6=110,S7=111.则可以做出状态转移表如图。 步骤4:选触发器,求时钟、输出、状态、驱动方程。 因需要3位二进制代码,选用三个CP 下降沿出发的J-K 触发器,分别用FF0,FF1,FF2表示。 有状态列表可作出次态卡诺图及输出函数的卡诺图,如图所示。 与J-K 触发器的特性方程 n n n Q K Q J Q +=+1 比较得到驱动方程 输入 现态 次态 输 出 CP Q2 Q1 Q0 12 +n Q 11 +n Q 1 +n Q Y 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 2 0 1 0 0 1 1 0 3 0 1 1 1 0 0 0 4 1 0 0 1 0 1 0 5 1 0 1 1 1 0 0 6 1 1 0 1 1 1 0 7 1 1 1 1

实验三 组合逻辑电路的设计(一)

实验三组合逻辑电路的设计(一) 一、实验目的 1.掌握用SSI器件设计组合逻辑电路的方法; 2.熟悉各种常用MSI组合逻辑电路的功能与使用方法; 3.掌握多片MSI组合逻辑电路的级联、功能扩展; 4.学会使用MSI逻辑器件设计组合电路; 5.培养查找和排除数字电路常见故障的初步能力。 二、实验器件 1.74LS00 四二输入与非门74LS20 双四输入与非门 2.74LS138 三线—八线译码器74LS139 双二线—四线译码器 三、实验原理 组合逻辑电路是最常见的逻辑电路,其特点是在任何时刻电路的输出信号仅取决于该时刻的输入信号,而与信号作用前电路原来所处的状态无关。组合逻辑电路的设计,就是如何根据逻辑功能的要求及器件资源情况,设计出实现该功能的最佳电路。 在采用小规模器件(SSI)进行设计时,通常将函数化简成最简与—或表达式,使其包含的乘积项最少,且每个乘积项所包含的因子数也最少。最后根据所采用的器件的类型进行适当的函数表达式变换,如变换成与非—与非表达式﹑或非—或非表达式﹑与或非表达式及异或表达式等。 在数字系统中,常用的中规模集成器件(MSI)产品有编码器﹑译码器﹑全加器﹑数据选择/分配器﹑数值比较器等。用这些功能器件实现组合逻辑函数,基本采用逻辑函数对比方法。因为每一种中规模集成器件都具有某种确定的逻辑功能,都可以写出其输出和输入关系的逻辑函数表达式。在进行设计时,可以将要实现的逻辑函数表达式进行变换,尽可能变换成与某些中规模集成器件的逻辑函数表达式类似的形式。 下来我们介绍一下使用中小规模器件设计组合逻辑电路的一般方法。 四、组合电路设计原则及其步骤 组合电路的设计是由给定的的逻辑功能要求,设计出实现该功能的逻辑电路,设计过程大致按下列步骤进行: (1)分析设计要求,把用文字描述的形式的设计要求抽象成输入、输出变量的逻辑关系;(2)根据分析出的逻辑关系,通过真值表或其他方式列出逻辑函数表达式; (3)根据题目提供给你的芯片,将逻辑函数化简到所需要的函数式; (4)画出逻辑电路图或电路原理图; 对于MSI组合逻辑电路的设计是以所用MSI个数最少、品种最少,同时MSI间的连线也最少作为最基本的原则。 下面使用中小规模器件我们各举一个例子: 例:用与非门设计三位多数表决器。 步骤:(1)根据真值表写出逻辑表达式: F = AB + BC + AC = AB BC AC (2)画出逻辑图,如图3—1所示

加法器的设计与仿真实验报告

加法器的设计与仿真 一、实验内容 1、用逻辑图和VHDL语言设计全加器。 2、利用设计的全加器组成串行加法器。 3、用逻辑图和VHDL语言设计并行加法器。 4、应用MaxplusII软件对全加器和串行加法器进行编译、仿真和模拟。 5、在“MaxplusII软件的基本操作”实验的基础上,能更加熟练的掌握应用MaxplusII软件,从而更形象更深层次的理解全加器和串行加法器。 二、实验平台及实验方法 用VHDL语言编写全加器和串行加法器的程序,运用MaxplusII软件进行仿真,再结合FPGA(即对实验箱的芯片进行编译)进行验证。也可以用原理图进行文本设计,波形设计。逻辑符号图: 真值表: 电路图: 三、实验过程 1.启动MaxplusII软件; 2.新建一个文本编辑文件,输入全加器的VHDL语言; 3.编译。点击file save as,保存文件名为f-adder名称,扩展名为vhd,选择芯片类型为EPF10K20TI144-4,保存并进行编译,

若编译结果出现0 error,0 warnings则说明编译通过。 4.仿真波形。点Max+plus II→Waveform editor,出现波形图的设置界面,然后点Node→Enter Nodes from SNF→list,将输入输出端添加到界面,并设置其周期和输入波形,保存后,点Max+plus II→Simulator,即可仿真出输出的波形。 5.配置芯片。点Max+plus II→Floorplan editor,将Unassigned Nodes & 栏中,电路的输入输出节点标号直接用鼠标“拖到” 想分配的引脚上,Max+plusII→programmer→configuer,然后就可以操作试验箱,观察全加器的工作情况。 四、实验结果 实验步骤: 1、用VHDL语言编写全加器的程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT( x,y,cin:IN STD_LOGIC; s,cout:OUT STD_LOGIC ); END ENTITY f_adder; ARCHITECTURE bhv OF f_adder IS BEGIN s<=x XOR y XOR cin; cout<=(x AND y)OR(x AND cin)OR(y AND cin); END ARCHITECTURE bhv; 2、将上述程序保存为文件名为f_adder的文件,点击Maxplus里的compiler进行编译,点击start,如果出现0 error,0 warnings,则编译成功。

用verilog编写16位加法器 乘法器 自动售货机

Verilog课程实验报告

实验1十六位超前进位加法器 1.1系统设计要求 用超前进位加法器实现一个有符号位的16位加法器,并且考虑溢出的情况 2.1详细设计 根据超前进位加法器的原理Co = G | ( P & Ci ) S = P ^ Ci 设计出4位加法器的子模块,然后通过4个4位加法器的相连来得到十六位的加法器。原理如下图所示。溢出用flag=0表示。 3.1程序 //-------------16位超前进位加法器----------------- module cla16(a,b,s,flag); //含有a ,b ,输出s ,进位flag 的模块 input [15:0] a,b;//输入a ,b output [16:0] s; //输出 s output reg flag; //进位 FA FA FA P 0 G 1 P 0G 1 P 2G 2 P 3G 3 C o,3 C o,2 C o,1 C o,0 C i,0 FA FA FA P 0 G 1 P 0G 1 P 2G 2 P 3G 3 C o,2 C o,1 C o,0 C i,0 o,3 M u l t i p l e x e r o P 1P 2P 3 Idea: If (P0 and P1 and P2 and P3 = 1)then C o3 = C 0, else “kill” or “generate”.

wire pp4,pp3,pp2,pp1; wire gg4,gg3,gg2,gg1; wire [15:0] Cp; wire [15:0] p,g; pg i0 (a[15:0],b[15:0],p[15:0],g[15:0]); add i1 (p[3],p[2],p[1],p[0],g[3],g[2],g[1],g[0],pp1,gg1); add i2 (p[7],p[6],p[5],p[4],g[7],g[6],g[5],g[4],pp2,gg2); add i3 (p[11],p[10],p[9],p[8],g[11],g[10],g[9],g[8],pp3,gg3); add i4 (p[15],p[14],p[13],p[12],g[15],g[14],g[13],g[12],pp4,gg4); add i5 (pp4,pp3,pp2,pp1,gg4,gg3,gg2,gg1,pp5,gg5); //调用四位加法器模块 add4 l0 (p[3],p[2],p[1],p[0],g[3],g[2],g[1],g[0],1'b0,Cp[3],Cp[2],Cp[1],Cp[0]); add4 l1 (p[7],p[6],p[5],p[4],g[7],g[6],g[5],g[4],Cp[3],Cp[7],Cp[6],Cp[5],Cp[4]); add4 l2 (p[11],p[10],p[9],p[8],g[11],g[10],g[9],g[8],Cp[7],Cp[11],Cp[10],Cp[9],Cp[8]); add4 l3 (p[15],p[14],p[13],p[12],g[15],g[14],g[13],g[12],Cp[11],Cp[15],Cp[14],Cp[13],Cp[12]); assign s[0]=p[0]^1'b0; //保留位 assign s[1]=p[1]^Cp[0]; assign s[2]=p[2]^Cp[1]; assign s[3]=p[3]^Cp[2]; assign s[4]=p[4]^Cp[3]; assign s[5]=p[5]^Cp[4]; assign s[6]=p[6]^Cp[5]; assign s[7]=p[7]^Cp[6]; assign s[8]=p[8]^Cp[7]; assign s[9]=p[9]^Cp[8]; assign s[10]=p[10]^Cp[9]; assign s[11]=p[11]^Cp[10]; assign s[12]=p[12]^Cp[11]; assign s[13]=p[13]^Cp[12]; assign s[14]=p[14]^Cp[13]; assign s[15]=p[15]^Cp[14]; assign s[16]=pp5|gg5; //溢出判断模块 always@(a,b,s) begin if ((a[15]==1&&b[15]==1&&s[15]==0)||(a[15]==0&&b[15]==0&&s[15]==1)) flag=1'b1; else flag=1'b0; end endmodule //4位加法器模块 module add4(p[3],p[2],p[1],p[0],g[3],g[2],g[1],g[0],Co,Cp[3],Cp[2],Cp[1],Cp[0]); input [3:0]p,g;

相关文档
最新文档