数字系统设计与PLD应用实验报告
041020421 夏进
一、实验目的
1、了解并学习HDPLD设计数字系统的设计思路和设计过程。
2、通过自行设计数字系统实例,更好的掌握数字系统设计方法以及设计软件的使用,让书本知识在教学实践中得到成功应用。
二、实验内容
1、高速并行乘法器的设计
(1)实验原理
采用以下算法:被乘数的数值位左移,它和乘数的各个数值位进行累加运算。且用与门、4位加法器来实现。
(2)设计输入
器件选定以后,用相应的设计开发软件(quartus 2),并采用原理图输入方式。图形输入文件如图1所示(使用图形输入方式时应注意软件所能提供的库函数,以便正确调用):
图1
(3)逻辑仿真
逻辑仿真是设计校验的重要步骤。本例使用开发软件的波形编辑器直接画出输入激励波形,启动仿真器,得到显示功能仿真的结果如图2所示:
图2
2、十字路口交通管理器的设计
(1)实验原理
用一片HDPLD和若干外围电路实现十字路口交通管理器。该管理器控制甲乙两道的的红黄绿三色灯,指挥车辆和行人安全通行。该交通管理器是由控制器和受其控制的三个定时器及六个交通管理灯组成。
(2)设计输入
本设计采用分层次描述方式,且用图形输入和文本输入结合的方式建立描述文件。在顶层图形输入文件中的各模块,其功能用第二层次VHDL原文件描述如下:控制器control源文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY traffic_control IS
PORT(
clk:IN STD_LOGIC;
c1,c2,c3:OUT STD_LOGIC;
w1,w2,w3:IN STD_LOGIC;
r1,r2:OUT STD_LOGIC;
y1,y2:OUT STD_LOGIC;
g1,g2:OUT STD_LOGIC;
reset:IN STD_LOGIC);
END traffic_control;
ARCHITECTURE a OF traffic_control IS
TYPE STATE_SPACE IS(S0,S1,S2,S3);
SIGNAL state:STATE_SPACE;
BEGIN
PROCESS(reset,clk)
BEGIN
IF reset='1'THEN
state<=S0;
ELSIF(clk'EVENT AND clk='1')THEN
CASE state IS
WHEN S0=>
IF w1='1'THEN
state<=S1;
END IF;
WHEN S1=>
IF w2='1'THEN
state<=S2;
END IF;
WHEN S2=>
IF w3='1'THEN
state<=S3;
END IF;
WHEN S3=>
IF w2='1'THEN
state<=S0;
END IF;
END CASE;
END IF;
END PROCESS;
c1<='1' WHEN state=S0 ELSE '0';
c2<='1' WHEN state=S1 OR state=S3 ELSE '0';
c3<='1' WHEN state=S2 ELSE '0';
r1<='1' WHEN state=S1 OR state=S0 ELSE '0';
y1<='1' WHEN state=S3 ELSE '0';
g1<='1' WHEN state=S2 ELSE '0';
r2<='1' WHEN state=S2 OR state=S3 ELSE '0';
y2<='1' WHEN state=S1 ELSE '0';
g2<='1' WHEN state=S0 ELSE '0';
END a;
模30计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY count30 IS
PORT(
clk :IN STD_LOGIC;
enable :IN STD_LOGIC;
c :OUT STD_LOGIC);
END count30;
ARCHITECTURE a OF count30 IS
BEGIN
PROCESS(clk)
VARIABLE cnt:INTEGER RANGE 30 DOWNTO 0;
BEGIN
IF(clk'EVENT AND clk='1')THEN
IF enable='1'AND cnt<30 THEN
cnt:=cnt+1;
ELSE cnt:=0;
END IF;
END IF;
IF cnt=30 THEN
C<='1';
ELSE C<='0';
END IF;
END PROCESS;
END a;
模5计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY count05 IS
PORT(
clk :IN STD_LOGIC;
enable :IN STD_LOGIC;
c :OUT STD_LOGIC);
END count05;
ARCHITECTURE a OF count05 IS
BEGIN
PROCESS(clk)
VARIABLE cnt:INTEGER RANGE 05 DOWNTO 0;
BEGIN
IF(clk'EVENT AND clk='1')THEN
IF enable='1'AND cnt<05 THEN
cnt:=cnt+1;
ELSE cnt:=0;
END IF;
END IF;
IF cnt=05 THEN
C<='1';
ELSE C<='0';
END IF;
END PROCESS;
END a;
模26计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY count26 IS
PORT(
clk :IN STD_LOGIC;
enable :IN STD_LOGIC;
c :OUT STD_LOGIC);
END count26;
ARCHITECTURE a OF count26 IS
BEGIN
PROCESS(clk)
VARIABLE cnt:INTEGER RANGE 26 DOWNTO 0;
BEGIN
IF(clk'EVENT AND clk='1')THEN
IF enable='1'AND cnt<26 THEN
cnt:=cnt+1;
ELSE cnt:=0;
END IF;
END IF;
IF cnt=26 THEN
C<='1';
ELSE C<='0';
END IF;
END PROCESS;
END a;
其电路图如图3所示:
图3
(3)逻辑仿真
仿真结果波形文件如图4所示:
图4
三、实验问题与解决方法
实验期间,遇到了很多问题,发现并解决这些问题的过程才是我收获最多的
过程。问题有很多,但归根结底也就是那几类。
粗心大意。编辑过程中(包括文字编辑和图形编辑),由于自身的粗心,连
线忘连,打字拼写错误等等,都会导致编译出错,这时候,通过下面的提示可以
找到出错点,从而进行修改,需要注意的是,错误是与提示相关的地方,有可能
在很上面,不一定就在那,寻找错误时一定要有整体观。
顶层文件设置错误。有时候当工程中好几个文档需要进行仿真验证时,下一个验证的结果总显示上一个的结果,这个时候就需要查看一下顶层文件设置正确与否了。查看时不仅要看general中的设置项,还要看simulator settings中的设置,两者都要保证正确。前者对编译有影响,后者则对波形仿真有影响。
在我实验的过程中,遇到的问题主要就是这两个,当然还会有其他很多的问题,比如软件过期等等,通过解决这些问题,我真的学到了很多知识。
四、实验心得
通过上述两个数字系统的设计,不仅加深了我对课上PLD知识的理解,还让我熟悉了quartus II的操作流程,增强了我们的动手操作及编程能力,知晓了数字系统设计的又一利器,也使我对PLD的兴趣倍增。