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 -