预习报告部分
- 实验目的:初步练习VHDL语言时序逻辑的描述方法,即触发器的描述方法。
- 实验原理:
1.一个同步清零的JK触发器,实体名称为“ff_jk”,其引脚名称和逻辑功能如下表所示。
输入 | 输出 | ||||
clk | clr | j | k | q | nq |
↑ | 0 | X | X | 0 | 1 |
↑ | 1 | 0 | 0 | 保持 | 保持 |
↑ | 1 | 0 | 1 | 0 | 1 |
↑ | 1 | 1 | 0 | 1 | 0 |
↑ | 1 | 1 | 1 | 翻转 | 翻转 |
0,1,↓ | X | X | X | 保持 | 保持 |
2、一个D触发器,实体名称为“ff_d”,其引脚名称和逻辑功能如下表所示。
输入 | 输出 | ||||
clk | set | clr | d | q | nq |
X | X | 0 | X | 0 | 1 |
↑ | 0 | 1 | X | 1 | 0 |
↑ | 1 | 1 | 0 | 0 | 1 |
↑ | 1 | 1 | 1 | 1 | 0 |
0,1,↓ | 1 | 1 | X | 保持 | 保持 |
在图表中:
1、’↑’是上升沿。
2、保持即为信号状态不发生变化,具体描写时不用对信号有任何赋值。
3、单步时钟输入引脚是引脚 211,每按动一次单步时钟按钮,将产生一个时钟方波脉冲。
- 实验内容:
- 设计一个同步清零的JK触发器,实体名称为“ff_jk”,其引脚名称和逻辑功能如上表所示
- 设计一个同步置数、异步清零的D触发器,实体名称为“ff_d”,其引脚名称和逻辑功能如上表所示。
- 实验所用设备:PC个人计算机、Windows操作系统、Quartus II集成开发环境软件、HDLE-2实验箱。
- 实验步骤:①建立工程、②编辑代码、③编译及修改错误、④建立仿真波形并仿真、⑤根据仿真结果分析设计是否正确、⑥写入HDLE-2实验箱FPGA,观察实验结果。
实验报告部分
- 实验步骤:
JK触发器:
D触发器:
- 实验数据及结果分析:
JK触发器:
D触发器:
通过对多组实验数据的分析,判断其符合预期结果。如图所示,并且结果符合实验预期。
- 实验结论:
实验结果表明,VHDL编写的触发器能够实现稳定的状态转换和数据存储功能。
VHDL语言的结构化设计方法和模块化开发思路,使得实验中的触发器设计更加清晰和可维护。
- 总结及心得体会:
实验中,使用VHDL语言进行仿真和测试的过程,可以帮助我们更好地理解和验证所设计的触发器的功能。VHDL触发器实验的成功完成,增强了我们对数字电路、时序逻辑和状态机等相关知识的理解和应用能力。实验中出现的问题和错误,也帮助我们学会了如何调试和修改VHDL代码,提高了我们的问题解决能力。通过实验,我们不仅掌握了VHDL语言的基本语法和设计方法,同时我也加深了对数字电路和逻辑设计的理解。
- 附录(实验源码)
JK触发器:
library ieee;
use ieee.std_logic_1164.all;
entity ff_jk is
port (clk,clr,j,k:in std_logic;
q,nq:buffer std_logic
);
end ff_jk;
architecture rtl1 of ff_jk is
begin
process(clk) is
begin
if(clk'event and clk='1') then
if(clr='0') then
q<='0';
nq<='1';
else
if((j='0')and(k='1'))then
q<='0';
nq<='1';
elsif((j='1')and(k='0'))then
q<='1';
nq<='0';
elsif((j='1')and(k='1'))then
q<=not q;
nq<=not nq;
end if;
end if;
end if;
end process;
end rtl1;
D触发器:
library ieee;
use ieee.std_logic_1164.all;
entity ff_d is
port(clk2,set,clr2,d:in std_logic;
q,nq:buffer std_logic
);
end entity;
architecture rtl2 of ff_d is
begin
process(clk2,clr2) is
begin
if(clr2='0')then
q<='0';
nq<='1';
else
if(clk2'event and clk2='1')then
if(set='0')then
q<='1';
nq<='0';
elsif(d='0'and set='1')then
q<='0';
nq<='1';
elsif(d='1'and set='1')then
q<='1';
nq<='0';
end if;
end if;
end if;
end process;
end rtl2;