硬件描述语言实验八:触发器实验

预习报告部分

  • 实验目的:初步练习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,每按动一次单步时钟按钮,将产生一个时钟方波脉冲。

  • 实验内容:
  1. 设计一个同步清零的JK触发器,实体名称为“ff_jk”,其引脚名称和逻辑功能如上表所示
  2. 设计一个同步置数、异步清零的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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值