ImageVerifierCode 换一换
格式:PPT , 页数:43 ,大小:2.54MB ,
资源ID:262902      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/262902.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(3.3三位乘法器.ppt)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

3.3三位乘法器.ppt

1、1,任务三 三位乘法器的VHDL设计,2,一、任务分析:三位乘法器的设计原理,本次任务中所说的三位乘法器是指能实现三位二进制数的乘法运算的器件;其实二进制数的乘法与十进制数乘法类似,均可采用乘数的每一位均与被乘数相乘后错位累加。故也可与十进制乘法类似用算式的方式来表示运算过程,具体见下页图所示:,根据二进制数的乘法法则:0*0=0,0*1=0,1*0=0,1*1=1更可将算式中的结果进行简化。例如若B0=1,则(A2B0)(A1B0)(A0B0)=A2A1A0;若B0=0,则(A2B0)(A1B0)(A0B0)=0。因此移位乘的过程可以看成是以b(i)取值为条件而实现不同的赋值方式,故可采用w

2、hen-else语句实现。由于三位二进制数相乘的最大结果为111*111=110001,即数位为6位。而从算式中看经错位累加后数位还只有5位,故在程序设计中还应注意数位的处理。计算过程中,乘数的每一位与被乘数相乘的中间结果需要进行一次加法运算。由于VHDL语言中对电路的输入端口的数据类型一般处理为逻辑型数据,所以此处出现了逻辑型数据做加法运算的情况。这也是在程序中需要处理的一个问题。,数组类型的数据类型和when-else语句,并置运算符&的使用,Std_logic_unsigned 程序包的使用,1、VHDL库和程序包,库(Library)是用于存放预先编译好的程序包(Package),程序

3、包中定义了数据集合体、逻辑操作和元件等。主要是声明在设计或实体中将用到的常量,数据类型,元件及子程序等。库可以使设计者共享已经编译好的设计结果。,IEEE库:IEEE标准库使用需声明STD库:VHDL标准库使用无需声明ASIC库:EDA厂商提供库使用需声明WORK库:现行作业库,当前工作目录的所有设计使用无需声明USER库:用户自定义库使用需声明,VHDL库的种类,库的用法,USE语句的使用有两种常用格式:USE 库名.程序包名.项目名;USE 库名.程序包名.ALL;,例:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.STD_ULOGIC;USE IEEE.STD

4、_LOGIC_1164.RISING_EDGE;USE IEEE.STD_LOGIC_1164.ALL;,格式:LIBRARY 库名;,USE 库名.程序包名.All;,库说明的作用范围,从一个实体说明开始到其所属的结构体、配置为止。当一个源程序中出现两个以上的实体时,必须重复说明。,例:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY example1 IS()ENDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY example2 IS()END,返回,1、IEEE.STD_LOGIC_1164 程

5、序包 用于说明STD_LOGIC数据类型;2、IEEE.STD_LOGIC_ARITH 程序包 可用于说明rising_edge函数3、IEEE.STD_LOGIC_UNSIGNED 程序包 可用于说明算术运算符的重载,即使得逻辑数据可以实现算术运算,常用的VHDL库与程序包,2、普通的赋值语句,将一个值或者一个表达式传递给某一个数据对象,如信号,变量,或由此组成的数组。,信号赋值语句,变量赋值语句,分类:,注意信号和变量的定义位置,赋值目标,赋值符号,组成:,赋值源,基本元素只能是信号和变量,变量“:=”信号“=”,可以是一个数值或者是一个逻辑或运算表达式,赋值目标与赋值源的数据类型必须严格

6、一致。,3、VHDL数据类型,逻辑数据类型,数值数据类型,布尔代数(Boolean)型,位(Bit),位矢量(Bit_Vector),标准逻辑型(Std_Logic),标准逻辑数组类型(Std_Logic_vector),整数(Integer),无符号(Unsigned)和有符号(Signed),字符串(STRING)数据类型,字符(CHARACTER)数据类型,时间(TIME)数据类型(仿真使用,不能综合),1、逻辑数据类型,(1)布尔代数(Boolean)型,定义位置:在std库的standard程序包中进行定义。,取值:FALSE,TRUE;不能用于运算,只能通过关系运算符获得。,(2)

7、位(Bit),定义位置:在std库的standard程序包中进行定义。,取值:0,1,(低电平,高电平),(3)位矢量(Bit_Vector),定义位置:在std库的standard程序包中进行定义。,Signal A:bit_vector(0 to 7);Signal B:bit_vector(7 downto 0);A=“00001010”;B=“00001010”;,位矢量是基于“位”数据类型的数组,使用时要注意位宽。,A(7)=0 A(6)=1 A(5)=0 A(4)=1 A(3)=0 A(2)=0 A(1)=0 A(0)=0B(7)=0 B(6)=0 B(5)=0 B(4)=0 B(

8、3)=1 B(2)=0 B(1)=1 B(0)=0,(4)标准逻辑型(Std_Logic),定义位置:在IEEE库的std_logic_1164程序包中进行定义,使用这类数据信号,必须包含下面两条声明语句:,Library IEEE;Use IEEE.std_logic_1164.all;,该类型能比较全面地包括数字电路中信号的几种状态,比位“bit”信号对于数字逻辑电路的逻辑特性描述更完整、更真实。所以在VHDL的程序里,对于逻辑信号的定义,通常都是采用这个“标准逻辑”信号形式,不再使用“BIT”。,(5)标准逻辑数组类型(Std_Logic_vector),定义位置:在ieee库的std_

