刚学习FPGA电平边沿检测遇到一个问题,希望高手指点迷津。
先举一个边沿检测例子:regdly0;regdly1;wiredc_clk;always@(posedgeclkornegedgerst)beginif(!rst)beg...
先举一个边沿检测例子:
reg dly0;
reg dly1;
wire dc_clk;
always @(posedge clk or negedge rst)
begin
if(!rst)begin
dly0 <= 1'b0;
dly1 <= 1'b0;
end
else begin
dly0 <= fpga_io;\\fpga_io为待测脉冲
dly1 <= dly0;
end
end
assigndc_clk= dly1 ^ dly0;//fpga_io边沿检测信号
注意dly0为始终为后进信号!!!
我的问题:
else begin
dly0 <= fpga_io;\\fpga_io为待测脉冲
dly1 <= dly0;
end
这几句是顺序执行,那么dly1不就和dly0一直相等了吗?不太明白!!!
————————————————————————
再举一个例子:
有的人这样写,
module posedge_detection (
2 input clk,
3 input rst_n,
4 input i_data_in,
5 output o_rising_edge
6 );
7
8 reg r_data_in0;
9 reg r_data_in1;
10
11 assign o_rising_edge = ~r_data_in0 & r_data_in1;
12
13 always@(posedge clk, negedge rst_n) begin
14 if (!rst_n) begin
15 r_data_in0 <= 0;
16 r_data_in1 <= 0;
17 end
18 else begin
19 r_data_in0 <= r_data_in1;
20 r_data_in1 <= i_data_in;
21 end
22 end
23
24 endmodule
这时候,第18行
18 else begin
19 r_data_in0 <= r_data_in1;
20 r_data_in1 <= i_data_in;
21 end
这时候,顺序执行下来, r_data_in0,与 r_data_in1 可能会不一样,会实现边沿检测。
我个人接受第二个例子,不太理解第一个例子,请高手解释一下,谢谢!!
第二个例子中
18 else begin
19 r_data_in0 <= r_data_in1;
20 r_data_in1 <= i_data_in;
21 end
r_data_in0先进信号
r_data_in1后进信号 展开
reg dly0;
reg dly1;
wire dc_clk;
always @(posedge clk or negedge rst)
begin
if(!rst)begin
dly0 <= 1'b0;
dly1 <= 1'b0;
end
else begin
dly0 <= fpga_io;\\fpga_io为待测脉冲
dly1 <= dly0;
end
end
assigndc_clk= dly1 ^ dly0;//fpga_io边沿检测信号
注意dly0为始终为后进信号!!!
我的问题:
else begin
dly0 <= fpga_io;\\fpga_io为待测脉冲
dly1 <= dly0;
end
这几句是顺序执行,那么dly1不就和dly0一直相等了吗?不太明白!!!
————————————————————————
再举一个例子:
有的人这样写,
module posedge_detection (
2 input clk,
3 input rst_n,
4 input i_data_in,
5 output o_rising_edge
6 );
7
8 reg r_data_in0;
9 reg r_data_in1;
10
11 assign o_rising_edge = ~r_data_in0 & r_data_in1;
12
13 always@(posedge clk, negedge rst_n) begin
14 if (!rst_n) begin
15 r_data_in0 <= 0;
16 r_data_in1 <= 0;
17 end
18 else begin
19 r_data_in0 <= r_data_in1;
20 r_data_in1 <= i_data_in;
21 end
22 end
23
24 endmodule
这时候,第18行
18 else begin
19 r_data_in0 <= r_data_in1;
20 r_data_in1 <= i_data_in;
21 end
这时候,顺序执行下来, r_data_in0,与 r_data_in1 可能会不一样,会实现边沿检测。
我个人接受第二个例子,不太理解第一个例子,请高手解释一下,谢谢!!
第二个例子中
18 else begin
19 r_data_in0 <= r_data_in1;
20 r_data_in1 <= i_data_in;
21 end
r_data_in0先进信号
r_data_in1后进信号 展开
若以下回答无法解决问题,邀请你更新回答
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询