1) 建立新文件. 运行MAX+PLUS II 软件,选择菜单File|new,出现对话框,选择Text
图2-2 全加器的示意图和真值表
Editor File 选项,单击OK进入文本编辑画面.
A S B Ci Co 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 A B Ci S 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 1 Co
2) 保存文件.选择菜单File|Save,键如文件名multi_4v.vhd,选择合适的路径,,进
行保存,.注意文件名和路径名不能用汉字.
3) 指定项目名称.选择选择菜单File|Project|Set Project to Current File ,以快
捷方式建立项目.
4) 输入文本. 在文件multi_4v.vhd输入以下VHDL源程序: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY multi_4v IS
PORT(A,B,C,D: IN STD_LOGIC;
S: IN STD_LOGIC_VECTOR(1 DOWNTO 0); Y: OUT STD_LOGIC); END multi_4v;
ARCHITECTURE a OF multi_4v IS BEGIN
PROCESS(S,A,B,C,D) BEGIN
IF S=“00” THEN Y<=A; ELSIF S=“01” THEN Y<=B;
ELSIF S=“10” THEN Y<=C;
ELSIF S=“11” THEN
10
Y<=D; END IF; END PROCESS; END a; 5) 编译
后面的编译同实验一,在此不做详细介绍. 6) 创建电路符号和电路默认包含文件
创建电路符号.选择菜单File|Create Default Symbol,可以产生 multi_4v.sym ,代表现在所设计的电路的模块化表示符号.
创建电路默认包含文件:选择菜单File|Create Include File,产生所设计的multi_4v.inc文件.
2、利用74138实现一位全加器的步骤请参考实验一,图形见课本图8-2-4.
七、思考题
1、试用VHDL 语言实现一位全加器.
2、试将一个四位的二进制码(0---F)转化为8421BCD码,并通过七段译码电路将其译码送给发光二极管进行显示 提示:(给出相应的VHDL语言) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY bcd1 IS
PORT(A: IN STD_LOGIC_VECTOR(3 DOWNTO 0); B1: OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); END bcd1;
ARCHITECTURE a OF bcd1 IS BEGIN
PROCESS(A)
BEGIN
IF(A<10) THEN B1<='0'&A; ELSE
B1<='0'&A+6; END IF; END PROCESS;
11
END a;
将以上程序进行编译,仿真成功后进行打包. 然后建立一个*gdf文件,重新建立一个项目.
图2-3 数据LED显示原理图
八、实验报告
要求学生按本实验指导书后附的实验报告格式和要求的内容写出实验报告,实验报告应包括实验预习、实验记录和实验报告等三部分内容。
九、其它说明
1. 学生实验时,应严格准守实验室规则、安全制度和学生实验守则;
2. 认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关规仪器设备,
不要做与本实验无关的事情;
3.做好实验预习、实验记录,并按要求按时完成实验报告。
12
实验三:异步计数器和同步计数器
实验学时:2 实验类型:验证 实验要求:必修 一、实验目的
1、掌握用MSI集成电路和VHDL语言设计计数器的原理. 2、掌握层次化设计的思路. 3、掌握时序电路的设计方法.
二、实验内容
用层次化设计方法设计一个60进制的计数器.
三、实验原理、方法和手段
无
四、实验组织运行要求
根据本实验的特点、要求和具体条件,采用集中讲解和学生动手的形式。
五、实验条件
安装MAXPLUS ++ II 的电脑一台
六、实验步骤
(编译,仿真步骤省略)
1、 设计一个10进制的计数器.(用原理图实现).
图3-1 10进制的原理图 将其打包.
13
2、做一个六进制的计数器.(用VHDL语言来实现). LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY counter6 IS
PORT(ld,clk,clear: IN STD_LOGIC;
data: IN STD_LOGIC_VECTOR(2 DOWNTO 0); Q1: BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0); c: OUT STD_LOGIC); END counter6;
ARCHITECTURE a1 OF counter6 IS BEGIN
c<='1' WHEN Q1=\ PROCESS(clk,ld,clear) BEGIN
IF clear=‘0' THEN Q1<=\
ELSIF ld='1' THEN Q1<=data;
ELSIF(clk 'Event AND clk='0') THEN IF Q1=\ Q1<=\ ELSE
Q1<=Q1+1;
图3-2 60进制的原理图
END IF; END IF;
14