HDLBits刷题Day11,3.2.1.14 Create circuit from truth table - 3.2.1.16 Detect both edges

文章详细描述了如何利用JK触发器和D触发器设计电路,分别实现正边缘检测、任何边缘检测。通过真值表和代码展示了如何基于时钟周期检测输入信号的变化。
摘要由CSDN通过智能技术生成
3.2.1.14 Create circuit from truth table

问题描述

JK 触发器具有以下真值表。实现一个只有 D 型触发器和门的 JK 触发器。注意:Qold 是正时钟沿之前 D 触发器的输出。

代码:

module top_module (
    input clk,
    input j,
    input k,
    output Q); 
    always @(posedge clk) begin
        case({j,k})
            2'b00: Q <= Q;
            2'b01: Q <= 0;
            2'b10: Q <= 1;
            2'b11: Q <= ~Q;
        endcase
    end
endmodule
3.2.1.15 Detect an edge

问题描述

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

 分析:我们要判断当前时钟周期下输入位为1并且前一个时钟周期下输入位为0,我们可以利用D触发器,将当前输入in滞后一个时钟周期设为previous_in(也是保存了前一个时钟周期的in),与当前输入in进行比较(~previous_in&in //前一个时钟输入位为0当前时钟输入位为1)

代码:

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

 

3.2.1.16 Detect both edges

问题描述

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

分析:和上一题相同,只是输入位无论从0到1还是从1到0都要检测到,previous_in^in //改成异或即可

代码:

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] anyedge
);
    reg [7:0] previous_in;
    always @(posedge clk) begin
        previous_in <= in;
        anyedge <=previous_in^in;
    end
endmodule

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值