Page 1108 - 3-2
P. 1108

end
                     else   motor<=2'b00;
             end
             end
             always @(posedge clk, negedge rst)
             begin
                     if(!rst)  cnt<=0;
                     else
                     begin
                     if(en)
                     begin
                     if(cnt>=500000-1)   cnt<=0; //100Hz  분주
                     else   cnt<=cnt+1;
                     end
                     else   cnt<=0;
                     end
             end
             endmodule


             //  수신 OK

             module uart_rx1 ( clk,   rst,rxd, rx_data);
             //  수신 모듈

             input clk, rst,  rxd;
             output [7:0] rx_data;
             parameter baud_rate = 5208; // = 54MHz / 9600bps
             parameter CLOCKS_WAIT_FOR_RECEIVE = 5208 / 2;
             reg [7:0]       rx_data;  // 수신데이터 저장하는 레지스터
             reg [7:0]    rx_data_buffer; //rxd 에서 수신된 데이터를 임시로 저장하기 위한 레지스터
             reg [3:0]       rx_bit_cnt;  // 수신데이터 비트 카운터 변수
             reg [15:0]      rx_clk_cnt;  //  수신시 통신 속도를 카운터하기              위한 변수
             reg [15:0]    rx_start_cnt; //start bit check 를 위한 카운터 변수

             reg state_rx; // state_rx = 0  휴지상태 , state_rx=1  수신 상태


             always @(posedge clk, negedge rst)
             if(rst == 0)
              begin
                     rx_clk_cnt  <= 0;
                     rx_bit_cnt  <= 0;
                     rx_start_cnt  <= 0;
                     state_rx  <= 0; //  수신회선      휴지 상태
              end

             else
                     begin
                     if(state_rx  == 0 && rxd == 0) // if not   receive mode and start bit is detected
                     begin
                           if(rx_start_cnt >= CLOCKS_WAIT_FOR_RECEIVE -1)
                           begin
                     rx_start_cnt  <= 0;
                     state_rx  <= 1'b1;        //enter receive mode
                           end
                      else
                      begin
                          rx_start_cnt <= rx_start_cnt +1'b1 ;
                          state_rx <= 1'b0;
                      end
             end

             else    rx_start_cnt  <=0;

                     if(state_rx  == 1)   // if receive mode
                     begin


                                                        - 1108 -
   1103   1104   1105   1106   1107   1108   1109   1110   1111   1112   1113