ALTERA FPGA设计之带复位的D触发器_基本实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ALTERA FPGA设计之带复位的D触发器_基本实验Quartus II 13.0 SP1 + Modelsim SE-64 10.2c + Cyclone
【姓名学号】
实验目的:
1、熟悉VHDL触发器的设计;
2、了解FPGA基本结构中的触发器。
3、熟悉VHDL test bench(测试平台/测试激励)的设计;
4、熟练掌握Altera FPGA的开发环境、设计步骤和流程。
实验形式:边做实验边写实验报告,实验完成后即提交实验报告。
【描述实验中的设计】
用IF 语句设计D 触发器,实现带复位功能的D触发器。
【实验中设计实现的HDL代码】
library ieee;
use ieee.std_logic_1164.all;
entity exp1 is
port(R:in std_logic;
clk:in std_logic;
D:in std_logic;
Q:out std_logic;
Q0:out std_logic);
end exp1;
architecture arch_exp1 of exp1 is
signal a:std_logic;
begin
process(clk,R)
begin
if(clk'event and clk='1')then
if(R='0')then
a<='0';
else
a<=D;
end if;
end if;
end process;
Q<=a;
Q0<=not a;
end arch_exp1;
【实验中用于仿真的HDL test bench代码】library ieee;
use ieee.std_logic_1164.all;
entity exp1_tb is
end exp1_tb;
architecture arch_Etb of exp1_tb is
component exp1 is
port(R:in std_logic;
clk:in std_logic;
D:in std_logic;
Q:out std_logic;
Q0:out std_logic);
end component;
signal R,clk,D,Q,Q0:std_logic;
begin
u_tb:exp1 port map(R=>R,clk=>clk,D=>D,Q=>Q,Q0=>Q0);
process
begin
R <='0';
D <='0';
wait for 10 ns;
R <='0';
D <='1';
wait for 10 ns;
R <='1';
D <='0';
wait for 10 ns;
R <='1';
D <='1';
wait for 10 ns;
R <='1';
D <='0';
wait;
end process;
clk_stimulus:process
begin
clk <='0';
wait for 4 ns;
clk <='1';
wait for 4 ns;
end process clk_stimulus;
end arch_Etb;
【实验中设计的功能仿真结果及分析】
功能仿真结果分析:从上图中的仿真结果可以看出,0 ns~20ns 输入R为低电平’0’,4 ns时,clk 遇到上升沿,电路复位;20ns以后输入R为高电平’1’;30ns~40ns,输入D 为高电平‘1’,36ns 时,clk为上升沿,输出Q置为D即高电平‘1’,输出Q0置为D的非即低电平‘0’。功能仿真结果正好验证了我们设计的带复位功能的D触发器是正确的。
【实验中设计的时序仿真结果及分析】(注意建立时间和保持时间)
时序仿真结果分析:从上图中的仿真结果可以看出,0 ns~20ns 输入R为低电平’0’,4 ns时,clk 遇到上升沿,电路复位延迟到7.6ns才发生;20ns以后输入R为高电平’1’;30ns~40ns,输入D 为高电平‘1’,36ns时,clk为上升沿,输出Q置为D即高电平‘1’,输出Q0置为D的非即低电平‘0’,二者都延时到48ns才发生。时序仿真结果同样验证了我们设计的带复位功能的D触发器是正确的。
【实验中设计的RTL级电路结构及分析】
只含有一个触发器,R作为复位信号,clk 上升沿触发。
【实验中设计的硬件验证结果及分析】
R和D设置为K1,K2,Q和Q0设置为L1,L2,时钟信号由单步时钟输入B18:Step控制。经验证硬件电路满足上述表格关系,实验成功。
【列出实验中遇到的问题及解决情况】
1、开始时编程得到的RTL电路中含有两个触发器,是因为代码为“Q=D,Q0=not D“,老师要求不能用
inout端口,故改用signal,将信号量赋值给D,“Q=a,Q0=not a”,问题解决。
2、功能仿真中Q和Q0的输出总是慢半个周期,几乎可以看做是下降沿触发,经老师提醒,发现自
己在信号量复制给输出量是代码位置有误,应放在end process之后,仅仅放在end if之后仍会影响输出。。
【实验总结】
这次实验我做了两个晚上,第一次做时,因为没有找出功能仿真错误所在,所以决定第二天再来试一次,最后在老师的帮助下完成了实验。这次实验让我印象深刻,同时也学到了很多知识,以后做实验硬胆大心细多思考,稍不注意的小错误都可能导致结果不正确。