请问怎么用verilog语言来判断一个输入信号是持续高电平还是时钟信号,请大侠指点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问怎么用verilog语言来判断一个输入信号是持续高电平还是时钟信号,请大侠指点相关的知识,希望对你有一定的参考价值。
参考技术A 边沿检测,假如要检测的信号是a:if(posedge clk)
a1 <= a;
assign edge_sig = a1^a;
使用Verilog如何设计一个上升沿检测器?
设计一个模块:当输入信号端(位宽1位)出现上升沿跳变时,执行相应操作?请问该如何实现检测该上升沿检测?
疑问1:可以使用posedge+端口名称来实现上升沿检测吗?我看了好多程序中posedge后面都跟的是时钟?
要检测信号上升沿的话,可以采用以下方法:
always@(posedge clk or negedge rst)
if(!rst)
begin sign_1b <= 1'b0; sign_2b <= 1'b0; end
else
begin sign_1b <= sign; sign_2b <= sign_1b; end
always@(posedge clk or negedge rst)
if(!rst)
sign_pos <= 1'b0;
else if (sign_2b && !sign_1b)
sign_pos <= 1'b1;
else
sign_pos <= 1'b0; 参考技术A Posedge用来作为时钟使用的。相当于触发器的时钟输入端。
要检测信号上升沿的话,可以采用以下方法:
always@(posedge clk or negedge rst)
if(!rst)
begin sign_1b <= 1'b0; sign_2b <= 1'b0; end
else
begin sign_1b <= sign; sign_2b <= sign_1b; end
always@(posedge clk or negedge rst)
if(!rst)
sign_pos <= 1'b0;
else if (sign_2b && !sign_1b)
sign_pos <= 1'b1;
else
sign_pos <= 1'b0; 参考技术B 答:
如果你是有clk的同步时序电路,那么不允许使用posedge + 端口名称的方式来生成边沿检测
电路。
所谓边沿检测就是对前一个clock状态和目前clock状态的比较,如果是由0变为1,能够检测
到上升沿,则称为上升沿检测电路(posedge edge detection circuit),若是由1变为0,能够
检测到下降沿,则被称为下降沿检测电路(negedge edge dttection circuit),能够同时检测
上升沿与下降沿的电路称为双沿检测电路(double edge detection)。
照这个原理,下面的代码是一个上升沿检测电路,巧妙运用了非阻塞赋值自动产生寄存器的
特性。下降沿检测电路只需把 pedge <= in & ~d_last; 改为 pedge <= ~in & d_last;
即可。双沿检测电路只需把 pedge <= in & ~d_last; 改为 pedge <= in ^ d_last;
(异或)即可。
module top_module(
input clk,
input [7:0] in,
output reg [7:0] pedge);
reg [7:0] d_last;
always @(posedge clk) begin
d_last <= in; // 保存上一个状态
pedge <= in & ~d_last; //in的数据变化后有上升沿时,pedge变1
end
endmodule
以上是关于请问怎么用verilog语言来判断一个输入信号是持续高电平还是时钟信号,请大侠指点的主要内容,如果未能解决你的问题,请参考以下文章
verilog hdl中有了posedge和negedge为啥还要用脉冲边沿检测?。
verilog 中啥语句并行运行啥时候顺序运行!搞不懂 请教高手!