
这道题目需要实现的:
(1) 对2个相邻输入 in[31:0] 进行下降沿检测,比方说,
第1个输入的 in = 32'b0000_0000_0000_0000_0000_0000_0000_0010,
第2个输入的 in = 32'b0000_0000_0000_0000_0000_0000_0000_0000,
可以看到,在 in[1] 这个位置有一个从 1到0 的变化,检测到这个下降沿之后,输出的 out[1] 置为1.
(2) 除非复位,否则输出 out 中的所有高位都需要被保留,简单点说,一旦 out 中的某些位被置为1后,它就会一直保持,只有检测到复位信号,这些位才会重新置为0.
代码实现:
module top_module (
input clk,
input reset,
input [31:0] in,
output [31:0] out
);
reg [31:0] in_next;
always @(posedge clk)
begin
in_next <= in; //打一拍,用寄存器存一下输入信号in
if(reset)
out <= 32'd0;
else
out <= out | ((in_next ^ 32'b0000_0000_0000_0000_0000_0000_0000_0000) & (in ^ 32'b1111_1111_1111_1111_1111_1111_1111_1111)); //检测in_next的高位和in的低位,需要同时满足
end
endmodule
253

被折叠的 条评论
为什么被折叠?



