HDLBits练习汇总-10-时序逻辑设计测试--锁存器和触发器(二)

简介: HDLBits练习汇总-10-时序逻辑设计测试--锁存器和触发器

从真值表创建电路


JK 触发器具有以下真值表。仅使用 D 型触发器和门实现 JK 触发器。注:Qold 是时钟正沿前 D 触发器的输出。

image.png

Module Declaration

module top_module (
    input clk,
    input j,
    input k,
    output Q); 

答案:

module top_module (
    input clk,
    input j,
    input k,
    output Q); 
    always @(posedge clk)begin
        if({j,k}==2'b00)begin
           Q<=Q; 
        end
        else if({j,k}==2'b01)begin
           Q<=0; 
        end
        else if({j,k}==2'b10)begin
           Q<=1; 
        end
        else begin
           Q<=!Q; 
        end
    end
endmodule

边沿检测(上升沿)


对于 8 位向量中的每一位,检测输入信号何时从一个时钟周期内的 0 变为下一个时钟周期的 1(类似于正沿检测)。输出位应在发生 0 到 1 转换后的周期设置。

这里有一些例子。为了清楚起见,分别显示了 in[1] 和 pedge[1]。

image.png

Module Declaration

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);

答案:

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);
    reg [7:0] in_d1,in_d2;
    assign pedge = in_d1&(~in_d2);
  always @(posedge clk)begin
        in_d1 <= in;
        in_d2 <= in_d1;
    end
endmodule

边沿检测(双沿检测)


对于 8 位向量中的每一位,检测输入信号何时从一个时钟周期变为下一个时钟周期(检测任何边沿)。输出位应在发生 0 到 1 转换后的周期设置。

这里有一些例子。为了清楚起见,分别显示了 in[1] 和 anyedge[1]

image.png

Module Declaration

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] anyedge
);

答案:

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] anyedge
);
  reg [7:0] in_d1,in_d2;
    assign anyedge = (in_d1&(~in_d2)) | ((~in_d1)& in_d2);
  always @(posedge clk)begin
        in_d1 <= in;
        in_d2 <= in_d1;
    end
endmodule

边沿捕获


对于 32 位向量中的每一位,当输入信号在一个时钟周期内从 1 变为下一个时钟周期时捕获。“捕获”表示输出将保持为 1,直到寄存器复位(同步复位)。

每个输出位的行为就像一个 SR 触发器:输出位应在 1 到 0 转换发生后的周期设置(为 1)。当复位为高电平时,输出位应在时钟正沿复位(为 0)。如果上述两个事件同时发生,则重置优先。在下面示例波形的最后 4 个周期中,‘reset’ 事件比 ‘set’ 事件早一个周期发生,因此这里没有冲突。

在下面的示例波形中,为清楚起见,再次分别显示了复位、输入 [1] 和输出 [1]。

image.png

Module Declaration

module top_module (
    input clk,
    input reset,
    input [31:0] in,
    output [31:0] out
);

答案:

module top_module (
    input clk,
    input reset,
    input [31:0] in,
    output [31:0] out
);
  reg [31:0] in_d1,in_d2;    
  always @(posedge clk)begin
        in_d1 <= in;
        in_d2 <= in_d1;
    end
  always @(posedge clk)begin
        if(reset==1)
            out <= 0;
        else if((|((~in) & in_d1)) == 1)
            out <= (~in) & in_d1 | out;
        else
            out <= out;
    end
endmodule

双沿触发器


您熟悉在时钟的正沿或时钟的负沿触发的触发器。双边沿触发触发器在时钟的两个边沿触发。但是,FPGA 没有双边沿触发的触发器,并且始终不接受@(posedge clk 或 negedge clk)作为合法的敏感列表。

构建一个功能类似于双边沿触发触发器的电路:

image.png

Module Declaration

module top_module (
    input clk,
    input d,
    output q
);

答案:

module top_module (
    input clk,
    input d,
    output q
);
    reg q1,q2;
    assign q = (clk)?q1:q2;
    always @ (posedge clk)begin
      q1 <= d;
    end
    always @ (negedge clk)begin
      q2 <= d;
    end
endmodule


目录
相关文章
|
7月前
|
存储 缓存 网络协议
dpdk课程学习之练习笔记二(arp, udp协议api测试)
dpdk课程学习之练习笔记二(arp, udp协议api测试)
194 0
|
SQL 安全 网络安全
交易所开发测试版丨交易所系统开发规则玩法/架构设计/项目步骤/方案逻辑/案例解析/源码部署
The development process of the exchange system involves multiple steps and links. The following is the detailed process and steps for the development of the exchange system:
|
28天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
45 2
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
57 4
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
43 2
|
4月前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之复杂的业务逻辑设计有效的单元测试如何解决
SpringBoot单元测试快速写法问题之复杂的业务逻辑设计有效的单元测试如何解决
|
5月前
|
测试技术
详解单元测试问题之@InjectMocks注解的执行逻辑如何解决
详解单元测试问题之@InjectMocks注解的执行逻辑如何解决
108 1
|
5月前
|
测试技术 UED
软件测试的科学与艺术:从数据导向到逻辑严密的实践
本文旨在探讨软件测试领域中数据导向和逻辑严密性的重要性,并分析如何通过科学严谨的方法提升测试效率和质量。文章首先概述了软件测试的基本概念和挑战,随后深入讨论了数据在测试设计和结果分析中的关键作用,以及如何利用逻辑推理来构建有效的测试案例和识别潜在缺陷。最后,本文提出了一系列实践建议,旨在帮助测试人员更好地整合数据驱动和逻辑推理方法,以实现软件测试的最优化。
48 0
|
5月前
|
Java jenkins 持续交付
Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试
【7月更文挑战第1天】Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试。成功后,Jenkins执行部署任务,发布到服务器或云环境。使用Jenkins能提升效率,保证软件质量,加速上线,并需维护其稳定运行。
137 0
|
6月前
|
SQL 存储 关系型数据库
MySQL的触发器创建与使用——使用Baidu Comate生成与触发测试完整过程
MySQL的触发器创建与使用——使用Baidu Comate生成与触发测试完整过程
43 0

热门文章

最新文章