二进制乘法器的VHDL设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.5 乘法器及其VHDL表述
3.5.1 统计位矢中含‘1’个数的电路模块设计⑩【例3-12】
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cntc is
port(din :in std_logic_vector(7 downto 0);
❖左移,SRA算术右移,ROL逻辑循环左移 ,ROR逻辑循环右移
3.5 乘法器及其VHDL表述
例3-13仿真结果
Review
component 元件名 is port (端口名表) ;
end component 文件名 ;
port map
Biblioteka Baidu
元件例化语句: 元件声明语句或定义语句; 元件连接语句
u1 : h_adder PORT MAP(a=>ain,b=>bin,co=>net2,so=>net1);
元件例化语句用在哪里呢? 什么时候需要用到元件例化语句呢?
VARABLE 变量名称:数据类型 := 初值;
❖1、变量variable
❖
在VHDL程序中,常用的数据对象分为三种类型,
即常数(CONSTANT)、变量(VARIABLE)和信号(
SIGNAL)。
❖ 变量只能在进程和子程序中定义和使用,不能在进程
外部定义使用,变量属于局部量,在进程内部主要用来暂
存数据。对变量操作有变量定义语句和变量赋值语句,变
❖4、conv_std_logic_vector ❖a0<=conv_std_logic_vector(0,s)&a ❖5、省略赋值操作符 ❖r1:=(others=>'0')
3.5 乘法器及其VHDL表述
❖6、to_stdlogicvector,to_bitvector(a0)
STD_LOGIC_1164 TO_BIT
--n是loop的循环变量
if (din(n)='1') then q:=q+1;
end if;
end loop;
cnth<=q;
end process;
end bhv;
3.5 乘法器及其VHDL表述
作业2:设计一个统 计32位矢量型数据 中1的个数的程序
3.5 乘法器及其VHDL表述
❖相关语法
由STD_LOGIC转换为BIT 由
TO_BITVECTOR
STD_LOGIC_VECTOR转换
为 BIT_VECTOR
TO_STDULOGIC
由BIT转换为STD_LOGIC
TO_STDULOGICVECTER 由BIT_VECTOR转换为
STD_LOGIC_VECTOR
❖7、移位操作符
❖SLL逻辑左移,SRL逻辑右移,SLA算术
generic(s:integer :=4); port(a,b :in std_logic_vector((s-1) downto 0);
r:out std_logic_vector((2*s-1) downto 0)); end entity mult4b; architecture one of mult4b is signal a0:std_logic_vector((2*s-1) downto 0); begin a0<=conv_std_logic_vector(0,s)&a; process(a,b) variable r1:std_logic_vector((2*s-1) downto 0); begin r1:=(others=>'0'); for i in 0 to (s-1) loop
3.4.3 8位加法器设计
思考:什么时候用到unsigned或signed程序包呢?
3.4.3 8位加法器设计
语法说明 1、std_logic_unsigned程序包
STD_LOGIC_SIGNED STD_LOGIC_UNSIGNED
定义基于STD_LOGIC与 STD_LOGIC_VECTOR数据类型上的有符号 的算术运算 定义基于STD_LOGIC与 STD_LOGIC_VECTOR类型上的无符号的算 术运算
r 1 00 0 11 1 1
3.5 乘法器及其VHDL表述
❖相关语法 ❖1、std_logic_arith程序包
STD_LOGIC_ARITH CONV_INTEGER
由UNSIGNED, SIGNED 转换
CONV_UNSIGNED
为INTEGER
CONV_STD_LOGIC_VECTOR 由SIGNED, INTEGER转换为
b
11 0 1
a0 0 0 0 0 1 0 1 1
r1 0 0 0 0 0 0 0 0
i=0 r1 0 0 0 0 1 0 1 1
i=1 r1 0 0 0 0 1 0 1 1
i=2 a0 0 0 1 0 1 1 0 0
r1 0 0 1 1 0 1 1 1
i=3 a0 0 1 0 1 1 0 0 0
r1 1 0 0 0 1 1 1 1
UNSIGNED
由INTEGER, UNSDGNED,
SIGNED 转换为
STD_LOGIC_VECTOR
❖2、generic参数定义语句
类属GENERIC常用来定义实体端口大小,数据宽度, 元件例化数目等。一般在简单的设计中不常用。
3.5 乘法器及其VHDL表述
❖3、整数数据类型integer
s:integer :=4; SIGNAL C :INTEGER RANGE 1 TO 7; 实际上一个整数是由32位二进制码表示的带符 号数的范围。
if (b(i)='1') then r1:=r1+to_stdlogicvector(to_bitvector(a0)sll(i)); end if; end loop; r<=r1; end process; end architecture one;
3.5 乘法器及其VHDL表述
a
10 1 1
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
3.4.3 8位加法器设计
例3-11 仿真结果
思考 ❖如何实现n位的二进制加法器? ❖作业1:编写一个16位的二进制加法器。 ❖如何用VHDL实现二进制乘法器? ❖二进制乘法和加法有什么关系呢?
cnth:out std_logic_vector(3 downto 0));
end cntc;
architecture bhv of cntc is
begin
process(din)
variable q:std_logic_vector(3 downto 0);
begin
q:="0000";
for n in 0 to 7 loop
量在赋值前必须通过定义,可以在变量定义语句中赋初值
,但对变量赋初值是没有实际意义的。
❖ 变量的赋值符号是“ :=”。
❖ 小提示: 变量与信号赋初值语句仅可用于仿真,在综合 时被忽略,不起作用。
3.5 乘法器及其VHDL表述
❖相关语法 ❖2、for loop循环语句
for loop循环语句是典型的顺序语句,分为递减方式和递增 方式,格式分别为: (1) 递减方式 FOR I IN 起始值 DOWNTO 结束值 LOOP 顺序语句 END LOOP; (2) 递增方式 FOR I IN 起始值 TO 结束值 LOOP 顺序语句 END LOOP;
3.4.3 8位加法器设计
⑨【例3-11】 library ieee;
use ie思ee.s考td_:logic由_11一64.a位ll; 二进制半加器、全加器
use ieee.std_logic_unsigned.all; --此程序包中包含算术操作符的重载函数
entity的add实er8b现is ,如何实现多位二进制加法器? port(a,b :in std_logic_vector(7 downto 0); cin:in std_logic; cout:out std_logic; dout:out std_logic_vector(7 downto 0)); end entity adder8b; architecture bhv of adder8b is signal data:std_logic_vector(8 downto 0); begin data<=('0'&a)+('0'&b)+("00000000"&cin); cout<=data(8); dout<=data(7 downto 0); end architecture bhv;
0 00 0 0 00 0
1011
0 01 0 1 10 0
+
1011
0 10 1 1 00 0
r 1 0 0 0 1 11 1 r 1 0 0 0 1 1 1 1
★二进制数相乘可以用移位相加计算
3.5 乘法器及其VHDL表述
3.5.3 移位相加型乘法器的VHDL表述方法--(11)例3-13
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity mult4b is
3.5 乘法器及其VHDL表述
例3-12 仿真结果
3.5 乘法器及其VHDL表述
a=1011,b=1101,r=a*b
思考二进制乘法的规律
a
1 01 1 a 0 0 0 0 1 0 1 1
b
1 10 1 b 0 0 0 0 1 1 0 1
*
1 01 1 * 0 0 0 0 1 0 1 1
0 0 00