配色: 字号:
二进制乘法器的VHDL设计
2020-04-07 | 阅:  转:  |  分享 
  
Reviewcomponent元件名isport(端口名表);endcomponent文件名;portmap元件例化语句:元件声明语句或定义语句;元件连接语句u1:h_adderPORTMAP(a=>ain,b=>bin,co=>net2,so=>net1);元件例化语句用在哪里呢?什么时候需要用到元件例化语句呢?3.4.38位加法器设计⑨【例3-11】libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;--此程序包中包含算术操作符的重载函数entityadder8bisport(a,b:instd_logic_vector(7downto0);cin:instd_logic;cout:outstd_logic;dout:outstd_logic_vector(7downto0));endentityadder8b;architecturebhvofadder8bissignaldata:std_logic_vector(8downto0);begindata<=(''0''&a)+(''0''&b)+("00000000"&cin);cout<=data(8);dout<=data(7downto0);endarchitecturebhv;思考:由一位二进制半加器、全加器的实现,如何实现多位二进制加法器?3.4.38位加法器设计思考:什么时候用到unsigned或signed程序包呢?3.4.38位加法器设计语法说明1、std_logic_unsigned程序包STD_LOGIC_SIGNED定义基于STD_LOGIC与STD_LOGIC_VECTOR数据类型上的有符号的算术运算STD_LOGIC_UNSIGNED 定义基于STD_LOGIC与STD_LOGIC_VECTOR类型上的无符号的算术运算LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;3.4.38位加法器设计例3-11仿真结果思考如何实现n位的二进制加法器?作业1:编写一个16位的二进制加法器。如何用VHDL实现二进制乘法器?二进制乘法和加法有什么关系呢?3.5乘法器及其VHDL表述3.5.1统计位矢中含‘1’个数的电路模块设计⑩【例3-12】libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycntcisport(din:instd_logic_vector(7downto0);cnth:outstd_logic_vector(3downto0));endcntc;architecturebhvofcntcisbeginprocess(din)variableq:std_logic_vector(3downto0);beginq:="0000";fornin0to7loop--n是loop的循环变量if(din(n)=''1'')thenq:=q+1;endif;endloop;cnth<=q;endprocess;endbhv;3.5乘法器及其VHDL表述作业2:设计一个统计32位矢量型数据中1的个数的程序3.5乘法器及其VHDL表述VARABLE变量名称:数据类型:=初值;相关语法1、变量variable在VHDL程序中,常用的数据对象分为三种类型,即常数(CONSTANT)、变量(VARIABLE)和信号(SIGNAL)。变量只能在进程和子程序中定义和使用,不能在进程外部定义使用,变量属于局部量,在进程内部主要用来暂存数据。对变量操作有变量定义语句和变量赋值语句,变量在赋值前必须通过定义,可以在变量定义语句中赋初值,但对变量赋初值是没有实际意义的。变量的赋值符号是“:=”。小提示:变量与信号赋初值语句仅可用于仿真,在综合时被忽略,不起作用。3.5乘法器及其VHDL表述forloop循环语句是典型的顺序语句,分为递减方式和递增方式,格式分别为:
(1)递减方式FORIIN起始值DOWNTO结束值LOOP
顺序语句
ENDLOOP;(2)递增方式FORIIN起始值TO结束值LOOP
顺序语句
ENDLOOP;相关语法2、forloop循环语句3.5乘法器及其VHDL表述例3-12仿真结果3.5乘法器及其VHDL表述思考二进制乘法的规律a=1011,b=1101,r=aba1011b1101101100001011+1011r10001111a00001011b0000110100001011000000000010110001011000r10001111★二进制数相乘可以用移位相加计算3.5乘法器及其VHDL表述3.5.3移位相加型乘法器的VHDL表述方法--(11)例3-13libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitymult4bisgeneric(s:integer:=4);port(a,b:instd_logic_vector((s-1)downto0);r:outstd_logic_vector((2s-1)downto0));endentitymult4b;architectureoneofmult4bissignala0:std_logic_vector((2s-1)downto0);begina0<=conv_std_logic_vector(0,s)&a;process(a,b)variabler1:std_logic_vector((2s-1)downto0);beginr1:=(others=>''0'');foriin0to(s-1)loopif(b(i)=''1'')thenr1:=r1+to_stdlogicvector(to_bitvector(a0)sll(i));endif;endloop;r<=r1;endprocess;endarchitectureone;3.5乘法器及其VHDL表述a1011b1101a000001011r100000000i=0r100001011i=1r100001011i=2a000101100r100110111i=3a001011000r110001111r100011113.5乘法器及其VHDL表述相关语法1、std_logic_arith程序包STD_LOGIC_ARITHCONV_INTEGERCONV_UNSIGNEDCONV_STD_LOGIC_VECTOR由UNSIGNED,SIGNED转换为INTEGER由SIGNED,INTEGER转换为UNSIGNED由INTEGER,UNSDGNED,SIGNED转换为STD_LOGIC_VECTOR2、generic参数定义语句类属GENERIC常用来定义实体端口大小,数据宽度,元件例化数目等。一般在简单的设计中不常用。3.5乘法器及其VHDL表述3、整数数据类型integers:integer:=4;SIGNALC:INTEGERRANGE1TO7;实际上一个整数是由32位二进制码表示的带符号数的范围。4、conv_std_logic_vectora0<=conv_std_logic_vector(0,s)&a5、省略赋值操作符r1:=(others=>''0'')3.5乘法器及其VHDL表述STD_LOGIC_1164TO_BITTO_BITVECTORTO_STDULOGICTO_STDULOGICVECTER由STD_LOGIC转换为BIT由STD_LOGIC_VECTOR转换为BIT_VECTOR由BIT转换为STD_LOGIC由BIT_VECTOR转换为STD_LOGIC_VECTOR6、to_stdlogicvector,to_bitvector(a0)7、移位操作符SLL逻辑左移,SRL逻辑右移,SLA算术左移,SRA算术右移,ROL逻辑循环左移,ROR逻辑循环右移3.5乘法器及其VHDL表述例3-13仿真结果
献花(0)
+1
(本文系大音善士首藏)