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

Subversion Repositories uart16550

[/] [uart16550/] [trunk/] [rtl/] [verilog/] [uart_regs.v] - Diff between revs 48 and 50

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

Rev 48 Rev 50
Line 60... Line 60...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.26  2001/12/03 21:44:29  gorban
 
// Updated specification documentation.
 
// Added full 32-bit data bus interface, now as default.
 
// Address is 5-bit wide in 32-bit data bus mode.
 
// Added wb_sel_i input to the core. It's used in the 32-bit mode.
 
// Added debug interface with two 32-bit read-only registers in 32-bit mode.
 
// Bits 5 and 6 of LSR are now only cleared on TX FIFO write.
 
// My small test bench is modified to work with 32-bit mode.
 
//
// Revision 1.25  2001/11/28 19:36:39  gorban
// Revision 1.25  2001/11/28 19:36:39  gorban
// Fixed: timeout and break didn't pay attention to current data format when counting time
// Fixed: timeout and break didn't pay attention to current data format when counting time
//
//
// Revision 1.24  2001/11/26 21:38:54  gorban
// Revision 1.24  2001/11/26 21:38:54  gorban
// Lots of fixes:
// Lots of fixes:
Line 286... Line 295...
// Transmitter Instance
// Transmitter Instance
uart_transmitter transmitter(clk, wb_rst_i, lcr, tf_push, wb_dat_i, enable, stx_pad_o, tstate, tf_count, tx_reset, lsr_mask);
uart_transmitter transmitter(clk, wb_rst_i, lcr, tf_push, wb_dat_i, enable, stx_pad_o, tstate, tf_count, tx_reset, lsr_mask);
 
 
// Receiver Instance
// Receiver Instance
uart_receiver receiver(clk, wb_rst_i, lcr, rf_pop, srx_pad_i, enable, rda_int,
uart_receiver receiver(clk, wb_rst_i, lcr, rf_pop, srx_pad_i, enable, rda_int,
        counter_t, rf_count, rf_data_out, rf_error_bit, rf_overrun, rx_reset, lsr_mask, rstate);
        counter_t, rf_count, rf_data_out, rf_error_bit, rf_overrun, rx_reset, lsr_mask, rstate, rf_push);
 
 
 
 
// Asynchronous reading here because the outputs are sampled in uart_wb.v file 
// Asynchronous reading here because the outputs are sampled in uart_wb.v file 
always @(/*AUTOSENSE*/dl or dlab or ier or iir
always @(/*AUTOSENSE*/dl or dlab or ier or iir
                        or lcr or lsr or msr or rf_data_out or wb_addr_i or wb_re_i)   // asynchrounous reading
                        or lcr or lsr or msr or rf_data_out or wb_addr_i or wb_re_i)   // asynchrounous reading
Line 362... Line 371...
        else
        else
        if (msr_read)
        if (msr_read)
                msi_reset <= #1 1; // reset bits in Modem Status Register
                msi_reset <= #1 1; // reset bits in Modem Status Register
end
end
 
 
/*
 
// threi_clear signal handling
 
always @(posedge clk or posedge wb_rst_i)
 
begin
 
        if (wb_rst_i)
 
                threi_clear <= #1 0;
 
        else
 
        if (!lsr[`UART_LS_TFE] && (tf_count==0)) // reset clear flag when tx fifo clears
 
                threi_clear <= #1 0;
 
        else
 
        if (wb_re_i && wb_addr_i == `UART_REG_II)
 
                threi_clear <= #1 1;
 
end
 
*/
 
 
 
//
//
//   WRITES AND RESETS   //
//   WRITES AND RESETS   //
//
//
// Line Control Register
// Line Control Register
Line 484... Line 479...
end
end
 
 
// Line Status Register
// Line Status Register
 
 
// activation conditions
// activation conditions
assign lsr0 = (rf_count==0 && fifo_write);  // data in receiver fifo available set condition
assign lsr0 = (rf_count==0 && rf_push);  // data in receiver fifo available set condition
assign lsr1 = rf_overrun;     // Receiver overrun error
assign lsr1 = rf_overrun;     // Receiver overrun error
assign lsr2 = rf_data_out[1]; // parity error bit
assign lsr2 = rf_data_out[1]; // parity error bit
assign lsr3 = rf_data_out[0]; // framing error bit
assign lsr3 = rf_data_out[0]; // framing error bit
assign lsr4 = rf_data_out[2]; // break error in the character
assign lsr4 = rf_data_out[2]; // break error in the character
assign lsr5 = (tf_count==5'b0);  // transmitter fifo is empty
assign lsr5 = (tf_count==5'b0);  // transmitter fifo is empty
Line 551... Line 546...
        if (wb_rst_i) lsr4r <= #1 0;
        if (wb_rst_i) lsr4r <= #1 0;
        else lsr4r <= #1 lsr_mask ? 0 : lsr4r || (lsr4 && ~lsr4_d);
        else lsr4r <= #1 lsr_mask ? 0 : lsr4r || (lsr4 && ~lsr4_d);
 
 
// lsr bit 5 (transmitter fifo is empty)
// lsr bit 5 (transmitter fifo is empty)
reg lsr5_d;
reg lsr5_d;
wire tx_fifo_write;
 
assign tx_fifo_write = (wb_we_i && ~dlab && wb_addr_i==`UART_REG_TR);
 
 
 
always @(posedge clk or posedge wb_rst_i)
always @(posedge clk or posedge wb_rst_i)
        if (wb_rst_i) lsr5_d <= #1 1;
        if (wb_rst_i) lsr5_d <= #1 1;
        else lsr5_d <= #1 lsr5;
        else lsr5_d <= #1 lsr5;
 
 
always @(posedge clk or posedge wb_rst_i)
always @(posedge clk or posedge wb_rst_i)
        if (wb_rst_i) lsr5r <= #1 1;
        if (wb_rst_i) lsr5r <= #1 1;
        else lsr5r <= #1 (tx_fifo_write) ? 0 :  lsr5r || (lsr5 && ~lsr5_d);
        else lsr5r <= #1 (fifo_write) ? 0 :  lsr5r || (lsr5 && ~lsr5_d);
 
 
// lsr bit 6 (transmitter empty indicator)
// lsr bit 6 (transmitter empty indicator)
reg lsr6_d;
reg lsr6_d;
 
 
always @(posedge clk or posedge wb_rst_i)
always @(posedge clk or posedge wb_rst_i)
        if (wb_rst_i) lsr6_d <= #1 1;
        if (wb_rst_i) lsr6_d <= #1 1;
        else lsr6_d <= #1 lsr6;
        else lsr6_d <= #1 lsr6;
 
 
always @(posedge clk or posedge wb_rst_i)
always @(posedge clk or posedge wb_rst_i)
        if (wb_rst_i) lsr6r <= #1 1;
        if (wb_rst_i) lsr6r <= #1 1;
        else lsr6r <= #1 (tx_fifo_write) ? 0 : lsr6r || (lsr6 && ~lsr6_d);
        else lsr6r <= #1 (fifo_write) ? 0 : lsr6r || (lsr6 && ~lsr6_d);
 
 
// lsr bit 7 (error in fifo)
// lsr bit 7 (error in fifo)
reg lsr7_d;
reg lsr7_d;
 
 
always @(posedge clk or posedge wb_rst_i)
always @(posedge clk or posedge wb_rst_i)

powered by: WebSVN 2.1.0

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