mirror of
https://github.com/tillitis/tillitis-key1.git
synced 2025-01-04 04:10:52 -05:00
Improve detection of empty and full FIFO
This commit is contained in:
parent
0eacbca2f9
commit
24d8680772
@ -3,6 +3,7 @@
|
|||||||
// uart_fifo.v
|
// uart_fifo.v
|
||||||
// -----------
|
// -----------
|
||||||
// FIFO for rx and tx data buffering in the UART.
|
// FIFO for rx and tx data buffering in the UART.
|
||||||
|
// The code should allocate a single EBR in a iCE40UP device.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Author: Joachim Strombergson
|
// Author: Joachim Strombergson
|
||||||
@ -73,6 +74,13 @@ module uart_fifo(
|
|||||||
reg in_ack_new;
|
reg in_ack_new;
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Wires
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
reg fifo_empty;
|
||||||
|
reg fifo_full;
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
// Concurrent connectivity for ports etc.
|
// Concurrent connectivity for ports etc.
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
@ -120,9 +128,19 @@ module uart_fifo(
|
|||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
always @*
|
always @*
|
||||||
begin : byte_ctr
|
begin : byte_ctr
|
||||||
|
fifo_empty = 1'h0;
|
||||||
|
fifo_full = 1'h0;
|
||||||
byte_ctr_new = 9'h0;
|
byte_ctr_new = 9'h0;
|
||||||
byte_ctr_we = 1'h0;
|
byte_ctr_we = 1'h0;
|
||||||
|
|
||||||
|
if (byte_ctr_reg == 9'h0) begin
|
||||||
|
fifo_empty = 1'h1;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (byte_ctr_reg == 9'h1ff) begin
|
||||||
|
fifo_full = 1'h1;
|
||||||
|
end
|
||||||
|
|
||||||
if ((byte_ctr_inc) && (!byte_ctr_dec)) begin
|
if ((byte_ctr_inc) && (!byte_ctr_dec)) begin
|
||||||
byte_ctr_new = byte_ctr_reg + 1'h1;
|
byte_ctr_new = byte_ctr_reg + 1'h1;
|
||||||
byte_ctr_we = 1'h1;
|
byte_ctr_we = 1'h1;
|
||||||
@ -143,10 +161,11 @@ module uart_fifo(
|
|||||||
fifo_mem_we = 1'h0;
|
fifo_mem_we = 1'h0;
|
||||||
in_ack_new = 1'h0;
|
in_ack_new = 1'h0;
|
||||||
byte_ctr_inc = 1'h0;
|
byte_ctr_inc = 1'h0;
|
||||||
in_ptr_new = in_ptr_reg + 1'h1;
|
|
||||||
in_ptr_we = 1'h0;
|
in_ptr_we = 1'h0;
|
||||||
|
|
||||||
if ((in_syn) && (!in_ack) && (byte_ctr_reg < 9'h1ff)) begin
|
in_ptr_new = in_ptr_reg + 1'h1;
|
||||||
|
|
||||||
|
if ((in_syn) && (!in_ack) && (!fifo_full)) begin
|
||||||
fifo_mem_we = 1'h1;
|
fifo_mem_we = 1'h1;
|
||||||
in_ack_new = 1'h1;
|
in_ack_new = 1'h1;
|
||||||
byte_ctr_inc = 1'h1;
|
byte_ctr_inc = 1'h1;
|
||||||
@ -161,10 +180,11 @@ module uart_fifo(
|
|||||||
always @*
|
always @*
|
||||||
begin : out_logic
|
begin : out_logic
|
||||||
byte_ctr_dec = 1'h0;
|
byte_ctr_dec = 1'h0;
|
||||||
out_ptr_new = out_ptr_reg + 1'h1;
|
|
||||||
out_ptr_we = 1'h0;
|
out_ptr_we = 1'h0;
|
||||||
|
|
||||||
if ((out_ack) && (byte_ctr_reg > 9'h0)) begin
|
out_ptr_new = out_ptr_reg + 1'h1;
|
||||||
|
|
||||||
|
if ((out_ack) && (!fifo_empty)) begin
|
||||||
byte_ctr_dec = 1'h1;
|
byte_ctr_dec = 1'h1;
|
||||||
out_ptr_we = 1'h1;
|
out_ptr_we = 1'h1;
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user