verilog / DAC_SPI


verilog

・1 DAC_SPI

module DAC_SPI(
    CLK,
    reset ,
		SW1,
		SW2,
		CS,
		seg7_n,
		counter4,
		counter5,
		countera5,
			SCK,
		sck_out,
		SDATA,
		SOUT,
		PRL_N
		
  );
//******入出力******//
 input   CLK;
 input   reset ;
	input   SW1	;
  input   SW2 ;	
	output  CS ;
	output[7:0]  seg7_n ;
	output[3:0]  counter4 ;
	output[4:0]  counter5 ;
	output[5:0]  countera5 ;
	output SCK ;
	output sck_out ;	
	output[15:0] SDATA ;
	output SOUT;
	output[15:0] PRL_N ;
//******内部ノード******//
  reg [31:0] sec_cnt ;//1秒作成用カウンタ
 reg[3:0]   reg_counter4 ; //ボタン入力回数
 reg[4:0]   reg_counter5 ;//16bit 1フレーム作成
 reg[4:0]   reg_countera5 ;
 reg        sw2_counter ;
 reg         frame ;//16bit 1フレームフラグ 
 reg         sck ;//sckのcs lowのときのマスク
	reg[7:0]   reg_seg7 ;//7segへの出力バッファ
	reg[15:0]   prl_n ;
	reg[15:0]   sdata ;
	reg         sckmask ;
//******内部回路******//
//initial frame <= 1'b1 ;
//initial reg_counter5 <= 5'b00000 ;
//initial prl_n= 16'hF0F0 ;
//
//カウンタ部
//基準クロックカウンタ//

