OpenCores
URL https://opencores.org/ocsvn/mips789/mips789/trunk

Subversion Repositories mips789

[/] [mips789/] [tags/] [arelease/] [rtl/] [verilog/] [mips_uart.v] - Diff between revs 10 and 15

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 10 Rev 15
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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.