1.用verilog实现1bit信号边沿检测功能,输出一个周期宽度的脉冲信号
定义了一个2位的寄存器变量data_r,data_r[0]用来存储当前的状态,data_r[1]用来存储上一拍的状态
每个时钟到来的时候,向左移位,相对于当前时钟的上上拍信号舍弃掉,只保留相对于当前时钟上一拍的状态,存储在data_r的高位上,即data_r[1]表示的是上一拍的状态
2.hdlbits中的题 detect an edge;下面代码是用来检测上升沿的,比上面的代码容易理解一些;
用的是 ‘&’
module top_module (
input clk,
input [7:0] in,
output [7:0] pedge
);
reg [7:0] temp;
always @ (posedge clk)
begin
temp <= in; //temp始终比in晚一个周期
pedge <= ~temp & in; //当输出为1时检测到上升沿
end
endmodule
3.hdlbits中的题,detect both edges,上升沿和下降沿都检测
用的是‘^’
module top_module (
input clk,
input [7:0] in,
output reg [7:0] anyedge
);
reg [7:0] in_temp;
always @ (posedge clk)
begin
in_temp <= in;
anyedge <= in ^ in_temp;
end
endmodule