Verilog HDL 笔试 & 面试常考代码精选(一)

Q:用Verilog HDL实现1bit信号边沿检测功能,输出一个周期宽度的脉冲信号。

这里是微信公众号的链接:Verilog笔面试常考代码精选10题

A:

一、原理

 

脉冲边沿的特性:两侧电平发生了变化,如上图所示一个脉冲,既有上升沿还有下降沿。

如果检测的是下降沿,也就是按键检测,应该是从高电平变低电平。

思路:设计两个或多个一位的寄存器,用来接收被检测的信号,系统时钟来一次记一次输入信号,如果用了两个寄存器直接异或就可以了。

如果不为0,则发生了边沿,再拼接,拼接顺序假定是{先进reg,后进reg},则若先进reg=1,后进位0,则是下降沿,即{先进reg,后进reg}=2’b10。

同理相反{先进reg,后进reg}=2’b01,则为上升沿。如果用了多个寄存器则可以更好地检测,防止干扰脉冲

二、代码实现 


 

module Edge_Detect(
   input       clk,
   input       rst_n,
   input       data,
   output      pos_edge,    // 上升沿
   output      neg_edge,    // 下降沿
   output      data_edge    // 上升沿或下降沿
   );

reg     [1:0]   data_r;
always @(posedge clk or negedge rst_n)begin
   if(rst_n == 1'b0)begin
       data_r <= 2'b00;
   end
   else begin
       data_r <= {data_r[0], data};
   end
end

assign  pos_edge = ~data_r[1] & data_r[0];
assign  neg_edge = data_r[1] & ~data_r[0];
assign  data_edge = pos_edge | neg_edge;

endmodule

 

你可能感兴趣的:(Verilog HDL 笔试 & 面试常考代码精选(一))