`define RAM_ADDRESS_BITS 23 `define RAM_BYTE_BITS 8 `define RAM_WORD_BYTES 2 `define RAM_LINE_WORDS 1 `define PDP_ADDRESS_BITS 15 `define NUM_PDPS 12 `define UART_BYTE_BITS 8 `define TAG_BITS $clog2(`NUM_PDPS+1) typedef bit [`RAM_ADDRESS_BITS-1:0] ram_word_address_t; typedef bit [`RAM_ADDRESS_BITS-1:$clog2(`RAM_LINE_WORDS)] ram_line_address_t; typedef bit [`RAM_BYTE_BITS-1:0] ram_byte_t; typedef ram_byte_t [`RAM_WORD_BYTES-1:0] ram_word_t; typedef ram_word_t [`RAM_LINE_WORDS-1:0] ram_line_t; typedef bit [$clog2(`RAM_WORD_BYTES):0] ram_word_mask_t; typedef ram_word_mask_t [`RAM_LINE_WORDS-1:0] ram_line_mask_t; typedef bit [$clog2(`RAM_WORD_BYTES+1):0] ram_byte_count_t; typedef bit [$clog2(`RAM_LINE_WORDS+1):0] ram_word_count_t; typedef bit [`RAM_ADDRESS_BITS-1:`PDP_ADDRESS_BITS] ram_pdp_address_space_t; typedef bit [`PDP_ADDRESS_BITS-1:0] pdp_word_address_t; typedef bit [`PDP_ADDRESS_BITS-1:$clog2(`RAM_LINE_WORDS)] pdp_line_address_t; typedef bit [`TAG_BITS-1:0] tag_t; typedef bit [`UART_BYTE_BITS-1:0] uart_byte_t; typedef struct packed { ram_line_address_t address; bit write; ram_line_t data; ram_line_mask_t mask; tag_t tag; } ram_command_t; typedef struct packed { ram_line_address_t address; ram_line_t data; tag_t tag; } ram_read_response_t; typedef struct packed { pdp_line_address_t address; bit write; ram_line_t data; ram_line_mask_t mask; } pdp_command_t; typedef struct packed { pdp_line_address_t address; ram_line_t data; } pdp_read_response_t;