问题点就是dfr的确定。第一感觉dfr是导函数,所以先定义一个延迟信号s_reg。
然后原题中是previous>current时,dfr <=1。
延迟信号s_reg是原信号的延迟,所以是在同一个clk下的s前一时刻值。所以求导的话应该是s - s_reg;而不是s_reg - s.
所以原题中意思=》 if (s_reg > s) dfr <= 1’b1;
故这一段应该是
always@(posedge clk) begin
if (reset) dfr <= 1’b1;
else if (s_reg > s)
dfr <= 1’b1;
else if (s_reg < s) dfr <= 1’b0;
end
module top_module (
input clk,
input reset,
input [3:1] s,
output fr3,
output fr2,
output fr1,
output dfr
);
reg [3:1] s_reg;
always@(posedge clk)
if(reset)
{fr3,fr2,fr1} <= 4'b1111;
else case(s)
3'b111 : {fr3,fr2,fr1} <= 3'b000;
3'b011 : {fr3,fr2,fr1} <= 3'b001;
3'b001 : {fr3,fr2,fr1} <= 3'b011;
default: {fr3,fr2,fr1} <= 3'b111;
endcase
always@(posedge clk) begin
if (reset)
s_reg <= 0;
else s_reg <= s;
end
always@(posedge clk) begin
if (reset) dfr <= 1'b1;
else if (s_reg > s)
dfr <= 1'b1;
else if (s_reg < s) dfr <= 1'b0;
end
endmodule