Line 99... |
Line 99... |
wire tx_state;
|
wire tx_state;
|
wire empty;
|
wire empty;
|
assign write_busy=queue_full;//Apr.2.2005
|
assign write_busy=queue_full;//Apr.2.2005
|
|
|
always @ (posedge clk) begin
|
always @ (posedge clk) begin
|
if (sync_reset) read_request_ff<=1'b0;
|
if (~sync_reset) read_request_ff<=1'b0;
|
else read_request_ff<=read_request;
|
else read_request_ff<=read_request;
|
end
|
end
|
|
|
assign queing= !empty;
|
assign queing= !empty;
|
assign read_request = queing && ua_state==3'b000;//Jul.14.2004
|
assign read_request = queing && ua_state==3'b000;//Jul.14.2004
|
Line 134... |
Line 134... |
|
|
|
|
|
|
// 7bit counter
|
// 7bit counter
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset)
|
if (~sync_reset)
|
clk_ctr <= 0;
|
clk_ctr <= 0;
|
else if (clk_ctr_enable_state && clk_ctr_equ31) clk_ctr<=0;
|
else if (clk_ctr_enable_state && clk_ctr_equ31) clk_ctr<=0;
|
else if (clk_ctr_enable_state) clk_ctr <= clk_ctr + 1;
|
else if (clk_ctr_enable_state) clk_ctr <= clk_ctr + 1;
|
else clk_ctr <= 0;
|
else clk_ctr <= 0;
|
end
|
end
|
Line 147... |
Line 147... |
assign clk_ctr_equ15 = clk_ctr==`COUNTER_VALUE1;
|
assign clk_ctr_equ15 = clk_ctr==`COUNTER_VALUE1;
|
assign clk_ctr_equ31 = clk_ctr==`COUNTER_VALUE2;
|
assign clk_ctr_equ31 = clk_ctr==`COUNTER_VALUE2;
|
|
|
// 3bit counter
|
// 3bit counter
|
always @(posedge clk) begin
|
always @(posedge clk) begin
|
if (sync_reset)
|
if (~sync_reset)
|
bit_ctr <= 0;
|
bit_ctr <= 0;
|
else if (bit_ctr_enable_state) begin
|
else if (bit_ctr_enable_state) begin
|
if (clk_ctr_equ15)
|
if (clk_ctr_equ15)
|
bit_ctr <= bit_ctr + 1;
|
bit_ctr <= bit_ctr + 1;
|
end
|
end
|
Line 164... |
Line 164... |
assign clk_ctr_enable_state = bit_ctr_enable_state ||ua_state==3'b110 || ua_state==3'b001 || ua_state==3'b100||ua_state==3'b101;
|
assign clk_ctr_enable_state = bit_ctr_enable_state ||ua_state==3'b110 || ua_state==3'b001 || ua_state==3'b100||ua_state==3'b101;
|
assign bit_ctr_enable_state = ua_state==3'b010 || ua_state==3'b011;
|
assign bit_ctr_enable_state = ua_state==3'b010 || ua_state==3'b011;
|
|
|
|
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset) ua_state <= 3'b000;
|
if (~sync_reset) ua_state <= 3'b000;
|
else begin
|
else begin
|
case (ua_state)
|
case (ua_state)
|
3'b000: if (queing) ua_state <= 3'b001; //wait write_request
|
3'b000: if (queing) ua_state <= 3'b001; //wait write_request
|
3'b001: if ( clk_ctr_equ15) ua_state <= 3'b010; // write start bit
|
3'b001: if ( clk_ctr_equ15) ua_state <= 3'b010; // write start bit
|
3'b010: if (bit_ctr_equ7 & clk_ctr_equ15) ua_state <= 3'b011; // start bit, bit0-7 data send
|
3'b010: if (bit_ctr_equ7 & clk_ctr_equ15) ua_state <= 3'b011; // start bit, bit0-7 data send
|
Line 185... |
Line 185... |
|
|
|
|
|
|
// tx shift reg.
|
// tx shift reg.
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset) tx_sr<=0;
|
if (~sync_reset) tx_sr<=0;
|
else if (read_request_ff) tx_sr <= queue_data[7:0]; //data_in[7:0]; // load
|
else if (read_request_ff) tx_sr <= queue_data[7:0]; //data_in[7:0]; // load
|
else if (tx_state ) tx_sr <= {1'b0, tx_sr[7:1]};
|
else if (tx_state ) tx_sr <= {1'b0, tx_sr[7:1]};
|
end
|
end
|
|
|
assign tx_state=( ua_state==3'h2 || ua_state==3'h3) && clk_ctr_equ15;
|
assign tx_state=( ua_state==3'h2 || ua_state==3'h3) && clk_ctr_equ15;
|
|
|
|
|
// tx
|
// tx
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset) txd <=1'b1;
|
if (~sync_reset) txd <=1'b1;
|
else if (sync_reset) txd<=1'b1;
|
else if (~sync_reset) txd<=1'b1;
|
else if (ua_state==3'h0) txd<=1'b1;
|
else if (ua_state==3'h0) txd<=1'b1;
|
else if (ua_state==3'h1 && clk_ctr_equ15) txd<=1'b0; // start bit
|
else if (ua_state==3'h1 && clk_ctr_equ15) txd<=1'b0; // start bit
|
else if (ua_state==3'h2 && clk_ctr_equ15) txd<=tx_sr[0];
|
else if (ua_state==3'h2 && clk_ctr_equ15) txd<=tx_sr[0];
|
else if (ua_state==3'h3 && clk_ctr_equ15) txd<=1'b1; // stop bit
|
else if (ua_state==3'h3 && clk_ctr_equ15) txd<=1'b1; // stop bit
|
end
|
end
|
Line 239... |
Line 239... |
rxq1 <=rxd ;
|
rxq1 <=rxd ;
|
end
|
end
|
|
|
// 7bit counter
|
// 7bit counter
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset)
|
if (~sync_reset)
|
clk_ctr <= 0;
|
clk_ctr <= 0;
|
else if (clk_ctr_enable_state && clk_ctr_equ31) clk_ctr<=0;
|
else if (clk_ctr_enable_state && clk_ctr_equ31) clk_ctr<=0;
|
else if (clk_ctr_enable_state) clk_ctr <= clk_ctr + 1;
|
else if (clk_ctr_enable_state) clk_ctr <= clk_ctr + 1;
|
else clk_ctr <= 0;
|
else clk_ctr <= 0;
|
end
|
end
|
Line 252... |
Line 252... |
assign clk_ctr_equ0= (clk_ctr==`COUNTER_VALUE3); //
|
assign clk_ctr_equ0= (clk_ctr==`COUNTER_VALUE3); //
|
|
|
|
|
// 3bit counter
|
// 3bit counter
|
always @(posedge clk) begin
|
always @(posedge clk) begin
|
if (sync_reset)
|
if (~sync_reset)
|
bit_ctr <= 0;
|
bit_ctr <= 0;
|
else if (bit_ctr_enable_state) begin
|
else if (bit_ctr_enable_state) begin
|
if (clk_ctr_equ15)
|
if (clk_ctr_equ15)
|
bit_ctr <= bit_ctr + 1;
|
bit_ctr <= bit_ctr + 1;
|
end
|
end
|
Line 270... |
Line 270... |
assign clk_ctr_enable_state = ua_state !=3'b000 && ua_state<=3'b011;
|
assign clk_ctr_enable_state = ua_state !=3'b000 && ua_state<=3'b011;
|
assign bit_ctr_enable_state = ua_state==3'h2;
|
assign bit_ctr_enable_state = ua_state==3'h2;
|
|
|
//
|
//
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset) ua_state <= 3'h0;
|
if (~sync_reset) ua_state <= 3'h0;
|
else begin
|
else begin
|
case (ua_state)
|
case (ua_state)
|
3'h0: if (rxq1==0) ua_state <= 3'h1; // if rxd==0 then goto next state and enable clock // start bit search
|
3'h0: if (rxq1==0) ua_state <= 3'h1; // if rxd==0 then goto next state and enable clock // start bit search
|
3'h1: if (clk_ctr_equ15) ua_state <= 3'h2; // start bit receive
|
3'h1: if (clk_ctr_equ15) ua_state <= 3'h2; // start bit receive
|
3'h2: if (bit_ctr_equ7 & clk_ctr_equ15) ua_state <= 3'h3;
|
3'h2: if (bit_ctr_equ7 & clk_ctr_equ15) ua_state <= 3'h3;
|
Line 286... |
Line 286... |
end
|
end
|
|
|
|
|
//reg_we
|
//reg_we
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset) buffer_reg<=8'h00;
|
if (~sync_reset) buffer_reg<=8'h00;
|
else if (ua_state==3'h3 && clk_ctr_equ0) buffer_reg<=rx_sr;
|
else if (ua_state==3'h3 && clk_ctr_equ0) buffer_reg<=rx_sr;
|
end
|
end
|
|
|
//int_req
|
//int_req
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset) int_req<=1'b0;
|
if (~sync_reset) int_req<=1'b0;
|
else if (ua_state==3'h4 ) int_req<=1'b1; //
|
else if (ua_state==3'h4 ) int_req<=1'b1; //
|
else int_req<=1'b0;
|
else int_req<=1'b0;
|
end
|
end
|
|
|
|
|
// rx shift reg.
|
// rx shift reg.
|
always @(posedge clk ) begin
|
always @(posedge clk ) begin
|
if (sync_reset) rx_sr <= 0;
|
if (~sync_reset) rx_sr <= 0;
|
else if (clk_ctr_equ15) rx_sr <= {rxq1, rx_sr[7:1]};
|
else if (clk_ctr_equ15) rx_sr <= {rxq1, rx_sr[7:1]};
|
end
|
end
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|