HDLBits-Edgecapture

HDLBits-Edgecapture_第1张图片该题的特点就是Capture" means that the output will remain 1 until the register is reset (synchronous reset).

一开始错误的原因是:

        该题中的输出和输入是

input [31:0] in,
output [31:0] out

都是32位的向量,这里的remains 1 指的是 针对每一bit

由于我刚开始写的代码判断 ~in & in_last 非0时,out端就重新赋值,那么就会导致:

        eg:  之前out是 0011_0101   

                  现在out是 1100_1010

正确的结果:                1111_1111

我写的代码的结果      1100_1010

区别就是  正确的代码思路是 按位进行运算, 如果之前是1 那么保持不变(除非reset到来)

如果之前是0 若现在输出为1 则将其置为1.

正确的代码如下:

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

   
endmodule

精华就是   

        out <= out | in_last &~in;

你可能感兴趣的:(FPGA,fpga开发)