上升沿和下降沿信号发生器Verilog代码

使用两个状态机,一个只在时钟上升沿工作,另一个只在时钟下降沿工作,两个信号相与后产生输出信号。这个电路没有除时钟和复位以外的其他输入信号。

设计代码

`timescale 1ns / 1ps
module Test1448(clk,reset,dout);
input clk;
input reset;
output dout;
reg [1:0] pr_state1,nx_state1;
reg [1:0] pr_state2,nx_state2;
reg dout1,dout2;
parameter s0=0,s1=1,s2=2;

/
always @(posedge clk or posedge reset)
   if(reset)
      pr_state1<=s0;
   else
      pr_state1<=nx_state1;
/
always @(negedge clk or posedge reset)
   if(reset)
      pr_state2<=s0;
   else
      pr_state2<=nx_state2;
/
always @(pr_state1)
   case(pr_state1)
   s0:begin dout1=1; nx_state1=s1;
      end
   s1:begin dout1=1; nx_state1=s2;
      end
   s2:begin dout1=0; nx_state1=s0;
      end
   default:nx_state1=s0;
   endcase
/
always @(pr_state2)
   case(pr_state2)
   s0:begin dout2=0; nx_state2=s1;
      end
   s1:begin dout2=1; nx_state2=s2;
      end
   s2:begin dout2=1; nx_state2=s0;
      end
   default:nx_state2=s0;
   endcase
assign dout=dout1&dout2;
endmodule

测试代码

`timescale 1ns / 1ps
module Test1507;
reg clk;
reg reset;
wire dout;
Test1448 x1(.clk   (clk  ),
            .reset (reset),
            .dout  (dout ));
always begin
   #15 clk=1;
   #15 clk=0;
end

initial begin
   clk=0;
   reset=1;
   #5;
   reset=0;
   #1000;
end
endmodule

产生波形
VIVADO仿真波形
波形图中dout的输出结果是dout1和dout2的与的结果。

猜你喜欢

转载自blog.csdn.net/Hennys/article/details/107529076