没有合适的资源?快使用搜索试试~ 我知道了~
EDA常用的电路设计程序 组合逻辑电路、时序逻辑电路、状态机、存储器设计
资源推荐
资源详情
资源评论
用 VHDL 进行基本逻辑电路设计总结
组合逻辑电路设计、时序逻辑电路设计、状态机设计 、存储器设计(调用宏功能模块进行
设计)
1 组合逻辑电路设计
常见组合逻辑电路设计主要有:基本门电路、3-8 译码器、8-3 线优先编码器、比较器、多
路选择器、三态门电路、单向总线驱动器、双向总线缓冲器等。
1.1 基本门电路
基本门电路用 VHDL 语言来描述十分方便。为方便起见,在下面的两输入模块中,使
用 VHDL 中定义的逻辑运算符,同时实现一个与门、或门、与非门、或非门、异或门及反
相器的逻辑。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY GATE IS
PORT (A,B:IN STD_LOGIC;
YAND,YOR,YNAND,YNOR,YNOT,YXOR:OUT STD_LOGIC);
END GATE;
ARCHITECTURE ART OF GATE IS
BEGIN
YAND <=A AND B; --与门输出
YOR <=A OR B; --或门输出
YNAND <=A NAND B; --与非门输出
YNOR <=A NOR B; --或非门输出
YNOT <=A NOT B; --反相器输出
YXOR <=A XOR B; --异或门输出
END ART;
1.2 3-8 译码器
下面我们分别以 2 种方法描述一个 3-8 译码器。
方法 1:使用 CASE_WHEN 语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DECODER IS
PORT(SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
EN: IN STD_LOGIC; ---加使能控制端
Y:OUT STD_LOGIC _VECTOR (7 DOWNTO 0));
END;
ARCHITECTURE ART1 OF DECODER IS
BEGIN
PROCESS(SEL,EN)
BEGIN
Y<=”11111111”;
IF(EN=’1’) THEN
CASE SEL IS
WHEN "000"=> Y(0)<= ‘0’;--输出低有效
WHEN "001"=> Y(1)<= ‘0’;
WHEN "010"=> Y(2)<= ‘0’;
WHEN "011"=> Y(3)<= ‘0’;
WHEN "100"=> Y(4)<= ‘0’;
WHEN "101"=> Y(5)<= ‘0’;
WHEN "110"=> Y(6)<= ‘0’;
WHEN "111"=> Y(7)<= ‘0’;
WHEN OTHERS=>NULL;
END CASE;
ELSE Y<=”11111111”;
END IF;
END PROCESS;
END ART1;
方法 2:使用条件选择 WHEN ELSE 语句
ARCHITECTURE ART2 OF DECODER IS
BEGIN
Y (0)<=‘0’ WHEN (EN=’1’AND SEL="000") ELSE ’1’;
Y (1)<=‘0’ WHEN (EN=’1’AND SEL="001") ELSE ’1’;
Y (2)<=‘0’ WHEN (EN=’1’AND SEL="010") ELSE ’1’;
Y (3)<=‘0’ WHEN (EN=’1’AND SEL="011") ELSE ’1’;
Y (4)<=‘0’ WHEN (EN=’1’AND SEL="100") ELSE ’1’;
Y (5)<=‘0’ WHEN (EN=’1’AND SEL="101") ELSE ’1’;
Y (6)<=‘0’ WHEN (EN=’1’AND SEL="110") ELSE ’1’;
Y (7)<=’0’ WHEN (EN=’1’AND SEL="111") ELSE ’1’;
END ART2;
注意:使用了 8 条 WHEN ELSE 语句
1.3 8-3 线优先编码器
8-3 线优先编码器
输入信号为 y0、y1、y2、y3、y4、y5、y6 和 y7,
输出信号为 OUT0、OUT1 和 OUT2。
输入信号中 y0 的优先级别最低,依次类推,y7 的优先级别最高。
下面我们用两种方法设计 8-3 线优先编码器。
方法 1:使用条件赋值语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ENCODER IS
PORT (y0,y1,y2,y3,y4,y5,y6,y7:IN STD_LOGIC;
OUT0,OUT1,OUT2:OUT STD_LOGIC);
END ENCODER;
ARCHITECTURE ART1 OF ENCODER IS
SIGNAL OUTS:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
OUTS (2 DOWNTO 0)<= "111” WHEN y7=‘1’ ELSE
"110" WHEN y6=‘1’ ELSE
"101" WHEN y5=‘1’ ELSE
"100" WHEN y4=‘1’ ELSE
"011" WHEN y3=‘1’ ELSE
"010" WHEN y2=‘1’ ELSE
"001" WHEN y1=‘1’ ELSE
"000" WHEN y0=‘1’ ELSE
"XXX";
OUT0<=OUTS(0);
OUT1<=OUTS(1);
OUT2<=OUTS(2);
END ART1;
方法 2:使用 IF 语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ENCODER IS
PORT(IN1:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
OUT1:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END ENCODER;
ARCHITECTURE ART2 OF ENCODER IS
BEGIN
PROCESS(IN1)
BEGIN
IF IN1(7)=‘1’ THEN OUT1<="111";
ELSIF IN1(6)=‘1’ THEN OUT1<="110";
ELSIF IN1(5)=‘1’ THEN OUT1<="101";
ELSIF IN1(4)=‘1’ THEN OUT1<="100";
ELSIF IN1(3)=‘1’ THEN OUT1<="011";
ELSIF IN1(2)=‘1’ THEN OUT1<="010";
ELSIF IN1(1)=‘1’ THEN OUT1<="001";
ELSIF IN1(0)=‘1’ THEN OUT1<="000";
ELSE OUT1<="XXX";
END IF ;
END PROCESS;
END ART2;
1.4 加法器—带进位的 4 位加法器
方法 1:用 FOR-LOOP 语句实现
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADDER4 IS
PORT (A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
CIN:IN STD_LOGIC;
SUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT:OUT STD_LOGIC);
END ADDER4;
剩余14页未读,继续阅读
资源评论
yuanmiqing
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功