[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
gEDA-user: HELP with Icarus Verilog, 0.7!
- To: geda-user@seul.org
- Subject: gEDA-user: HELP with Icarus Verilog, 0.7!
- From: "Samuel A. Falvo II" <sam.falvo@falvotech.com>
- Date: Sun, 4 Apr 2004 21:18:24 -0800
- Delivered-to: archiver@seul.org
- Delivered-to: geda-user-outgoing@seul.org
- Delivered-to: geda-user@seul.org
- Delivery-date: Mon, 05 Apr 2004 01:22:07 -0400
- Organization: Falvo Technical Solutions
- Reply-to: geda-user@seul.org
- Sender: owner-geda-user@seul.org
- User-agent: KMail/1.5
Greetings.
This is my first time using Verilog, and unfortunately, I'm not having
much luck trying to get several modules to talk to each other via a
tri-stated bus interface. If anyone can offer some tips or tricks that
is portable to other Verilog environments, that'd be great.
I can't disclose my modules here, due to their size. But maybe I can
host the heads of each module. Here is the head of the module giving me
problems:
module Kestrel_UART_RX( RXD, RBF, _RES, RXC, DB, _RXDATAL_E, _RXDATAH_E,
_RXMASKL_E, _RXMASKH_E );
input RXD, _RES, RXC, _RXDATAL_E, _RXDATAH_E, _RXMASKL_E, _RXMASKH_E;
output RBF;
inout [7:0] DB; // <-- I need this to be a real tri-state bus
reg RBF;
reg [7:0] DBout;
reg [15:0] shiftRegister;
reg inFrame;
wire rxc_div_8;
reg [15:0] rxdata;
reg [15:0] rxmask;
wire [15:0] startDetect;
wire rd;
assign startDetect = rxmask & shiftRegister;
assign rd = ( _RXDATAL_E === 0 ) || ( _RXDATAH_E === 0 );
assign DB = rd? DBout : 8'bzzzzzzzz; // <-- technique seems to work in
TB, but not here. Why?
Whenever a write the the RXMASK* registers is performed, as evidenced by
_RXMASK*_E signals going low, the value loaded into the registers are
always 16'hxxxx or 16'hxxXX or some such (what is the difference between
x and X in this context?), as reported by $display. Here is the
assignment code for those registers (yes, the value of DB is "valid" in
the testbench before asserting the appropriate register enables):
// Writable UART registers.
always @(_RXMASKL_E) begin
if( _RXMASKL_E === 0 ) begin
rxmask = { rxmask[15:8], DB[7:0] };
end
end
always @(_RXMASKH_E) begin
if( _RXMASKH_E === 0 ) begin
rxmask = { DB[7:0], rxmask[7:0] };
end
end
Any ideas why rxmask is being assigned undefined values?
Thanks for your help. It's greatly appreciated.
--
Samuel A. Falvo II