Verilog help appreciated

From: Jim Brain <brain_at_jbrain.com>
Date: Mon, 18 Nov 2013 02:14:58 -0600
Message-ID: <5289CC82.5020003@jbrain.com>
Finally found some time to dip my toe into the Verilog waters, and could 
use some help.  I am trying to convert an EAGLE schematic to some Xilinx 
Verilog that I can synthesize onto a XC9572XL.  I have all of the 
pieces, including a working build of the schematic, and all of the 
Xilinx Tooling, a test CPLD PCB, etc., but I am not sure my Verilog is 
correct.

The circuit is a VIC-20 UART Cart, which needs an enable based on A[9:4] 
comparison, a FLASH ROM connected to BLK5, and a read/write 8 bit bank 
register.  I think I understand the simple FLASH signal "assigns", and 
the comparator, but I'm glazing over at the register definition.  Or, I 
could be way off on all three  My main concern is the HiZ on the 
register read "assign" disrupting the "write" in the "always" block.

// seems like some of these need to be defined as wires or reg, but not 
sure.
module main(
     input RESET,
     input [15:0] ADDR,
     inout [7:0] DATA,
      output [7:0] BANK,
     input CLK,
     input IO2,
     input IO3,
     output FLASH_CE,
     output FLASH_WE,
     output FLASH_OE,
     output UART_CE,
     input CART_EN,
     input FLASH_EN,
     input IO_SEL,
      input CR_W,
      input BLK5
     );


comparator_6_bit addr_comp(ADDR[9:4], 0, ADDR_VALID);
register8        bank_reg(CLK, RESET, CART_EN & ADDR_VALID & !ADDR[3] & 
!ADDR[2] & !ADDR[1] & !ADDR[0], CR_W, DATA, BANK);

assign IO_BANK = (IO_SEL) ? IO3 : IO2;
assign FLASH_CE = !(CART_EN & FLASH_EN & !BLK5);
assign FLASH_WE = (CR_W);
assign FLASH_OE = (!CR_W);
assign UART_CE = (CART_EN & !IO_BANK & ADDR_VALID);
endmodule

module register8( clock, reset, enable, read, data, regData);

input clock;
input reset;
input enable;
input read;
inout [7:0] data;
output [7:0] regData;
reg [7:0] regData;

// does the HiZ override the incoming data on a write?
assign data = (enable && read) ? regData : 8'bz;

always @ (posedge clock)
    begin
         if(!reset)
                 regData <= 0;
         else if(enable && !read)
              regData <= data;
   end
endmodule

module comparator_6_bit (
     input [5:0] a,
     input [5:0] b,
     output equal
     );

   assign equal = (a == b);
endmodule


Jim

-- 
Jim Brain
brain@jbrain.com
www.jbrain.com


       Message was sent through the cbm-hackers mailing list
Received on 2013-11-18 09:00:03

Archive generated by hypermail 2.2.0.