//parameter   F33M000_cnt=32'h00fbc520 ;//0.5秒ごとの変化
// parameter   F33M000_cnt=32'h00000010 ;//0.5秒ごとの変化  
/**********************/
/*1秒カウンタ部         */
/**********************/
always @( posedge CLK )
if( reset == 1'b0)
sec_cnt <= 32'b0; 
else begin
sec_cnt <= sec_cnt + 32'b1;
end
assign SCK  = ~sec_cnt[2];
//基準クロック生成
always@(posedge SW2 or negedge reset)
begin
  if(reset == 1'b0 )
  begin	
	sw2_counter <= 1'b0 ; 
	sckmask <= 1'b0 ;
	end
	else if(sw2_counter == 1'b1)begin
	      sw2_counter <=1'b0 ;
			sckmask <= 1'b0 ;
	end else 
  begin	
	    sw2_counter <= sw2_counter+ 1'b1 ;
		 sckmask <= 1'b1 ;
end
end
always@(posedge SW1 or negedge reset)//posedge SW1
begin
  if(reset == 1'b0 ) 
	reg_counter4 <= 4'b0000 ; //検証用に4'b****とする
	else if(reg_counter4 == 4'b1010)
	      reg_counter4 <=4'b0000 ;
	else	
	    reg_counter4 <= reg_counter4 + 4'b0001 ;
end
assign counter4 = reg_counter4 ;//これがないと以降シミュレーションで表示されない。
always@(negedge SCK or negedge SW2 or negedge reset)
begin
  if(reset == 1'b0)
	begin
	   frame <= 1'b1 ;
		reg_counter5 <= 5'b00000 ;
  end 
	else if(SW2== 1'b0)
	begin
	   frame <= 1'b1 ;
	   reg_counter5 <= 5'b00000 ;
	end
  else if(reg_counter5 == 5'b10000)begin
		frame <= 1'b1 ;
	   reg_counter5 <= 5'b00000 ;
	end 
 else 
	begin
	reg_counter5 <= reg_counter5 + 5'b00001 ;
		frame <= 1'b0 ;
	end
end
assign  sck_out = {~frame & SCK & sckmask} ;
assign counter5 = reg_counter5 ;
assign CS = frame ;
always@(negedge sck_out or negedge SW2 or negedge reset)
begin
  if(reset == 1'b0)
	begin
	   reg_countera5 <= 5'b00000 ;
	end 
	else if(SW2== 1'b0)
	begin
	   reg_countera5 <= 5'b00000 ;
	end
 else if(reg_countera5 == 5'b10000)begin
	   reg_countera5 <= 5'b00000 ;
	end 
 else 
	begin
	reg_countera5 <= reg_countera5 + 5'b00001 ;
	end
end
assign countera5 = reg_countera5 ;
//
//7セグメント表示部
//
always@(negedge SW1 or negedge sck_out or negedge reset)
begin
  case(counter4)
	4'b0001 : reg_seg7 <= 8'b00111111 ; //'0'を表示 '1'が点灯()
	4'b0010 : reg_seg7 <= 8'b00000110 ; //'1'を表示		
	4'b0011 : reg_seg7 <= 8'b01011011 ; //'2'を表示	   --d0--		
	4'b0100 : reg_seg7 <= 8'b01001111 ; //'3'を表示	 d5|	   |d1	
	4'b0101 : reg_seg7 <= 8'b01100110 ; //'4'を表示         --d6--
	4'b0110 : reg_seg7 <= 8'b01101101 ; //'5'を表示	 d4|     |d2
	4'b0111 : reg_seg7 <= 8'b01111101 ; //'6'を表示          --d3--    ○ d7
	4'b1000 : reg_seg7 <= 8'b00100111 ; //'7'を表示   
	4'b1001 : reg_seg7 <= 8'b01111111 ; //'8'を表示		
	4'b1010 : reg_seg7 <= 8'b01101111 ; //'9'を表示
	4'b1011 : reg_seg7 <= 8'b01110111 ; //'A'を表示
	4'b1100 : reg_seg7 <= 8'b01111100 ; //'b'を表示
	4'b1101 : reg_seg7 <= 8'b01011000 ; //'c'を表示
	4'b1110 : reg_seg7 <= 8'b01011110 ; //'d'を表示
	4'b1111 : reg_seg7 <= 8'b01111001 ; //'E'を表示
	4'b0000 : reg_seg7 <= 8'b01110110 ; //'S'を表示  セット
	default: ;
	endcase
  case(counter4)
	4'b0000 : prl_n <= 16'b1000000000000000 ; //'0'[V]設定
	4'b0001 : prl_n <= 16'b1000110011001100 ; //'1'[V]設定
	4'b0010 : prl_n <= 16'b1001100110011001 ; //'2'[V]設定
	4'b0011 : prl_n <= 16'b1010011001100110 ; //'3'[V]設定
	4'b0100 : prl_n <= 16'b1011001100110011 ; //'4'[V]設定
	4'b0101 : prl_n <= 16'b1100000000000000 ; //'5'[V]設定
	4'b0110 : prl_n <= 16'b1100110011001100 ; //'6'[V]設定
	4'b0111 : prl_n <= 16'b1101100110011001 ; //'7'[V]設定
	4'b1000 : prl_n <= 16'b1110011001100110 ; //'8'[V]設定
	4'b1001 : prl_n <= 16'b1111001100110011 ; //'9'[V]設定
	4'b1010 : prl_n <= 16'b1111111111111111 ; //'A'10[V]設定
	4'b1011 : prl_n <= 16'b1011001110001111 ; //'X'[V]設定
	4'b1100 : prl_n <= 16'b1111111111111111 ; //'c'[V]設定
	4'b1101 : prl_n <= 16'b1111111111111111 ; //'d'[V]設定
	4'b1110 : prl_n <= 16'b1111111111111111 ; //'E'[V]設定
	4'b1111 : prl_n <= 16'b1111111111111111 ; //'F'[V]設定
	default: ;
	endcase
	if( reset == 1'b0 )
  begin
  sdata <= 16'b0000000000000000;
	end 
	else
	if( SW1 == 1'b0)
	begin
	sdata <= prl_n;
	end 
	else
	if( frame == 1'b1)
	begin
     sdata <= prl_n;
   end 
	else 
	if(sck_out == 1'b0)
	begin
	 sdata <= {sdata << 1};
	end
end

assign PRL_N = prl_n ;
assign SDATA =sdata ;
assign SOUT = sdata[15] ; 
  assign seg7_n = ~reg_seg7 ;

endmodule

・1 TDAC_SPI

`timescale 1ps/1ps
module testbench1;
  reg   CLK;
  reg   reset ;
	reg   SW1	;
	reg   SW2   ;
	wire[4:0]   counter5 ;
	wire[4:0]   countera5 ;
 wire[3:0]   counter4 ;
  wire[7:0]   seg7_n ;	
	wire        SCK ; 
	wire  CS ;
	wire sck_out ;
	wire[15:0] SDATA ;
	wire SOUT ;
  wire [15:0] PRL_N ;
 //clock generator//
 //  parameter   F33M000_cnt = 32'h00000002;
  parameter   OSC33M_PERIOD   = 3;    // ns
//   parameter   SCK_PERIOD = 6; //ns
	
   initial begin
       CLK      = 1'b0;
		  
   end

  always #(OSC33M_PERIOD/2) begin
      CLK  <= ~CLK;
   end
    
 parameter STEP1 = 10;
parameter STEP2 = 1000;
parameter STEP3 = 50;
parameter STEP4 = 500;

DAC_SPI U1(
.CLK(CLK),
.reset(reset),
.SW1(SW1),
.SW2(SW2),
.counter4(counter4),
.counter5(counter5),
.countera5(countera5),
.seg7_n(seg7_n),
.CS(CS),
.SCK(SCK),
.sck_out(sck_out),
.SDATA(SDATA),
.SOUT(SOUT),
.PRL_N(PRL_N));

//initial CLK <= 0;
//always #(STEP1/4)
//CLK <= ~CLK;
initial reset <= 1;
initial SW1 <=1 ;
initial SW2 <=1 ;
 initial SW2 <= 1;
initial begin
#2  reset <= 1'b1;
#2  SW1 <= 1'b1 ;
#2 reset <= 1'b0;
#22
#2 reset <= 1'b1;
#20
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //1
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //2
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1; //3
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1; //4
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //5
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //6
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //7
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //8
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //9
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //10
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //11
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //12
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //13
#20
#11 SW2 <= 1'b0;
#21 SW2 <= 1'b1;
#400
#2 reset <= 1'b0;
#20
#2 reset <= 1'b1;
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //1
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //2
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //2

#5
#21 SW2 <= 1'b0;
#21 SW2 <= 1'b1;
#400
#2 reset <= 1'b0;
#2 reset <= 1'b1;

end
endmodule

・1 DAC8871 table

予備DECHEXMSB LSBMSBLSB  MAX値VREFHVREFL出力電圧[V]
00000000000000000000000006553610-10-10.0000
10001000100000000000000016553610-10-9.9997
30003000300000000000000116553610-10-9.9991
70007000700000000000001116553610-10-9.9979
15000F000F00000000000011116553610-10-9.9954
31001F001F0000000000011111  6553610-10-9.9905
63003F003F0000000000111111  6553610-10-9.9808
127007F007F0000000001111111  6553610-10-9.9612
25500FF00FF0000000011111111  6553610-10-9.9222
51101FF01FF0000000111111111  6553610-10-9.8441
102303FF03FF0000001111111111  6553610-10-9.6878
204707FF07FF0000011111111111  6553610-10-9.3753
40950FFF0FFF0000111111111111  6553610-10-8.7503
81911FFF1FFF00011111  11111111  6553610-10-7.5003
163833FFF3FFF00111111  111111116553610-10-5.0003
245755FFF5FFF01011111  111111116553610-10-2.5003
327677FFF7FFF01111111  111111116553610-10-0.0003
1327688000800010000000000000006553610-100.0000
2327698001800110000000000000016553610-100.0003
4327718003800310000000000000116553610-100.0009
8327758007800710000000000001116553610-100.0021
1632783800F800F10000000000011116553610-100.0046
3232799801F801F10000000000111116553610-100.0095
6432831803F803F10000000001111116553610-100.0192
12832895807F807F10000000011111116553610-100.0388
2563302380FF80FF10000000111111116553610-100.0778
5123327981FF81FF10000001111111116553610-100.1559
10243379183FF83FF10000011111111116553610-100.3122
20483481587FF87FF10000111111111116553610-100.6247
4096368638FFF8FFF10001111111111116553610-101.2497
8192409599FFF9FFF10011111111111116553610-102.4997
1638449151BFFFBFFF10111111111111116553610-104.9997
3276865535FFFFFFFF11111111111111116553610-109.9997

・1 DAC_SPI2

module DAC_SPI_3(
    CLK,
    reset ,
		SW1,
		SW2,
		CS,
		seg7_n,
		SW2_COUNTER,
		counter4,
		counter5,
		countera5,
			SCK,
		sck_out,
		SDATA,
		SOUT,
		PRL_N
		
  );
//******蜈・蜃コ蜉・*****//a
 input   CLK;
 input   reset ;
	input   SW1	;
  input   SW2 ;	
	output  CS ;
	output[7:0]  seg7_n ;
	output[3:0]  counter4 ;
	output[4:0]  counter5 ;
	output[5:0]  countera5 ;
	output SW2_COUNTER ;
	output SCK ;
	output sck_out ;	
	output[15:0] SDATA ;
	output SOUT;
	output[15:0] PRL_N ;
//******蜀・Κ繝弱・繝・*****//
  reg [31:0] sec_cnt ;//・醍ァ剃ス懈・逕ィ繧ォ繧ヲ繝ウ繧ソ
 reg[3:0]   reg_counter4 ; //繝懊ち繝ウ蜈・蜉帛屓謨ー
 reg[4:0]   reg_counter5 ;//16bit 1繝輔Ξ繝シ繝&#63728;菴懈・
 reg[4:0]   reg_countera5 ;
 reg        sw1 ;
 reg        sw2 ;
 reg        sw2_counter ;
 reg         frame ;//16bit 1繝輔Ξ繝シ繝&#63728;繝輔Λ繧ー 
 reg         sck ;//sck縺ョcs縲&#128;low縺ョ縺ィ縺阪・繝槭せ繧ッ
	reg[7:0]   reg_seg7 ;//7seg縺ク縺ョ蜃コ蜉帙ヰ繝・ヵ繧。
	reg[15:0]   prl_n ;
	reg[15:0]   sdata ;
	reg         sckmask ;
//******蜀・Κ蝗櫁キッ******//
initial frame <= 1'b1 ;
//initial reg_counter5 <= 5'b00000 ;
//initial prl_n= 16'hF0F0 ;
//
//繧ォ繧ヲ繝ウ繧ソ驛ィ
//蝓コ貅悶け繝ュ繝・け繧ォ繧ヲ繝ウ繧ソ//
//parameter   F33M000_cnt=32'h00fbc520 ;//0.5遘偵#縺ィ縺ョ螟牙喧
// parameter   F33M000_cnt=32'h00000010 ;//0.5遘偵#縺ィ縺ョ螟牙喧  
/**********************/
/*1遘偵き繧ヲ繝ウ繧ソ驛ィ         */
/**********************/
always@( posedge CLK )
begin
if( reset == 1'b0)
begin
sec_cnt <= 32'b0; 
end else
begin
sec_cnt <= sec_cnt + 32'b1;
sck <= ~sec_cnt[2];
end
end
always@(negedge CLK)
begin
sw1 <= SW1 ;
end
assign SCK = sck ; 
assign sck_out = {sck & sw2_counter } ;
always@(posedge SW2 or negedge reset)
begin
  if(reset == 1'b0)
	begin
	sw2_counter <=1'b0 ;
	sw2 <= 1'b1 ;
	end
	else if(sw2_counter == 1'b1)
	begin
	 sw2_counter <= 1'b1 ;
	 sw2 <= 1'b1 ;
	end
	else 
	begin
	 sw2_counter <= sw2_counter + 1'b1 ;
	 sw2 <= 1'b0 ;
	end
end
assign SW2_COUNTER = sw2_counter ;
always@(negedge sck_out or negedge reset)
begin
  if(reset == 1'b0)
	begin
	reg_counter5 <= 5'b00000 ;
	frame <= 1'b1 ;
	end
	else if(reg_counter5 == 5'b10000)
	begin
	 reg_counter5 <= 5'b00000 ;
	 frame <= 1'b1 ;
	end
	else 
	begin
	 reg_counter5 <= reg_counter5 + 1'b1 ;
	 frame <= reg_counter5[4] ;
	end
end
assign counter5 = reg_counter5 ;
always@(negedge SW1 or negedge reset)//posedge SW1
begin
  if(reset == 1'b0 ) 
	reg_counter4 <= 4'b0000 ; //讀懆ィシ逕ィ縺ォ4'b****縺ィ縺吶k
	else if(reg_counter4 == 4'b1010)
	      reg_counter4 <=4'b0000 ;
	else	
	    reg_counter4 <= reg_counter4 + 4'b0001 ;
end
assign counter4 = reg_counter4 ;//縺薙l縺後↑縺・→莉・髯阪す繝溘Η繝ャ繝シ繧キ繝ァ繝ウ縺ァ陦ィ遉コ縺輔l縺ェ縺・&#128;・
assign CS = frame ;
always@(negedge sw1 or negedge sck_out or negedge reset or negedge CLK)// negedge sck_out
begin
  case(reg_counter4)
	4'b0001 : reg_seg7 <= 8'b00111111 ; //'0'繧定。ィ遉コ縲&#128;'1'縺檎せ轣ッ()
	4'b0010 : reg_seg7 <= 8'b00000110 ; //'1'繧定。ィ遉コ		
	4'b0011 : reg_seg7 <= 8'b01011011 ; //'2'繧定。ィ遉コ	  縲&#128;--d0--		
	4'b0100 : reg_seg7 <= 8'b01001111 ; //'3'繧定。ィ遉コ	 d5|	   |d1	
	4'b0101 : reg_seg7 <= 8'b01100110 ; //'4'繧定。ィ遉コ		--d6--
	4'b0110 : reg_seg7 <= 8'b01101101 ; //'5'繧定。ィ遉コ	 d4|     |d2
	4'b0111 : reg_seg7 <= 8'b01111101 ; //'6'繧定。ィ遉コ		--d3--    笳・d7
	4'b1000 : reg_seg7 <= 8'b00100111 ; //'7'繧定。ィ遉コ縲&#128;縲&#128; 
	4'b1001 : reg_seg7 <= 8'b01111111 ; //'8'繧定。ィ遉コ		
	4'b1010 : reg_seg7 <= 8'b01101111 ; //'9'繧定。ィ遉コ
	4'b1011 : reg_seg7 <= 8'b01110111 ; //'A'繧定。ィ遉コ
	4'b1100 : reg_seg7 <= 8'b01111100 ; //'b'繧定。ィ遉コ
	4'b1101 : reg_seg7 <= 8'b01011000 ; //'c'繧定。ィ遉コ
	4'b1110 : reg_seg7 <= 8'b01011110 ; //'d'繧定。ィ遉コ
	4'b1111 : reg_seg7 <= 8'b01111001 ; //'E'繧定。ィ遉コ
	4'b0000 : reg_seg7 <= 8'b01110110 ; //'S'繧定。ィ遉コ  繧サ繝・ヨ
	default : reg_seg7 <= 8'b00111111 ;
	endcase
  case(reg_counter4)
	4'b0000 : prl_n <= 16'b1000000000000000 ; //'0'[V]險ュ螳・
	4'b0001 : prl_n <= 16'b1000110011001100 ; //'1'[V]險ュ螳・
	4'b0010 : prl_n <= 16'b1001100110011001 ; //'2'[V]險ュ螳・
	4'b0011 : prl_n <= 16'b1010011001100110 ; //'3'[V]險ュ螳・
	4'b0100 : prl_n <= 16'b1011001100110011 ; //'4'[V]險ュ螳・
	4'b0101 : prl_n <= 16'b1100000000000000 ; //'5'[V]險ュ螳・
	4'b0110 : prl_n <= 16'b1100110011001100 ; //'6'[V]險ュ螳・
	4'b0111 : prl_n <= 16'b1101100110011001 ; //'7'[V]險ュ螳・
	4'b1000 : prl_n <= 16'b1110011001100110 ; //'8'[V]險ュ螳・
	4'b1001 : prl_n <= 16'b1111001100110011 ; //'9'[V]險ュ螳・
	4'b1010 : prl_n <= 16'b1111111111111111 ; //'A'10[V]險ュ螳・
	4'b1011 : prl_n <= 16'b1011001110001111 ; //'X'[V]險ュ螳・
	4'b1100 : prl_n <= 16'b1111111111111111 ; //'c'[V]險ュ螳・
	4'b1101 : prl_n <= 16'b1111111111111111 ; //'d'[V]險ュ螳・
	4'b1110 : prl_n <= 16'b1111111111111111 ; //'E'[V]險ュ螳・
	4'b1111 : prl_n <= 16'b1111111111111111 ; //'F'[V]險ュ螳・
	default: prl_n <= 16'b1000000000000000 ; 
	endcase
		if( reset == 1'b0 )
  begin
  sdata <= 16'b1000000000000000;
	prl_n <= 16'b1000000000000000;
	end 
	else if(CLK == 1'b0)
	begin
	sdata <= prl_n ;
	end
	else 
	if(sck_out ==1'b0)
	begin
	sdata <= {sdata << 1};
	end
end
//	if( reset == 1'b0 )
//  begin
//  sdata <= 16'b0000000000000000;
//	end 
//	else
//	if( SW1 == 1'b0)
//	begin
//	sdata <= prl_n;
//	end 
//	else
//	if( frame == 1'b1)
//	begin
//     sdata <= prl_n;
 //  end 
//	else 
//	if(sck_out == 1'b0)
//	begin
//	 sdata <= {sdata << 1};
//	end
//end
assign PRL_N = prl_n ;
assign SDATA =sdata ;
assign SOUT = sdata[15] ; 
  assign seg7_n = ~reg_seg7 ;

endmodule

・1 TAC_SPI2

`timescale 1ps/1ps
module testbench1;
  reg   CLK;
  reg   reset ;
	reg   SW1	;
	reg   SW2   ;
	wire   SW2_COUNTER ;
	wire[4:0]   counter5 ;
	wire[4:0]   countera5 ;
 wire[3:0]   counter4 ;
  wire[7:0]   seg7_n ;	
	wire        SCK ; 
	wire  CS ;
	wire sck_out ;
	wire[15:0] SDATA ;
	wire SOUT ;
  wire [15:0] PRL_N ;
//clock generator//
//  parameter   F33M000_cnt = 32'h00000002;
  parameter   OSC33M_PERIOD   = 3;    // ns
//   parameter   SCK_PERIOD = 6; //ns
	
   initial begin
       CLK      = 1'b0;
		  
   end
   always #(OSC33M_PERIOD/2) begin
       CLK  <= ~CLK;
   end
    
    
parameter STEP1 = 10;
parameter STEP2 = 1000;
parameter STEP3 = 50;
parameter STEP4 = 500;
DAC_SPI_3 U1(
.CLK(CLK),
.reset(reset),
.SW1(SW1),
.SW2(SW2),
.counter4(counter4),
.counter5(counter5),
.countera5(countera5),
.seg7_n(seg7_n),
.CS(CS),
.SCK(SCK),
.sck_out(sck_out),
.SDATA(SDATA),
.SOUT(SOUT),
.SW2_COUNTER(SW2_COUNTER) ,
.PRL_N(PRL_N));
//initial CLK <= 0;
//always #(STEP1/4)
//CLK <= ~CLK;
initial reset <= 1;
initial SW1 <=1 ;
initial SW2 <=1 ;
 initial SW2 <= 1;
initial begin
#2  reset <= 1'b1;
#2  SW1 <= 1'b1 ;
#2 reset <= 1'b0;
#22
#2 reset <= 1'b1;
#20
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //1
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //2
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1; //3
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1; //4
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //5
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //6
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //7
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //8
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //9
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //10
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //11
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //12
#5 SW1 <= 1'b0; 
#2 SW1 <= 1'b1; //13
#20
#11 SW2 <= 1'b0;
#21 SW2 <= 1'b1;
#400
#2 reset <= 1'b0;
#20
#2 reset <= 1'b1;

#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //1
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //2
#5 SW1 <= 1'b0;
#2 SW1 <= 1'b1;  //2

#5
#21 SW2 <= 1'b0;
#21 SW2 <= 1'b1;
#400
#2 reset <= 1'b0;
#2 reset <= 1'b1;

end
endmodule