HDLbits刷题Day17(Create circuit from truth table~ Dual-edge triggered flip-flop)

3.2.1.14 Create circuit from turth table
问题陈述:

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

Verilog代码:

module top_module (
    input clk,
    input j,
    input k,
    output Q); 
    wire D;
    assign D=j&~Q|~k&Q;
    always @(posedge clk)
        begin
            Q<=D;
        end
endmodule

3.2.1.15 Detect and edge
问题陈述:

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

请添加图片描述

Verilog代码:

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

endmodule

3.2.1.16 Detect an edge
问题陈述:

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

这里有些例子。为清楚起见,in[1] 和 pedge[1] 分别显示。请添加图片描述

Verilog代码:

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

endmodule

3.2.1.17 Detect both edges
问题陈述:

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

这里有些例子。为清楚起见,in[1] 和 anyedge[1] 分别显示
请添加图片描述

Verilog代码:

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

endmodule

3.2.1.18 Edge capture register
问题陈述:

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

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

在下面的示例波形中,为清楚起见,reset、in[1] 和 out[1] 再次分别显示。请添加图片描述

Verilog代码:

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

3.2.1.19 Dual-edge triggered flip-flop
问题陈述:

您熟悉在时钟上升沿或时钟下降沿触发的触发器。在时钟的两个边沿触发双边触发触发器。但是,FPGA 没有双边触发触发器,并且始终不接受
@(posedge clk 或 negedge clk)作为合法的敏感度列表。 构建一个功能类似于双边触发触发器的电路:
请添加图片描述

(注意:它不一定完全等效:触发器的输出没有毛刺,但模拟这种行为的更大组合电路可能会。但我们将在这里忽略这个细节。)

Verilog代码:

module top_module (
    input clk,
    input d,
    output q
);
	reg q0,q1;
    always@(posedge clk)
        begin
            q0<=d;
        end
    always@(negedge clk)
        begin
            q1<=d;
        end
    assign q=clk?q0:q1;
endmodule
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值