Page 693 - 3-2
P. 693
begin
if(!reset) rx_bit_cnt<=0;
else
begin
if(state_rx==1) // 수신모드
begin
if(rx_clk_cnt>=CLOCKS_PER_BIT)
// 통신속도 9600bps 가 되면 다음 비트로 cnt 해주는 부분
begin
if(rx_bit_cnt>=8) rx_bit_cnt<=0;
else rx_bit_cnt<=rx_bit_cnt+1'b1;
end
end
else rx_bit_cnt<=0;
end
end
always @(posedge clk, negedge reset) // 출력 부분
begin
if(!reset) rx_data<=8'b0;
else
begin
if(state==4'b0001) rx_data<=0;
if(state_rx==1) // 수신모드
begin
if (rx_bit_cnt == 8 && rx_clk_cnt == CLOCKS_PER_BIT && uart_rxd == 1)
rx_data<=data_buffer; // 임시저장된 수신 데이터를 출력해줌
else if (rx_bit_cnt == 8 && rx_clk_cnt == CLOCKS_PER_BIT &&
uart_rxd != 1) rx_data<=8'b0; // 만약 stopbit 가 제대로 들어오지 않았을 경우 쓰레기값으로 간주해서
rx_data 에 0 을 뿌림
end
end
end
always @ (posedge clk, negedge reset) // 들어온 값을 임시저장변수에 넣어주는 곳
begin
if(!reset) data_buffer<=8'b0;
else
begin
if(state==4'b0001) data_buffer<=0;
if(state_rx == 1)// 수신모드
begin
if( rx_bit_cnt < 8 && rx_clk_cnt == CLOCKS_PER_BIT)
data_buffer[rx_bit_cnt] <= uart_rxd; // 임시저장변수에 rxd 를 통해 들어온 값을 넣어줌
end
- 693 -