9、logic_1164程序包中进行定义。,Bit_Vector与Std_Logic_vector的区别在于数组的每一位前者为BIT型(0,1)后者为Std_Logic型,Signal A:STD_LOGIC_VECTOR(0 to 7);Signal B:STD_LOGIC_VECTOR(7 downto 0);A=“10100000”;B=“00001010”;,逻辑数据类型赋值举例,Variable a,b:std_logic;Signal data:std_logic_vector(0 to 3);a:=1;b:=0;data=“1100”;,一位值用单引号多位值用双引号,1、直接整体赋值

10、,2.段赋值,Signal data:std_logic_vector(0 to 3);data(1 to 2)=“10”;data(0)=1;,3.块赋值,Signal a,b,c,d:std_logic;Signal data:std_logic_vector(3 downto 0);data=“0100”;(a,b,c,d)=data;,位置关联,2、数值数据类型,(1)整数(Integer)定义位置:在std库的standard程序包中进行定义。即数值范围为-231231(2147483647 TO 2147483647)。整数不能用于逻辑运算,只能用于算术运算。,Signal day

11、:integer range 0 to 31;Variable a,b,c:integer;,1.0 十进制浮点数 0.0 十进制浮点数 65971.3333333 十进制浮点数 65_971.333_3333 与上一行等价 8#43.6#e+4 八进制浮点数 43.6E4 十进制浮点数,(2)实数也称浮点数,(2)无符号(Unsigned)和有符号(Signed)类型,定义位置:有符号(Signed)和无符号(Unsigned)定义在库IEEE的程序包std_logic_arith中。,符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。,(4)、字符串(STRING)数据类型,双

12、引号引起来字符串数组,一般用于程序的提示和结果说明。VARIABLE string_yin:STRING(1 TO 3);string_yin:=a b c d;,(3)、字符(CHARACTER)数据类型,单引号引起来,如:A a字符分大小写。A不等于a,(5)、时间(TIME)数据类型(仿真使用,不能综合),TYPE time IS RANGE 2147483647 TO 2147483647 units fs;-飞秒,VHDL中的最小时间单位 ps=1000 fs;-皮秒 ns=1000 ps;-纳秒 us=1000 ns;-微秒 ms=1000 us;-毫秒 sec=1000 ms;-

13、秒 min=60 sec;-分 hr=60 min;-时end units;,Q=a and b or c AFTER 10 ns;,3 用户自定义数据类型定义语句,TYPE语句用法如下:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;或TYPE 数据类型名 IS 数据类型定义;,(1)枚举类型(Enumerated)TYPE 数据类型名 IS(元素,元素,)例如:TYPE week IS(sun,mon,tue,wed,thr,fri,sat);用字符来代替数字,(2)整数类型(Integer):限定范围,节省硬件资源。用户自定义的整数类型可认为是整数类型的一个子类。格式:TY

14、PE 整数类型名 IS 约束范围例如,如果由用户定义一个用于数码管显示的数据类型,则可写为:TYPE digit IS RANGE 0 TO 9;,(3)数组(Array)。数组是将相同类型的数据集合在一起所形成的一个新的数据类型,既可以是一维的,也可以是二维的。数组定义的书写格式为:TYPE 数据类型名 IS ARRAY 范围 OF 原数据类型;如果范围这一项没有被指定,则使用整数数据类型;若需用整数类型外的其他数据类型,则在制定数据范围前加数据类型名。,该数组名称为data_bus,共有16个元素,下标分别是15、14、1、0,各元素可分别表示为dat_bus(15)、dat_bus(0)

15、。除了一维数组外,VHDL还可以定义二维、三维数组,如定义一个16个字节、每字节8位的存储空间的二维数组,可以定义为:TYPE ram_16x8 IS ARRAY(0 TO 15)OF STD_LOGIC_VECTOR(7 DOWNTO 0);,例如:TYPE dat_bus IS ARRAY(15 DOWNTO 0)OF BIT;,(4)用户自定义子类型:用户对已定义的数据类型作一些范围限制。子类型定义的一般格式为:SUBTYPE 子类型名 IS 数据类型名范围例如,SUBTYPE iobus IS STD_LOGIC_VECTOR(4 DOWNTO 0);,新结构的数据类型及子类型通常在程

16、序包中定义,再由USE语句装载到描述语句中。用SUBTYPE和TYPE这两种类型定义语句定义的数据类型有一个很重要的区别:TYPE定义的数据类型是一个“新”的类型,而SUBTYPE定义的数据类型是原类型的一个子集,仍属原类型,即SUBTYPE定义的某数据类型的子类型可以赋值给原类型的数据。,比如,有信号定义为:SIGNAL s_integ:INTEGER RANGE 0 TO 9;有子类型定义为:SUBTYPE abc IS INTEGER RANGE 0 TO 9;有“新”类型定义为:TYPE cde IS RANGE 0 TO 9;有两个变量分别定义为上述的类型:VARIABLE sub_v:abc;VARIABLE typ_v:cde;,则赋值语句s_integ=sub_v;s_integ=typ_v;,s_integ=sub_v;是正确的,因为sub_v是abc类型,而abc是整数类型的子类型,所以sub_v可以赋值给整数类型。但语句s_integ=typ_v;却是错误的,因为typ_v是cde类型,而cde是新的数据类型,所以虽然cde类型的范围也是09,但它不可以直接赋值给

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1