序列信号发生器的设计与实现
北京邮电大学
数字电路与逻辑设计实验报告
姓名: 李金隆
学号: 09210947--15
班级: 2009211204
学院: 电子工程学院
2011年5月1日
序列信号发生器的设计与实现
一、 实验名称:序列信号发生器的设计与实现
二、 实验任务要求:
1、 用VHDL语言设计实现一个信号发生器,产生的序列码为
01100111,仿真验证其波形,并下载到实验板测试。
2、 用VHDL语言设计实验一个序列长度为7的M序列发生器,
仿真验证其功能,并下载到实验班测试。
三、 设计思路与过程
1、 序列信号发生器
序列信号发生器的端口由一个时钟输入和两个输出,信号序列输出q_out和时钟输出clk_outt组成。程序由两个进程构成,第一个进程p1描述状态逻辑,使用if语句实现自启动;第二个进程p2描述输出逻辑,用case语句完成其功能。根据题目要求,在第1、4、5位置上输出为“0”,在其他位置上输出为“1”,每8位实现一次循环。
在实验过程中,首先在建立Quartus II软件中建立工程,然后再工程中建立VHDL文件,输入程序代码后保存调试,编译成功后,建立Vector Waveform文件进行仿真,仿真完毕后,在程序中引入分频器,编译,锁定引脚后,下载到实验板验证其功能。在实验板上用一个开关代表clear清零,两个LED一个显示输出序列,一个显示时钟序列clk_outt。
2、 M_序列信号发生器
M_序列信号发生器的端口由一个时钟输入clk和两个信号输出,
序列信号发生器的设计与实现
时钟输出clk_outt和序列信号输出q_out组成,进程p1描述状态逻辑,用if语句完成循环。实验过程与实验1类似。
四、 VHDL程序源代码
1、 序列信号发生器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity xinhao IS
port
(
clk:in std_logic;
clear:in std_logic;
q_out:out std_logic;
clk_outt:out std_logic
);--用户定义的输入输出及类型
end xinhao;
architecture a of xinhao is
component div50m
port
(
clk_in:in std_logic;
clk_out:out std_logic
);--用户定义分频器的输入输出及类型
end component;
signal tmp: integer range 0 to 7;
signal clock: std_logic;--用户定义的信号及其类型
begin
u1: div50m port map(clk_in=>clk,clk_out=>clock);--分频器的引入
p1:process(clock)--第一个进程p1描述状态逻辑
begin
if clock'event and clock='1' then
if tmp=7 then
tmp<=0;
else
序列信号发生器的设计与实现
tmp<=tmp+1;
end if;
end if;
end process p1;
p2: process(clear,tmp)—第二个进程描述输出逻辑
begin
if clear='0' then
q_out<='0';
else
case tmp is
when 0|3|4 =>q_out<='0';
when others =>q_out<='1';
end case;
end if;
end process p2;
clk_outt<=clk;
end a;
2、M序列信号发生器
library IEEE;
USE IEEE. std_logic_1164.all;
entity m_xulie is
port (
clk:in std_logic;
q_out:out std_logic;
clk_outt:out std_logic);--用户定义的输出输入及类型
end m_xulie;
architecture a of m_xulie is
component div50m
port
(
clk_in:in std_logic;
clk_out:out std_logic
);--用户定义分频器的输入的输出及类型
end component;
signal tmp:std_logic_vector (2 downto 0);
signal clock: std_logic;
begin
u1: div50m port map(clk_in=>clk,clk_out=>clock);--分频器的引入 p1:process(clk)—第一个进程P1描述状态逻辑
序列信号发生器的设计与实现
begin
if tmp= "000" then tmp <="001";
elsif clk'event and clk ='1' then
tmp(0)<=tmp(0) xor tmp(2);
tmp(1)<=tmp(0);
tmp(2)<=tmp(1);
end if;
end process p1;
q_out<=tmp(2);--数列信号的输出
clk_outt<=clk;
end a;
五、 RTL电路图
1、 序列信号发生器
2、 M_序列信号发生器
序列信号发生器的设计与实现
六、 仿真波形及其分析
1、序列信号发生器
从波形仿真图中可以看出,在时钟信号的上升沿,输出信号序列开始按01100111变化,当clear清零时,序列输出q_out也为“0”,时钟输出clk_outt相对于时钟输入clk有一定的时间延迟。
2、M序列信号发生器
由波形仿真图可以看出,序列长度为7的M序列信号发生器的输出序列为1110100,在时钟信号的上升沿开始变化,时钟输出clk_outt相对于时钟输入clk有一定的时间延迟。
序列信号发生器的设计与实现
七、 故障及问题分析
1、 VHDL语言编译问题
编译过程中的主要问题是文件命名时遇到的问题,在语句输入完毕后,存盘时文件名必须与实体名一致。
2、 波形仿真问题
实验时,要先进行波形仿真,再引入分频器,如果加入分频器后再进行仿真则无法得到仿真波形。在设置时间时,我刚开始用的是微秒级,虽然可以都到正确的波形,但时钟信号的延迟无法区别出来,当我把仿真时间改成纳秒级则可以很明显的看出时钟信号的延迟。
3、 下载问题
当引脚锁定后要编译后在菜单Tool中选择Programmer进行下载,下载完毕后发现得不到正确的结果,改变引脚设置,重新下载。实验板有些引脚对应的器件可能已经损坏。
八、 总结与结论
本学期的数字电路与逻辑设计实验共四次,除了第一次以外,其他几次实验都是通过软件Quartus II完成的。在第二次实验中,我们学习了软件的图形输入;第三次实验由两部分组成,VHDL组合逻辑电路设计和VHDL时序逻辑电路;第四次实验,序列信号发生器的设计与实现是一个相对综合一些的实验。
在实验过程中用到了VHDL语言,VHDL是Very-High-Speed Integrated Circuit HardwareDescription Language(超高速集成电路硬件描述语言)的缩写。它是一种用于电路设计的高级语言,VHDL
序列信号发生器的设计与实现
具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。
通过三次上机实验,我对Quartus II软件的基本功能及操作有了一定的了解,能够独立的完成一些程序的设计;对数字电路与逻辑设计这门课程有了新的认识,知道了一些数字电路与逻辑设计的运用,如交通灯控制器、数字温度计等等。同时实验和理论的结合加深了我对数字电路与逻辑设计理论知识的理解,很多不懂的地方通过实验中的直观感受都能弄清楚,搞明白。此外,我自主学习,发现问题、解决问题的能力得到了显著的提高。