#【创新实验】基于VHDL的二进制与十进制之间的相互转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《创新实验》
——可编程逻辑设计基础
实验题目:
二进制和十进制之间的相互转换指导教师:周克峰
小组成员:
摘要
十进制-二进制转换的编码器是将十进制数0、1、2、3、4、
5、6、7、8、9等十个信号编成二进制代码的电路。
它的输入是
代表0~9这个10个数符的状态信号,有效信号为1,输出是响
应的BCD码,其特点是任何时刻只允许输入一个有效信号。
二进制-十进制转换的编码器是十-二进制转换的逆过程,它的功能是将输入的一位BCD码译成10个高、低电平输出信号。
当输入一个BCD码时,就会在它所表示的十进制数的对应输出端
产生一个低电平有效信号。
在本次的实验中,主要使用开发软件ISE和芯片Xilinx Spartan-II来实现二进制和十进制之间的相互转换。
目录
一、概述 (5)
1、PLD/FPGA 结构和原理 (5)
1)PLD/FPGA原理
2)查找表(Look-Up-Table)的原理和结构
2、开发软件和芯片 (5)
1)开发软件
2)芯片介绍
二、算法设计原理 (6)
1、十进制-二进制的转换
2、二(BCD)-十进制的转换
三、工程开发流程 (7)
(一)工程开发流程 (7)
1、设计输入
2、综合
3、实现
4、验证
5、下载
(二)实际运用过程 (9)
1、设计输入 (9)
1)建立源文件
2)输入原理图
3)行为仿真
2、设计实现 (15)
1)时序仿真
2)产生报告并修改设计
3、配置或编程 (17)
1)编程器件
2)验证电路
3)下载
四、实验总结 (20)
五、实验心得 (21)
六、参考文献 (21)
一、概述
1、PLD/FPGA 结构和原理
1)PLD/FPGA原理:
PLD是可编程逻辑器件(Programable Logic Device)的简称,FPGA是现场可编程门阵列(Field Programable Gate Array)的简称,两者的功能基本相同,只是实现原理略有不同,所以我们有时可以忽略这两者的区别,统称为可编程逻辑器件或PLD/FPGA。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。
FPGA的基本特点主要有:
采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。
FPGA可做其它全定制或半定制ASIC电路的中试样片。
FPGA内部有丰富的触发器和I/O引脚。
FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
FPGA采用高速CHMOS工艺,功耗低,可以和CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。
用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA 进入工作状态。
掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。
FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM 编程器即可。
当需要修改FPGA功能时,只需换一片EPROM即可。
这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。
因此,FPGA的使用非常灵活。
2)查找表(Look-Up-Table)的原理和结构
查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。
目前FPGA 中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。
当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
2、开发软件和芯片
1)开发软件
许多PLD公司都提供免费试用版或演示版,如: Altera公司提供的QuartusII (web版),Xilinx 公司提供的免费软件ISE WebPack, Lattice 提供的isplever Base版下载,Actel等公司也都有类似的免费软件提供。
本次实验中,使用的软件为Xilinx公司提供的ISE软件。
2)芯片介绍
FPGA的主要生产产商有Altera、Xilinx、Actel、Lattice等,其中Altera 和Xilinx主要生产一般用途FPGA,其主要产品采用RAM工艺。
Actel主要提供非易失性FPGA,产品主要基于反熔丝工艺和FLASH工艺。
Xilinx的主流FPGA分为两大类,一种侧重低成本使用,容量中等,性能可以满足一般的逻辑设计要求,如Spartan系列;还有一种侧重于高性能使用,容量大,性能能满足各类高端使用,如Virtex系列,用户可以根据自己实际使用要求进行选择。
在性能可以满足的情况下,优先选择低成本器件。
本次实验中,使用的芯片为Xilinx公司生产的Spartan-II芯片,它的内部结构主要包括CLBs,I/O块,RAM块和可编程连线(未表示出)。
在spartan-II 中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。
二、算法设计原理
二进制转十进制,十进制转二进制的算法
十
表1二进制数和十进制数换算对照表
二进制
十进制二进制十进制二进制十进制二进制十进制00000001130110610019
000110100401117101010
001020101510008101111
采用“二进制数”的算术运算也比较简单,制造成本更经济。
二进制的加法运算和乘法运算公式都各有四条规则:加法有0+0=0,0+1=1,1+0=1,1+1=10;乘法有0*0=0,0*1=0, 1*0=0, 1*1=1,而十进制的加法和乘法运算公式从0+0开始到9+9,从0*0开始到9*9各需规则100条。
2.二进制代码
电子计算机中的数是用二进制表示的,在计算机中也采用二进制代码表示字母、数字字符、各种各样的符号、汉字等。
在处理信息的过程中,可将若干位的二进制代码组合起来表示各种各样的信息。
但由于二进制数不直观,人们在计算机上实际操作时,输入、输出的数使用十进制,而具体转换成二进制编码的工作则由计算机软件系统自动完成。
字母和各种字符在计算机中的传输普遍采用Ascll码
(American Standard Code For lnformation lnterchange),即美国标准信息交换码,它用了7位二进制数来表达字母和各种常用字符(见附录)。
对于汉字信息的表示比较复杂,我国有汉字几万个,常用的汉字也有7000多个,为了统一,我国制定了汉字编码标准,规定了一、二级汉字共6763个,用两个字节(16位二进制代码)来表示一个汉字进制转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写就是结果
例如302
302/2 = 151 余0
151/2 = 75 余1
75/2 = 37 余1
37/2 = 18 余1
18/2 = 9 余0
9/2 = 4 余1
4/2 = 2 余0
2/2 = 1 余0
故二进制为100101110
二进制转十进制
从最后一位开始算,依次列为第0、1、2...位
第n位的数(0或1)乘以2的n次方
得到的结果相加就是答案
例如:01101011.转十进制:
第0位:1乘2的0次方=1
1乘2的1次方=2
0乘2的2次方=0
1乘2的3次方=8
0乘2的4次方=0
1乘2的5次方=32
1乘2的6次方=64
0乘2的7次方=0
然后:1+2+0
+8+0+32+64+0=107.
二进制01101011=十进制107.
一、二进制数转换成十进制数
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。
这种做法称为"按权相加"法。
二、十进制数转换为二进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。
具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。
具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
回答者:HackerKinsn - 试用期一级 2-24 13:31
1.二进制和十进制的转换
(1)二进制转十进制<BR>方法:"按权展开求和"
例:
(1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10
=(8+0+2+1+0+0.25)10
=(11.25)10
(2)十进制转二进制
·十进制整数转二进制数:"除以2取余,逆序输出"
例:(89)10=(1011001)2
2 89
2 44 (1)
2 22 0
2 11 0
2 5 (1)
2 2 (1)
2 1 0
0 (1)
·十进制小数转二进制数:"乘以2取整,顺序输出"
例:
(0.625)10= (0.101)2
0.625
X 2
1.25
X 2
0.5
X 2
1.0
2.八进制和二进制的转换
例:将八进制的37.416转换成二进制数:
37 . 4 1 6
011 111 .100 001 110
即:(37.416)8 =(11111.10000111)2
例:将二进制的10110.0011 转换成八进制:
0 1 0 1 1 0 . 0 0 1 1 0 0
2 6 . 1 4
即:(10110.011)2 =(26.14)8
3.十六进制和二进制的转换<BR>例:将十六进制数5DF.9 转换成二进制:5 D F . 9
0101 1101 1111.1001
即:(5DF.9)16 =(10111011111.1001)2
例:将二进制数1100001.111 转换成十六进制:
0110 0001 . 1110
6 1 . E
即:(1100001.111)2 =(61.E )16
1. 十-二进制的转换
将十进制数0、1、2、3、4、5、6、7、8、9等10个信号编成二进制代码,它的输入是代表0~9这10个数符的状态信号,有效信号为1(即某信号为1时,则表示要对它进行编码),输出是相应的BCD 码,因此也10线-4线编码器,任何时刻 只允许输入一个有效信号,0Y 的编码是隐含的。
表达式为: D==+98Y Y 98Y Y ∙
C=45674567Y Y Y Y Y Y Y Y +++= B=76327632Y Y Y Y Y Y Y Y ∙∙∙=+++ A==++++97531Y Y Y Y Y 97531Y Y Y Y Y ∙∙∙∙
表1 十-二进制转换真值表
十进制数 D C B A 0(0Y ) 0 0 0 0 1(1Y ) 0 0 0 1 2(2Y ) 0 0 1 0 3(3Y ) 0 0 1 1 4(4Y ) 0 1 0 0 5(5Y ) 0 1 0 1 6(6Y ) 0 1 1 0 7(7Y ) 0 1 1 1 8(8Y ) 1 0 0 0 9(9Y )
1
1
2. 二(BCD)-十进制的转换
将输入的一位BCD 码(四位二元符号)译成10个高、低电平输出信号。
当输入一个BCD 码时,就会在它所表示的十进制数的对应输出端产生一个低电平有效信号。
)()(321032100A A A A A A A A Y +∙+=∙∙∙= )()(321032101A A A A A A A A Y +∙+=∙∙∙= )()(321032102A A A A A A A A Y +∙+=∙∙∙= )()(321032103A A A A A A A A Y +∙+=∙∙∙= )()(321032104A A A A A A A A Y +∙+=∙∙∙= )()(321032105A A A A A A A A Y +∙+=∙∙∙= )()(321032106A A A A A A A A Y +∙+=∙∙∙= )()(321032107A A A A A A A A Y +∙+=∙∙∙= )()(321032108A A A A A A A A Y +∙+=∙∙∙= )()(321032109A A A A A A A A Y +∙+=∙∙∙=
表2 二-十进制转换真值表 序号 输入
输出
3A 2A 1A 0A 0Y 1Y
2Y 3Y 4Y 5Y 6Y 7Y 8Y 9Y
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 1 0 0 0 0 0 0 0 3 0 0 1 1 0 0 0 1 0 0 0 0 0 0 4 0 1 0 0 0 0 0 0 1 0 0 0 0 0 5 0 1 0 1 0 0 0 0 0 1 0 0 0 1 6 0 1 1 0 0 0 0 0 0 0 1 0 0 0 7 0 1 1 1 0 0 0 0 0 0 0 1 0 0 8
1
1
9 1 0 0 1 0 0 0 0 0 0 0 0 0 1
三、工程开发流程
(一)工程开发流程
利用Xilinx公司的ISE开发设计软件的工程设计流程如图2所示,具体分为五个步骤:即输入(Design Entry)、综合(Synthesis)、实现(Implementation)、验证(Verification)、下载(Download)。
图2 设计流程图
图形或文本输入包括原理图、状态机、波形图、硬件描述语言(HDL),是工程设计的第一步,ISE集成的设计工具主要包括HDL编辑器(HDL Editor)、状态机编辑器(StateCAD)、原理图编辑器(ECS)、IP核生成器(CoreGenerator)和测试激励生成器(HDL Bencher)等。
1、设计输入
常用的设计输入方法是硬件描述语言(HDL)和原理图设计输入方法。
原理图输入是一种常用的基本的输入方法,其是利用元件库的图形符号和连接线在ISE软件的图形编辑器中作出设计原理图。
ISE中设置了具有各种电路元件的元件库,包括各种门电路、触发器、锁存器、计数器、各种中规模电路、各种功能较强的宏功能块等用户只要点击这些器件就能调入图形编辑器中。
这种方法的优点是直观、便于理解、元件库资源丰富。
但是在大型设计中,这种方法的可维护性差,不利于模块建设和重用。
更主要的缺点是:当所选用芯片升级换代后,所有的原理图都要作相应的改动。
为了克服原理图输入方法的缺点,目前在大型工程设计中,在ISE软件中常用的设计方法是HDL设计输入法,其中影响最为广泛的HDL语言是VHDL和Verilog HDL。
它们的共同优点是利于由顶向下设计,利于模块的划分和复用,可移植性好,通用性强,设计不因芯片的工艺和结构的变化而变化,更利于向ASIC的移植,故在ISE软件中推荐使用HDL设计输入法。
波形输入及状态机输入方法是两种最常用的辅助设计输入方法,使用波形输入法时,只要绘制出激励波形的输出波形,ISE软件就能自动地根据响应关系进行设计;而使用状态机输入时,只需设计者画出状态转移图,ISE软件就能生成相应的HDL代码或者原理图,使用十分方便。
其中ISE工具包中的StateCAD就
能完成状态机输入的功能。
但是需要指出的是,后两种设计方法只能在某些特殊情况下缓解设计者的工作量,并不适合所有的设计。
2、综合(Synthesis)
综合是将行为和功能层次表达的电子系统转化为低层次模块的组合。
一般来说,综合是针对VHDL来说的,即将VHDL描述的模型、算法、行为和功能描述转换为FPGA/CPLD基本结构相对应的网表文件,即构成对应的映射关系。
在Xilinx ISE中,综合工具主要有Synplicity公司的Synplify/Synplify Pro,Synopsys公司的FPGA Compiler II/ Express, Exemplar Logic公司的LeonardoSpectrum和Xilinx ISE 中的XST等,它们是指将HDL语言、原理图等设计输入翻译成由和、或、非门,RAM,寄存器等基本逻辑单元组成的逻辑连接(网表),并根据目标和要求优化所形成的逻辑连接,输出edf和edn等文件,供CPLD/FPGA厂家的布局布线器进行实现。
3、实现(Implementation)
实现是根据所选的芯片的型号将综合输出的逻辑网表适配到具体器件上。
Xilinx ISE的实现过程分为:翻译(Translate)、映射(Map)、布局布线(Place & Route)等3个步骤。
ISE集成的实现工具主要有约束编辑器(Constraints Editor)、引脚和区域约束编辑器(PACE)、时序分析器(Timing Analyzer)、FPGA底层编辑器(FGPA Editor)、芯片观察窗(Chip Viewer)和布局规划器(Floorplanner)等。
4、验证(Verification)
验证(Verification)包含综合后仿真和功能仿真(Simulation)等。
功能仿真就是对设计电路的逻辑功能进行模拟测试,看其是否满足设计要求,通常是通过波形图直观地显示输入信号和输出信号之间的关系。
综合后仿真在针对目标器件进行适配之后进行,综合后仿真接近真实器件的特性进行,能精确给出输入和输出之间的信号延时数据。
ISE可结合第三方软件进行仿真,常用的工具如Model Tech公司的仿真工具ModelSim和测试激励生成器HDL Bencher ,Synopsys公司的VCS等。
通过仿真能及时发现设计中的错误,加快设计中的错误,加快设计进度,提高设计的可靠性。
每个仿真步骤如果出现问题,就需要根据错误的定位返回到相应的步骤更改或者重新设计。
5、下载(Download)
下载(Download)即编程(Program)设计开发的最后步骤就是将已经仿真实现的程序下载到开发板上,进行在线调试或者说将生成的配置文件写入芯片中进行测试。
在ISE中对应的工具是iMPACT。
(二)实际运用过程
1、设计输入
1)建立源文件
本实验采用原理图输入工具----ESC(Engineering Capture Systems),在ESC 的图形化用户界面下,用户可以编辑原理图的模块符号,使用ESC设计原理图可以分为:
1、新建原理图;
2、选择放置器件符号;
3、添加连线;
4、添加网线名称;
5、设置I/O管脚;
6、生成器件符号等。
2、设计实现
1)时序仿真
在进行布局布线后时序仿真(post-place and route simulation),此类仿真信息中包含目标器件时序信息。
2)产生报告并修改设计
在本次的实验中,能够较顺利地完成时序仿真,在仿真过程中,产生的毛刺很少,因此就省略了修改设计。
但是,一旦在仿真时产生的毛刺较多,就需要修改设计以清除这些毛刺。
在组合逻辑电路中,信号要经过一系列的门电路和信号变换。
由于延迟的作用使得当输入信号发生变化时,其输出信号不能同步地跟随输入信号变化,而是经过一段过渡时间后才能达到原先所期望的状态。
这时会产生小的寄生毛刺信号,使电路产生瞬间的错误输出,造成逻辑功能的瞬时紊乱。
毛刺问题在电路连线上是找不出原因的,只能从逻辑设计上采取措施加以解决。
当电路中存在冒险现象是,必须设法消除它,否则会导致严重错误,消除冒险现象通常有如下几种方法:
(1),加滤波电路,消除毛刺的影响;
(2),加选通信号避开毛刺;
(3),增加冗余项消除逻辑冒险。
3、配置或编程
1)编程器件
FPGA设计中的约束文件有3类:用户设计文件(.UCF文件)、网表约束文件(.NCF文件)以及物理约束文件(.PCF文件),可以完成时序约束、管脚约束以及区域约束。
a)创建约束文件
约束文件的后缀是.ucf,所以一般也被称为UCF文件。
通过新建方式创建约束文件
b)用PACE进行引脚位置约束
启动PACE,在“Ports”选项卡中可以看到,所有的端口都已经罗列出来了,如果要修改端口和FPGA管脚的对应关系,只需要在每个端口的“Location”列中填入引脚的编号即可。
2)验证电路
3)下载:下载成功,实验顺利完成。
四、实验总结
通过本次的实验,学习到很多以往所没有接触过的知识和技能,如对于FPGA 和PLD的结构原理、开发软件ISE、芯片Xilinx Spartan-II等。
在实验开始阶段,如何选题成为了首个遇到的困难。
由于从未接触过FPGA,不知道选择怎么样的题目才能符合实验的要求,因此就想方设法地从网络上和图书馆中,尽可能多地搜索需要的资料。
在阅读和理解了这些资料之后,才对FPGA 有所了解,并选择出适合自己又符合实验要求的题目来。
开始实验之后,渐渐地发现学习使用开发软件ISE的难度。
对于一个完全陌生的软件,需要阅读有关书籍和不断地尝试,并时常向老师和同学咨询,才可以学会熟练地使用它。
因此,经过此次的实验,不仅学会使用ISE,并且能够通过和老师和同学的交流中学习到更多的东西。
也正因为如此,才能够顺顺利利地完成了本次实验。
五、参考文献
【1】《FPGA设计及使用(第二版)》作者:褚振勇、齐亮、田红心、高楷娟西安电子科技大学出版社
【2】《Xilinx可编程逻辑器件的高级使用和设计技巧》作者:孙航电子工业出版社
【3】《FPGA/CPLD设计工具--XilinxISE5.X使用详解》 EDA先锋工作室人民邮电出版社
【4】《数字电子技术基础》作者:杨颂华、冯毛官、孙万蓉、胡力山西安电子科技大学出版社。