mbist 4 dual port ram - fail_h signal is high

H

HolySaint

Guest
la mia ram è generato dal compilatore memery

quando i gen CTRL bist, i sim si

ma il segnale è alto fail_h
Non so perchè l'uscita è 'X'

guarda la foto<img src="http://images.elektroda.net/22_1228735865_thumb.jpg" border="0" alt="mbist 4 dual port ram - fail_h signal is high" title="mbist 4 RAM dual port - fail_h segnale è alto"/>

<img src="http://images.elektroda.net/32_1228798488_thumb.jpg" border="0" alt="mbist 4 dual port ram - fail_h signal is high" title="mbist 4 RAM dual port - fail_h segnale è alto"/>Last edited by HolySaint il 09 Dec 2008 5:55, modificato 1 volta in totale

 
Hi holysaint

Ci potrebbe essere un sacco di possibilità.
Forse il modello di memoria non è corretta.
Forse le opzioni di simulazione non sono impostate correttamente.

Andrò verificare il punto in cui fail_h andare alto.Se la memoria è uscita X, ci potrebbero essere le violazioni di temporizzazione.

 
Hi holysaint

Sembra davvero strano che test_QA andare a X improvvisamente quando si legge l'indirizzo 0xB70.Hai controllato che certo valore è stato scritto o int 0xB70 prima di questo?

 
spiacente
Do la foto sbagliata

sguardo che ancora una volta

la prima fornire dati
i dati sceond leggereAggiunto dopo 7 minuti:l'ariete è il seguente:

Codice:

/ /

/ / Riservate e di proprietà SOFTWARE DI ARM fisica IP, INC

/ /

/ / Copyright (c) 1993-2008 ARM fisica IP, Inc. Tutti i diritti riservati.

/ /

/ / L'utilizzo di questo software è soggetto ai termini e alle condizioni del

/ / Contratto di licenza con ARM fisico IP, Inc. In aggiunta,

/ / Questo software è protetto da brevetti, diritto d'autore e internazionale

/ / Trattati.

/ /

/ / La nota di copyright (s) in questo software non indica reali o

/ / Destinato alla pubblicazione di questo software.

/ /

/ / Nome: Alta Velocità / Densità Dual-Port SRAM Generator

/ / SMIC 0.18um Logic018 processo

/ / Versione: 2005Q3V1

/ / Comment:

/ / Configurazione:-instname "test_ram" parole-576-bit 32-frequenza 67-ring_width 5-mux 4-Drive 12-write_mask off-wp_size 8-top_layer met5-rings power_type-met4 oriz-vert met4-cust_comment "" -- left_bus_delim "["-right_bus_delim "]"-pwr_gnd_rename "VDD: VDD, GND: VSS"-prefix "" pin_space-0.0-name_case superiore check_instname on-diodi on-GND inside_ring_type-dpccm on-off asvm

/ /

/ / Modello Verilog per sincroni Dual-Port Ram

/ /

/ / Nome istanza: test_ram

/ / Parole: 576

/ / Word Larghezza: 32

/ / Pipeline: No

/ /

/ / Data di creazione: 2008-08-12 07:22:46 Z

/ / Version: 2005Q3V1

/ /

/ / Verificate con: Cadence Verilog-XL

/ /

/ / Assunzioni Modeling: Questo modello supporta il livello cancello pieno di simulazione

/ / X-tra cui corretta gestione e il comportamento di controllo dei tempi. Unità

/ / Tempo di ritardo è inclusa nel modello.
Back-annotazione di SDF

/ / (V2.1) è supportato. SDF possono essere creati utilyzing il ritardo

/ / Views calcolo previsto con questo generatore e sostenuto

/ / Calcolatrici ritardo. Tutti gli autobus sono modellate [MSB: LSB]. All

/ / Porte vengono riempiti con Verilog primitive.

/ /

/ / Limitazioni Modeling: la funzione di blocco di uscita è stato eliminato

/ / Completamente da questo modello. La maggior parte dei simulatori Verilog sono

/ / Incapace di programmazione più di 1 caso su aumento

/ / Bordo di clock. Pertanto, non è possibile al modello

/ / La presa di uscita (a x) l'azione in modo corretto. E 'necessario

/ / Per eseguire gli strumenti di temporizzazione statico percorso utilizzando Artisan fornito

/ / Modelli tempi per assicurarsi che il tempo di attesa in uscita è

/ / Sufficiente per non violare tenere limiti di tempo

/ / Della valle flip-flop.

/ /

/ / Problemi noti: Nessuno.

/ /

/ / Known I dintorni di lavoro: N / A

/ /

`orizzonte temporale 1 ns / 1 PS

`celldefine

Modulo test_ram (

QA,

CLKA,

CENA,

Wena,

AA,

DA,

Oena,

QB,

ClkB,

CENB,

WENB,

AB,

DB,

OeNB

);

BITS parametro = 32;

parametro word_depth = 576;

parametro addr_width = 10;

wordx parametro = ((BITS 1'bx));

parametro addrx = (addr_width (1'bx));output [31:0] QA;

Ingresso CLKA;

Ingresso CENA;

Ingresso wena;

input [9:0] AA;

input [31:0] DA;

Ingresso Oena;

output [31:0] QB;

Ingresso ClkB;

Ingresso CENB;

Ingresso WENB;

input [9:0] AB;

input [31:0] DB;

Ingresso OeNB;reg [BITS-1: 0] mem [word_depth-1: 0];

reg NOT_CONTA;

reg NOT_CONTB;reg NOT_CENA;

reg NOT_WENA;reg NOT_AA0;

reg NOT_AA1;

reg NOT_AA2;

reg NOT_AA3;

reg NOT_AA4;

reg NOT_AA5;

reg NOT_AA6;

reg NOT_AA7;

reg NOT_AA8;

reg NOT_AA9;

reg [addr_width-1: 0] NOT_AA;

reg NOT_DA0;

reg NOT_DA1;

reg NOT_DA2;

reg NOT_DA3;

reg NOT_DA4;

reg NOT_DA5;

reg NOT_DA6;

reg NOT_DA7;

reg NOT_DA8;

reg NOT_DA9;

reg NOT_DA10;

reg NOT_DA11;

reg NOT_DA12;

reg NOT_DA13;

reg NOT_DA14;

reg NOT_DA15;

reg NOT_DA16;

reg NOT_DA17;

reg NOT_DA18;

reg NOT_DA19;

reg NOT_DA20;

reg NOT_DA21;

reg NOT_DA22;

reg NOT_DA23;

reg NOT_DA24;

reg NOT_DA25;

reg NOT_DA26;

reg NOT_DA27;

reg NOT_DA28;

reg NOT_DA29;

reg NOT_DA30;

reg NOT_DA31;

reg [BITS-1: 0] NOT_DA;

reg NOT_CLKA_PER;

reg NOT_CLKA_MINH;

reg NOT_CLKA_MINL;

reg NOT_CENB;

reg NOT_WENB;reg NOT_AB0;

reg NOT_AB1;

reg NOT_AB2;

reg NOT_AB3;

reg NOT_AB4;

reg NOT_AB5;

reg NOT_AB6;

reg NOT_AB7;

reg NOT_AB8;

reg NOT_AB9;

reg [addr_width-1: 0] NOT_AB;

reg NOT_DB0;

reg NOT_DB1;

reg NOT_DB2;

reg NOT_DB3;

reg NOT_DB4;

reg NOT_DB5;

reg NOT_DB6;

reg NOT_DB7;

reg NOT_DB8;

reg NOT_DB9;

reg NOT_DB10;

reg NOT_DB11;

reg NOT_DB12;

reg NOT_DB13;

reg NOT_DB14;

reg NOT_DB15;

reg NOT_DB16;

reg NOT_DB17;

reg NOT_DB18;

reg NOT_DB19;

reg NOT_DB20;

reg NOT_DB21;

reg NOT_DB22;

reg NOT_DB23;

reg NOT_DB24;

reg NOT_DB25;

reg NOT_DB26;

reg NOT_DB27;

reg NOT_DB28;

reg NOT_DB29;

reg NOT_DB30;

reg NOT_DB31;

reg [BITS-1: 0] NOT_DB;

reg NOT_CLKB_PER;

reg NOT_CLKB_MINH;

reg NOT_CLKB_MINL;reg LAST_NOT_CENA;

reg LAST_NOT_WENA;

reg [addr_width-1: 0] LAST_NOT_AA;

reg [BITS-1: 0] LAST_NOT_DA;

reg LAST_NOT_CLKA_PER;

reg LAST_NOT_CLKA_MINH;

reg LAST_NOT_CLKA_MINL;

reg LAST_NOT_CENB;

reg LAST_NOT_WENB;

reg [addr_width-1: 0] LAST_NOT_AB;

reg [BITS-1: 0] LAST_NOT_DB;

reg LAST_NOT_CLKB_PER;

reg LAST_NOT_CLKB_MINH;

reg LAST_NOT_CLKB_MINL;reg LAST_NOT_CONTA;

reg LAST_NOT_CONTB;

filo contA_flag;

filo contB_flag;

filo cont_flag;wire [BITS-1: 0] _QA;

filo _OENAi;

wire [addr_width-1: 0] _AA;

filo _CLKA;

filo _CENA;

filo _OENA;

filo _WENA;wire [BITS-1: 0] _DA;

filo re_flagA;

filo re_data_flagA;wire [BITS-1: 0] _QB;

filo _OENBi;

wire [addr_width-1: 0] _AB;

filo _CLKB;

filo _CENB;

filo _OENB;

filo _WENB;wire [BITS-1: 0] _DB;

filo re_flagB;

filo re_data_flagB;reg LATCHED_CENA;

reg LATCHED_WENA;

reg [addr_width-1: 0] LATCHED_AA;

reg [BITS-1: 0] LATCHED_DA;

reg LATCHED_CENB;

reg LATCHED_WENB;

reg [addr_width-1: 0] LATCHED_AB;

reg [BITS-1: 0] LATCHED_DB;reg CENAi;

reg WENAi;

reg [addr_width-1: 0] AAI;

reg [BITS-1: 0] Dai;

reg [BITS-1: 0] QAI;

reg [BITS-1: 0] LAST_QAi;

reg CENBi;

reg WENBi;

reg [addr_width-1: 0] Abi;

reg [BITS-1: 0] dBi;

reg [BITS-1: 0] QBI;

reg [BITS-1: 0] LAST_QBi;
reg LAST_CLKA;

reg LAST_CLKB;
reg valid_cycleA;

reg valid_cycleB;compito update_Anotifier_buses;

iniziare

NOT_AA = (

NOT_AA9,

NOT_AA8,

NOT_AA7,

NOT_AA6,

NOT_AA5,

NOT_AA4,

NOT_AA3,

NOT_AA2,

NOT_AA1,

NOT_AA0);

NOT_DA = (

NOT_DA31,

NOT_DA30,

NOT_DA29,

NOT_DA28,

NOT_DA27,

NOT_DA26,

NOT_DA25,

NOT_DA24,

NOT_DA23,

NOT_DA22,

NOT_DA21,

NOT_DA20,

NOT_DA19,

NOT_DA18,

NOT_DA17,

NOT_DA16,

NOT_DA15,

NOT_DA14,

NOT_DA13,

NOT_DA12,

NOT_DA11,

NOT_DA10,

NOT_DA9,

NOT_DA8,

NOT_DA7,

NOT_DA6,

NOT_DA5,

NOT_DA4,

NOT_DA3,

NOT_DA2,

NOT_DA1,

NOT_DA0);

fine

endtask

compito update_Bnotifier_buses;

iniziare

NOT_AB = (

NOT_AB9,

NOT_AB8,

NOT_AB7,

NOT_AB6,

NOT_AB5,

NOT_AB4,

NOT_AB3,

NOT_AB2,

NOT_AB1,

NOT_AB0);

NOT_DB = (

NOT_DB31,

NOT_DB30,

NOT_DB29,

NOT_DB28,

NOT_DB27,

NOT_DB26,

NOT_DB25,

NOT_DB24,

NOT_DB23,

NOT_DB22,

NOT_DB21,

NOT_DB20,

NOT_DB19,

NOT_DB18,

NOT_DB17,

NOT_DB16,

NOT_DB15,

NOT_DB14,

NOT_DB13,

NOT_DB12,

NOT_DB11,

NOT_DB10,

NOT_DB9,

NOT_DB8,

NOT_DB7,

NOT_DB6,

NOT_DB5,

NOT_DB4,

NOT_DB3,

NOT_DB2,

NOT_DB1,

NOT_DB0);

fine

endtaskcompito mem_cycleA;

iniziare

valid_cycleA = 1'bx;

Casez ((WENAi, CENAi))2'b10: begin

valid_cycleA = 1;

read_memA (1,0);

fine

2'b00: begin

valid_cycleA = 0;

write_mem (AAI, DAI);

read_memA (0,0);

fine

2'b? 1:;

2'b1x: begin

valid_cycleA = 1;

read_memA (0,1);

fine

2'bx0: begin

valid_cycleA = 0;

write_mem_x (AAI);

read_memA (0,1);

fine

2'b0x,

2'bxx: begin

valid_cycleA = 0;

write_mem_x (AAI);

read_memA (0,1);

fine

endcase

fine

endtask

compito mem_cycleB;

iniziare

valid_cycleB = 1'bx;

Casez ((WENBi, CENBi))2'b10: begin

valid_cycleB = 1;

read_memB (1,0);

fine

2'b00: begin

valid_cycleB = 0;

write_mem (ABI, dBi);

read_memB (0,0);

fine

2'b? 1:;

2'b1x: begin

valid_cycleB = 1;

read_memB (0,1);

fine

2'bx0: begin

valid_cycleB = 0;

write_mem_x (ABI);

read_memB (0,1);

fine

2'b0x,

2'bxx: begin

valid_cycleB = 0;

write_mem_x (ABI);

read_memB (0,1);

fine

endcase

fine

endtaskcompito contentionA;

iniziare

Casez ((valid_cycleB, WENAi))

2'bx?:;

2'b00,

2'b0x: begin

write_mem_x (AAI);

fine

2'b10,

2'b1x: begin

read_memB (0,1);

fine

2'b01: begin

read_memA (0,1);

fine

2'b11:;

endcase

fine

endtaskcompito contentionB;

iniziare

Casez ((valid_cycleA, WENBi))

2'bx?:;

2'b00,

2'b0x: begin

write_mem_x (ABI);

fine

2'b10,

2'b1x: begin

read_memA (0,1);

fine

2'b01: begin

read_memB (0,1);

fine

2'b11:;

endcase

fine

endtaskcompito update_Alast_notifiers;

iniziare

LAST_NOT_AA = NOT_AA;

LAST_NOT_DA = NOT_DA;

LAST_NOT_WENA = NOT_WENA;

LAST_NOT_CENA = NOT_CENA;

LAST_NOT_CLKA_PER = NOT_CLKA_PER;

LAST_NOT_CLKA_MINH = NOT_CLKA_MINH;

LAST_NOT_CLKA_MINL = NOT_CLKA_MINL;

LAST_NOT_CONTA = NOT_CONTA;

fine

endtask

compito update_Blast_notifiers;

iniziare

LAST_NOT_AB = NOT_AB;

LAST_NOT_DB = NOT_DB;

LAST_NOT_WENB = NOT_WENB;

LAST_NOT_CENB = NOT_CENB;

LAST_NOT_CLKB_PER = NOT_CLKB_PER;

LAST_NOT_CLKB_MINH = NOT_CLKB_MINH;

LAST_NOT_CLKB_MINL = NOT_CLKB_MINL;

LAST_NOT_CONTB = NOT_CONTB;

fine

endtaskcompito latch_Ainputs;

iniziare

LATCHED_AA = _AA;

LATCHED_DA = _DA;

LATCHED_WENA = _WENA;

LATCHED_CENA = _CENA;

LAST_QAi = QAI;

fine

endtask

compito latch_Binputs;

iniziare

LATCHED_AB = _AB;

LATCHED_DB = _DB;

LATCHED_WENB = _WENB;

LATCHED_CENB = _CENB;

LAST_QBi = QBI;

fine

endtaskcompito update_Alogic;

iniziare

CENAi = LATCHED_CENA;

WENAi = LATCHED_WENA;

AAI = LATCHED_AA;

Dai = LATCHED_DA;

fine

endtask

compito update_Blogic;

iniziare

CENBi = LATCHED_CENB;

WENBi = LATCHED_WENB;

ABI = LATCHED_AB;

DBI = LATCHED_DB;

fine

endtask
compito x_Ainputs;

integer n;

iniziare

for (n = 0; n <addr_width; n = n 1)

iniziare

LATCHED_AA [n] = (NOT_AA [n]! == LAST_NOT_AA [n])?
1'bx: LATCHED_AA [n];

fine

for (n = 0; n <BITS; n = n 1)

iniziare

LATCHED_DA [n] = (NOT_DA [n]! == LAST_NOT_DA [n])?
1'bx: LATCHED_DA [n];

fine

LATCHED_WENA = (NOT_WENA! == LAST_NOT_WENA)?
1'bx: LATCHED_WENA;LATCHED_CENA = (NOT_CENA! == LAST_NOT_CENA)?
1'bx: LATCHED_CENA;

fine

endtask

compito x_Binputs;

integer n;

iniziare

for (n = 0; n <addr_width; n = n 1)

iniziare

LATCHED_AB [n] = (NOT_AB [n]! == LAST_NOT_AB [n])?
1'bx: LATCHED_AB [n];

fine

for (n = 0; n <BITS; n = n 1)

iniziare

LATCHED_DB [n] = (NOT_DB [n]! == LAST_NOT_DB [n])?
1'bx: LATCHED_DB [n];

fine

LATCHED_WENB = (NOT_WENB! == LAST_NOT_WENB)?
1'bx: LATCHED_WENB;LATCHED_CENB = (NOT_CENB! == LAST_NOT_CENB)?
1'bx: LATCHED_CENB;

fine

endtaskcompito read_memA;

Ingresso r_wb;

Ingresso xflag;

iniziare

if (r_wb)

iniziare

if (valid_address (AAI))

iniziare

QAI = mem [AAI];

fine

altro

iniziare

x_mem;

QAI = wordx;

fine

fine

altro

iniziare

if (xflag)

iniziare

QAI = wordx;

fine

altro

iniziare

QAI = Dai;

fine

fine

fine

endtask

compito read_memB;

Ingresso r_wb;

Ingresso xflag;

iniziare

if (r_wb)

iniziare

if (valid_address (ABI))

iniziare

QBI = mem [ABI];

fine

altro

iniziare

x_mem;

QBI = wordx;

fine

fine

altro

iniziare

if (xflag)

iniziare

QBI = wordx;

fine

altro

iniziare

QBI = DBI;

fine

fine

fine

endtaskcompito write_mem;

input [addr_width-1: 0] a;

input [BITS-1: 0] d;iniziare

Casez ((valid_address (a)))

1'b0:

x_mem;

1'b1: mem [a] = d;

endcase

fine

endtaskcompito write_mem_x;

input [addr_width-1: 0] a;

iniziare

Casez ((valid_address (a)))

1'b0:

x_mem;

1'b1: mem [a] = wordx;

endcase

fine

endtaskcompito x_mem;

integer n;

iniziare

for (n = 0; n <word_depth; n = n 1)

mem [n] = wordx;

fine

endtaskcompito process_violationsA;

iniziare

if ((NOT_CLKA_PER! == LAST_NOT_CLKA_PER) | |

(NOT_CLKA_MINH! == LAST_NOT_CLKA_MINH) | |

(NOT_CLKA_MINL! == LAST_NOT_CLKA_MINL))

iniziare

if (CENAi! == 1'b1)

iniziare

x_mem;

read_memA (0,1);

fine

fine

altro

iniziare

update_Anotifier_buses;

x_Ainputs;

update_Alogic;

if (NOT_CONTA! == LAST_NOT_CONTA)

iniziare

contentionA;

fine

altro

iniziare

mem_cycleA;

fine

fine

update_Alast_notifiers;

fine

endtaskcompito process_violationsB;

iniziare

if ((NOT_CLKB_PER! == LAST_NOT_CLKB_PER) | |

(NOT_CLKB_MINH! == LAST_NOT_CLKB_MINH) | |

(NOT_CLKB_MINL! == LAST_NOT_CLKB_MINL))

iniziare

if (CENBi! == 1'b1)

iniziare

x_mem;

read_memB (0,1);

fine

fine

altro

iniziare

update_Bnotifier_buses;

x_Binputs;

update_Blogic;

if (NOT_CONTB! == LAST_NOT_CONTB)

iniziare

contentionB;

fine

altro

iniziare

mem_cycleB;

fine

fine

update_Blast_notifiers;

fine

endtaskfunzione valid_address;

input [addr_width-1: 0] a;

iniziare

valid_address = (^ (a)! == 1'bx);

fine

EndFunctionbufif0 (QA [0], _QA [0], _OENAi);

bufif0 (QA [1], _QA [1], _OENAi);

bufif0 (QA [2], _QA [2], _OENAi);

bufif0 (QA [3], _QA [3], _OENAi);

bufif0 (QA [4], _QA [4], _OENAi);

bufif0 (QA [5], _QA [5], _OENAi);

bufif0 (QA [6], _QA [6], _OENAi);

bufif0 (QA [7], _QA [7], _OENAi);

bufif0 (QA [8], _QA [8], _OENAi);

bufif0 (QA [9], _QA [9], _OENAi);

bufif0 (QA [10], _QA [10], _OENAi);

bufif0 (QA [11], _QA [11], _OENAi);

bufif0 (QA [12], _QA [12], _OENAi);

bufif0 (QA [13], _QA [13], _OENAi);

bufif0 (QA [14], _QA [14], _OENAi);

bufif0 (QA [15], _QA [15], _OENAi);

bufif0 (QA [16], _QA [16], _OENAi);

bufif0 (QA [17], _QA [17], _OENAi);

bufif0 (QA [18], _QA [18], _OENAi);

bufif0 (QA [19], _QA [19], _OENAi);

bufif0 (QA [20], _QA [20], _OENAi);

bufif0 (QA [21], _QA [21], _OENAi);

bufif0 (QA [22], _QA [22], _OENAi);

bufif0 (QA [23], _QA [23], _OENAi);

bufif0 (QA [24], _QA [24], _OENAi);

bufif0 (QA [25], _QA [25], _OENAi);

bufif0 (QA [26], _QA [26], _OENAi);

bufif0 (QA [27], _QA [27], _OENAi);

bufif0 (QA [28], _QA [28], _OENAi);

bufif0 (QA [29], _QA [29], _OENAi);

bufif0 (QA [30], _QA [30], _OENAi);

bufif0 (QA [31], _QA [31], _OENAi);

buf (_DA [0], da [0]);

buf (_DA [1], DA [1]);

buf (_DA [2], da [2]);

buf (_DA [3], da [3]);

buf (_DA[4], DA[4]);
buf (_DA [5], da [5]);

buf (_DA [6], da [6]);

buf (_DA [7], da [7]);

buf (_DA [8], da [8]);

buf (_DA [9], da [9]);

buf (_DA [10], da [10]);

buf (_DA [11], da [11]);

buf (_DA [12], da [12]);

buf (_DA [13], da [13]);

buf (_DA [14], da [14]);

buf (_DA [15], da [15]);

buf (_DA [16], da [16]);

buf (_DA [17], da [17]);

buf (_DA [18], da [18]);

buf (_DA [19], da [19]);

buf (_DA [20], da [20]);

buf (_DA [21], da [21]);

buf (_DA [22], da [22]);

buf (_DA [23], da [23]);

buf (_DA [24], da [24]);

buf (_DA [25], da [25]);

buf (_DA [26], da [26]);

buf (_DA [27], da [27]);

buf (_DA [28], da [28]);

buf (_DA [29], da [29]);

buf (_DA [30], da [30]);

buf (_DA [31], da [31]);

buf (_AA [0], aa [0]);

buf (_AA [1], aa [1]);

buf (_AA [2], aa [2]);

buf (_AA [3], aa [3]);

buf (_AA [4], aa [4]);

buf (_AA [5], aa [5]);

buf (_AA [6], aa [6]);

buf (_AA [7], aa [7]);

buf (_AA [8], aa [8]);

buf (_AA [9], aa [9]);

buf (_CLKA, CLKA);

buf (_WENA, wena);

buf (_OENA, Oena);

buf (_CENA, cena);

bufif0 (QB [0], _QB [0], _OENBi);

bufif0 (QB [1], _QB [1], _OENBi);

bufif0 (QB [2], _QB [2], _OENBi);

bufif0 (QB [3], _QB [3], _OENBi);

bufif0 (QB [4], _QB [4], _OENBi);

bufif0 (QB [5], _QB [5], _OENBi);

bufif0 (QB [6], _QB [6], _OENBi);

bufif0 (QB [7], _QB [7], _OENBi);

bufif0 (QB [8], _QB [8], _OENBi);

bufif0 (QB [9], _QB [9], _OENBi);

bufif0 (QB [10], _QB [10], _OENBi);

bufif0 (QB [11], _QB [11], _OENBi);

bufif0 (QB [12], _QB [12], _OENBi);

bufif0 (QB [13], _QB [13], _OENBi);

bufif0 (QB [14], _QB [14], _OENBi);

bufif0 (QB [15], _QB [15], _OENBi);

bufif0 (QB [16], _QB [16], _OENBi);

bufif0 (QB [17], _QB [17], _OENBi);

bufif0 (QB [18], _QB [18], _OENBi);

bufif0 (QB [19], _QB [19], _OENBi);

bufif0 (QB [20], _QB [20], _OENBi);

bufif0 (QB [21], _QB [21], _OENBi);

bufif0 (QB [22], _QB [22], _OENBi);

bufif0 (QB [23], _QB [23], _OENBi);

bufif0 (QB [24], _QB [24], _OENBi);

bufif0 (QB [25], _QB [25], _OENBi);

bufif0 (QB [26], _QB [26], _OENBi);

bufif0 (QB [27], _QB [27], _OENBi);

bufif0 (QB [28], _QB [28], _OENBi);

bufif0 (QB [29], _QB [29], _OENBi);

bufif0 (QB [30], _QB [30], _OENBi);

bufif0 (QB [31], _QB [31], _OENBi);

buf (_DB [0], DB [0]);

buf (_DB [1], DB [1]);

buf (_DB [2], DB [2]);

buf (_DB [3], DB [3]);

buf (_DB [4], DB [4]);

buf (_DB [5], DB [5]);

buf (_DB [6], DB [6]);

buf (_DB [7], DB [7]);

buf (_DB [8], DB [8]);

buf (_DB [9], DB [9]);

buf (_DB [10], DB [10]);

buf (_DB [11], DB [11]);

buf (_DB [12], DB [12]);

buf (_DB [13], DB [13]);

buf (_DB [14], DB [14]);

buf (_DB [15], DB [15]);

buf (_DB [16], DB [16]);

buf (_DB [17], DB [17]);

buf (_DB [18], DB [18]);

buf (_DB [19], DB [19]);

buf (_DB [20], DB [20]);

buf (_DB [21], DB [21]);

buf (_DB [22], DB [22]);

buf (_DB [23], DB [23]);

buf (_DB [24], DB [24]);

buf (_DB [25], DB [25]);

buf (_DB [26], DB [26]);

buf (_DB [27], DB [27]);

buf (_DB [28], DB [28]);

buf (_DB [29], DB [29]);

buf (_DB [30], DB [30]);

buf (_DB [31], DB [31]);

buf (_AB [0], AB [0]);

buf (_AB [1], AB [1]);

buf (_AB [2], AB [2]);

buf (_AB [3], AB [3]);

buf (_AB [4], AB [4]);

buf (_AB [5], AB [5]);

buf (_AB [6], AB [6]);

buf (_AB [7], AB [7]);

buf (_AB [8], AB [8]);

buf (_AB [9], AB [9]);

buf (_CLKB, ClkB);

buf (_WENB, WENB);

buf (_OENB, OeNB);

buf (_CENB, CENB);assegnare _OENAi = _OENA;

assegnare _QA = QAI;

assegnare re_flagA =! (_CENA);

assegnare re_data_flagA =! (_CENA | | _WENA);

assegnare _OENBi = _OENB;

assegnare _QB = QBI;

assegnare re_flagB =! (_CENB);

assegnare re_data_flagB =! (_CENB | | _WENB);assegnare contA_flag =

(_AA === ABI) & &

! ((_WENA === 1'b1) & & (WENBi === 1'b1)) & &

(_CENA! == 1'b1) & &

(CENBi! == 1'b1);assegnare contB_flag =

(_AB === AAI) & &

! ((_WENB === 1'b1) & & (WENAi === 1'b1)) & &

(_CENB! == 1'b1) & &

(CENAi! == 1'b1);assegnare cont_flag =

(_AB === _AA) & &

! ((_WENB === 1'b1) & & (_WENA === 1'b1)) & &

(_CENB! == 1'b1) & &

(_CENA! == 1'b1);sempre @ (

NOT_AA0 o

NOT_AA1 o

NOT_AA2 o

NOT_AA3 o

NOT_AA4 o

NOT_AA5 o

NOT_AA6 o

NOT_AA7 o

NOT_AA8 o

NOT_AA9 o

NOT_DA0 o

NOT_DA1 o

NOT_DA2 o

NOT_DA3 o

NOT_DA4 o

NOT_DA5 o

NOT_DA6 o

NOT_DA7 o

NOT_DA8 o

NOT_DA9 o

NOT_DA10 o

NOT_DA11 o

NOT_DA12 o

NOT_DA13 o

NOT_DA14 o

NOT_DA15 o

NOT_DA16 o

NOT_DA17 o

NOT_DA18 o

NOT_DA19 o

NOT_DA20 o

NOT_DA21 o

NOT_DA22 o

NOT_DA23 o

NOT_DA24 o

NOT_DA25 o

NOT_DA26 o

NOT_DA27 o

NOT_DA28 o

NOT_DA29 o

NOT_DA30 o

NOT_DA31 o

NOT_WENA o

NOT_CENA o

NOT_CONTA o

NOT_CLKA_PER o

NOT_CLKA_MINH o

NOT_CLKA_MINL

)

iniziare

process_violationsA;

fine

sempre @ (

NOT_AB0 o

NOT_AB1 o

NOT_AB2 o

NOT_AB3 o

NOT_AB4 o

NOT_AB5 o

NOT_AB6 o

NOT_AB7 o

NOT_AB8 o

NOT_AB9 o

NOT_DB0 o

NOT_DB1 o

NOT_DB2 o

NOT_DB3 o

NOT_DB4 o

NOT_DB5 o

NOT_DB6 o

NOT_DB7 o

NOT_DB8 o

NOT_DB9 o

NOT_DB10 o

NOT_DB11 o

NOT_DB12 o

NOT_DB13 o

NOT_DB14 o

NOT_DB15 o

NOT_DB16 o

NOT_DB17 o

NOT_DB18 o

NOT_DB19 o

NOT_DB20 o

NOT_DB21 o

NOT_DB22 o

NOT_DB23 o

NOT_DB24 o

NOT_DB25 o

NOT_DB26 o

NOT_DB27 o

NOT_DB28 o

NOT_DB29 o

NOT_DB30 o

NOT_DB31 o

NOT_WENB o

NOT_CENB o

NOT_CONTB o

NOT_CLKB_PER o

NOT_CLKB_MINH o

NOT_CLKB_MINL

)

iniziare

process_violationsB;

finesempre @ (_CLKA)

iniziare

Casez ((LAST_CLKA, _CLKA))

2'b01: begin

latch_Ainputs;

update_Alogic;

mem_cycleA;

fine2'b10,

2'bx?,

2'b00,

2'b11:;2'b? X: begin

x_mem;

read_memA (0,1);

fineendcase

LAST_CLKA = _CLKA;

fine

sempre @ (_CLKB)

iniziare

Casez ((LAST_CLKB, _CLKB))

2'b01: begin

latch_Binputs;

update_Blogic;

mem_cycleB;

fine2'b10,

2'bx?,

2'b00,

2'b11:;2'b? X: begin

x_mem;

read_memB (0,1);

fineendcase

LAST_CLKB = _CLKB;

finespecificare

$ setuphold (posedge CLKA, posedge CENA, 1,000, 0,500, NOT_CENA);

$ setuphold (posedge CLKA, negedge CENA, 1,000, 0,500, NOT_CENA);

$ setuphold (posedge CLKA & & & re_flagA, posedge Wena, 1,000, 0,500, NOT_WENA);

$ setuphold (posedge CLKA & & & re_flagA, negedge Wena, 1,000, 0,500, NOT_WENA);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [0], 1,000, 0,500, NOT_AA0);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [0], 1,000, 0,500, NOT_AA0);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [1], 1,000, 0,500, NOT_AA1);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [1], 1,000, 0,500, NOT_AA1);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [2], 1,000, 0,500, NOT_AA2);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [2], 1,000, 0,500, NOT_AA2);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [3], 1,000, 0,500, NOT_AA3);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [3], 1,000, 0,500, NOT_AA3);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [4], 1,000, 0,500, NOT_AA4);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [4], 1,000, 0,500, NOT_AA4);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [5], 1,000, 0,500, NOT_AA5);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [5], 1,000, 0,500, NOT_AA5);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [6], 1,000, 0,500, NOT_AA6);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [6], 1,000, 0,500, NOT_AA6);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [7], 1,000, 0,500, NOT_AA7);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [7], 1,000, 0,500, NOT_AA7);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [8], 1,000, 0,500, NOT_AA8);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [8], 1,000, 0,500, NOT_AA8);

$ setuphold (posedge CLKA & & & re_flagA, AA posedge [9], 1,000, 0,500, NOT_AA9);

$ setuphold (posedge CLKA & & & re_flagA, AA negedge [9], 1,000, 0,500, NOT_AA9);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [0], 1,000, 0,500, NOT_DA0);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [0], 1,000, 0,500, NOT_DA0);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [1], 1,000, 0,500, NOT_DA1);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [1], 1,000, 0,500, NOT_DA1);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [2], 1,000, 0,500, NOT_DA2);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [2], 1,000, 0,500, NOT_DA2);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [3], 1,000, 0,500, NOT_DA3);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [3], 1,000, 0,500, NOT_DA3);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [4], 1,000, 0,500, NOT_DA4);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [4], 1,000, 0,500, NOT_DA4);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [5], 1,000, 0,500, NOT_DA5);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [5], 1,000, 0,500, NOT_DA5);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [6], 1,000, 0,500, NOT_DA6);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [6], 1,000, 0,500, NOT_DA6);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [7], 1,000, 0,500, NOT_DA7);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [7], 1,000, 0,500, NOT_DA7);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [8], 1,000, 0,500, NOT_DA8);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [8], 1,000, 0,500, NOT_DA8);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [9], 1,000, 0,500, NOT_DA9);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [9], 1,000, 0,500, NOT_DA9);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [10], 1,000, 0,500, NOT_DA10);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [10], 1,000, 0,500, NOT_DA10);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [11], 1,000, 0,500, NOT_DA11);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [11], 1,000, 0,500, NOT_DA11);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [12], 1,000, 0,500, NOT_DA12);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [12], 1,000, 0,500, NOT_DA12);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [13], 1,000, 0,500, NOT_DA13);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [13], 1,000, 0,500, NOT_DA13);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [14], 1,000, 0,500, NOT_DA14);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [14], 1,000, 0,500, NOT_DA14);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [15], 1,000, 0,500, NOT_DA15);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [15], 1,000, 0,500, NOT_DA15);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [16], 1,000, 0,500, NOT_DA16);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [16], 1,000, 0,500, NOT_DA16);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [17], 1,000, 0,500, NOT_DA17);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [17], 1,000, 0,500, NOT_DA17);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [18], 1,000, 0,500, NOT_DA18);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [18], 1,000, 0,500, NOT_DA18);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [19], 1,000, 0,500, NOT_DA19);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [19], 1,000, 0,500, NOT_DA19);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [20], 1,000, 0,500, NOT_DA20);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [20], 1,000, 0,500, NOT_DA20);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [21], 1,000, 0,500, NOT_DA21);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [21], 1,000, 0,500, NOT_DA21);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [22], 1,000, 0,500, NOT_DA22);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [22], 1,000, 0,500, NOT_DA22);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [23], 1,000, 0,500, NOT_DA23);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [23], 1,000, 0,500, NOT_DA23);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [24], 1,000, 0,500, NOT_DA24);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [24], 1,000, 0,500, NOT_DA24);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [25], 1,000, 0,500, NOT_DA25);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [25], 1,000, 0,500, NOT_DA25);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [26], 1,000, 0,500, NOT_DA26);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [26], 1,000, 0,500, NOT_DA26);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [27], 1,000, 0,500, NOT_DA27);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [27], 1,000, 0,500, NOT_DA27);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [28], 1,000, 0,500, NOT_DA28);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [28], 1,000, 0,500, NOT_DA28);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [29], 1,000, 0,500, NOT_DA29);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [29], 1,000, 0,500, NOT_DA29);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [30], 1,000, 0,500, NOT_DA30);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [30], 1,000, 0,500, NOT_DA30);

$ setuphold (posedge CLKA & & & re_data_flagA, posedge DA [31], 1,000, 0,500, NOT_DA31);

$ setuphold (posedge CLKA & & & re_data_flagA, negedge DA [31], 1,000, 0,500, NOT_DA31);

$ setuphold (posedge ClkB, posedge CENB, 1,000, 0,500, NOT_CENB);

$ setuphold (posedge ClkB, negedge CENB, 1,000, 0,500, NOT_CENB);

$ setuphold (posedge ClkB & & & re_flagB, posedge WENB, 1,000, 0,500, NOT_WENB);

$ setuphold (posedge ClkB & & & re_flagB, negedge WENB, 1,000, 0,500, NOT_WENB);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [0], 1,000, 0,500, NOT_AB0);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [0], 1,000, 0,500, NOT_AB0);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [1], 1,000, 0,500, NOT_AB1);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [1], 1,000, 0,500, NOT_AB1);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [2], 1,000, 0,500, NOT_AB2);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [2], 1,000, 0,500, NOT_AB2);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [3], 1,000, 0,500, NOT_AB3);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [3], 1,000, 0,500, NOT_AB3);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [4], 1,000, 0,500, NOT_AB4);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [4], 1,000, 0,500, NOT_AB4);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [5], 1,000, 0,500, NOT_AB5);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [5], 1,000, 0,500, NOT_AB5);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [6], 1,000, 0,500, NOT_AB6);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [6], 1,000, 0,500, NOT_AB6);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [7], 1,000, 0,500, NOT_AB7);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [7], 1,000, 0,500, NOT_AB7);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [8], 1,000, 0,500, NOT_AB8);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [8], 1,000, 0,500, NOT_AB8);

$ setuphold (posedge ClkB & & & re_flagB, posedge AB [9], 1,000, 0,500, NOT_AB9);

$ setuphold (posedge ClkB & & & re_flagB, negedge AB [9], 1,000, 0,500, NOT_AB9);

$ setuphold (posedge ClkB & & & re_data_flagB, DB posedge [0], 1,000, 0,500, NOT_DB0);

$ setuphold (posedge ClkB & & & re_data_flagB, DB negedge [0], 1,000, 0,500, NOT_DB0);

$ setuphold (posedge ClkB & & & re_data_flagB, DB posedge [1], 1,000, 0,500, NOT_DB1);

$ setuphold (posedge ClkB & & & re_data_flagB, DB negedge [1], 1,000, 0,500, NOT_DB1);

$ setuphold (posedge ClkB & & & re_data_flagB, DB posedge [2], 1,000, 0,500, NOT_DB2);

$ setuphold (posedge ClkB & & & re_data_flagB, DB negedge [2], 1,000, 0,500, NOT_DB2);

$ setuphold (posedge ClkB & & & re_data_flagB, DB posedge [3], 1,000, 0,500, NOT_DB3);

$ setuphold (posedge ClkB & & & re_data_flagB, DB negedge [3], 1,000, 0,500, NOT_DB3);

$ setuphold (posedge ClkB & & & re_data_flagB, DB posedge [4], 1,000, 0,500, NOT_DB4);

$ setuphold (posedge ClkB & & & re_data_flagB, DB negedge [4], 1,000, 0,500, NOT_DB4);

$ setuphold (posedge ClkB & & & re_data_flagB, DB posedge [5], 1,000, 0,500, NOT_DB5);

$ setuphold (posedge ClkB & & & re_data_flagB, DB negedge [5], 1,000, 0,500, NOT_DB5);

$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[6], 1.000, 0.500, NOT_DB6);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[6], 1.000, 0.500, NOT_DB6);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[7], 1.000, 0.500, NOT_DB7);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[7], 1.000, 0.500, NOT_DB7);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[8], 1.000, 0.500, NOT_DB8);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[8], 1.000, 0.500, NOT_DB8);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[9], 1.000, 0.500, NOT_DB9);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[9], 1.000, 0.500, NOT_DB9);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[10], 1.000, 0.500, NOT_DB10);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[10], 1.000, 0.500, NOT_DB10);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[11], 1.000, 0.500, NOT_DB11);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[11], 1.000, 0.500, NOT_DB11);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[12], 1.000, 0.500, NOT_DB12);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[12], 1.000, 0.500, NOT_DB12);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[13], 1.000, 0.500, NOT_DB13);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[13], 1.000, 0.500, NOT_DB13);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[14], 1.000, 0.500, NOT_DB14);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[14], 1.000, 0.500, NOT_DB14);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[15], 1.000, 0.500, NOT_DB15);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[15], 1.000, 0.500, NOT_DB15);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[16], 1.000, 0.500, NOT_DB16);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[16], 1.000, 0.500, NOT_DB16);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[17], 1.000, 0.500, NOT_DB17);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[17], 1.000, 0.500, NOT_DB17);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[18], 1.000, 0.500, NOT_DB18);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[18], 1.000, 0.500, NOT_DB18);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[19], 1.000, 0.500, NOT_DB19);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[19], 1.000, 0.500, NOT_DB19);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[20], 1.000, 0.500, NOT_DB20);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[20], 1.000, 0.500, NOT_DB20);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[21], 1.000, 0.500, NOT_DB21);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[21], 1.000, 0.500, NOT_DB21);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[22], 1.000, 0.500, NOT_DB22);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[22], 1.000, 0.500, NOT_DB22);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[23], 1.000, 0.500, NOT_DB23);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[23], 1.000, 0.500, NOT_DB23);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[24], 1.000, 0.500, NOT_DB24);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[24], 1.000, 0.500, NOT_DB24);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[25], 1.000, 0.500, NOT_DB25);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[25], 1.000, 0.500, NOT_DB25);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[26], 1.000, 0.500, NOT_DB26);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[26], 1.000, 0.500, NOT_DB26);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[27], 1.000, 0.500, NOT_DB27);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[27], 1.000, 0.500, NOT_DB27);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[28], 1.000, 0.500, NOT_DB28);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[28], 1.000, 0.500, NOT_DB28);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[29], 1.000, 0.500, NOT_DB29);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[29], 1.000, 0.500, NOT_DB29);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[30], 1.000, 0.500, NOT_DB30);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[30], 1.000, 0.500, NOT_DB30);
$setuphold(posedge CLKB &&& re_data_flagB, posedge DB[31], 1.000, 0.500, NOT_DB31);
$setuphold(posedge CLKB &&& re_data_flagB, negedge DB[31], 1.000, 0.500, NOT_DB31);
$setup(posedge CLKA, posedge CLKB &&& contB_flag, 3.000, NOT_CONTB);
$setup(posedge CLKB, posedge CLKA &&& contA_flag, 3.000, NOT_CONTA);
$hold(posedge CLKA, posedge CLKB &&& cont_flag, 0.001, NOT_CONTB);

$period(posedge CLKA, 3.000, NOT_CLKA_PER);
$width(posedge CLKA, 1.000, 0, NOT_CLKA_MINH);
$width(negedge CLKA, 1.000, 0, NOT_CLKA_MINL);
$period(posedge CLKB, 3.000, NOT_CLKB_PER);
$width(posedge CLKB, 1.000, 0, NOT_CLKB_MINH);
$width(negedge CLKB, 1.000, 0, NOT_CLKB_MINL);

(CLKA => QA[0])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[1])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[2])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[3])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[4])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[5])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[6])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[7])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[8])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[9])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[10])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[11])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[12])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[13])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[14])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[15])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[16])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[17])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[18])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[19])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[20])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[21])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[22])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[23])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[24])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[25])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[26])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[27])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[28])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[29])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[30])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKA => QA[31])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(OENA => QA[0])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[1])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[2])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[3])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[4])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[5])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[6])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[7])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[8])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[9])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[10])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[11])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[12])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[13])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[14])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[15])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[16])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[17])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[18])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[19])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[20])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[21])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[22])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[23])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[24])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[25])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[26])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[27])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[28])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[29])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[30])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENA => QA[31])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(CLKB => QB[0])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[1])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[2])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[3])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[4])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[5])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[6])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[7])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[8])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[9])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[10])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[11])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[12])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[13])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[14])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[15])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[16])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[17])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[18])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[19])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[20])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[21])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[22])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[23])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[24])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[25])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[26])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[27])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[28])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[29])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[30])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(CLKB => QB[31])=(1.000, 1.000, 0.500, 1.000, 0.500, 1.000);
(OENB => QB[0])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[1])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[2])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[3])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[4])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[5])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[6])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[7])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[8])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[9])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[10])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[11])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[12])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[13])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[14])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[15])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[16])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[17])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[18])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[19])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[20])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[21])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[22])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[23])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[24])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[25])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[26])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[27])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[28])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[29])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[30])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
(OENB => QB[31])=(1.000, 1.000, 1.000, 1.000, 1.000, 1.000);
endspecify

endmodule

`endcelldefine
 
in test_ram.v :
u define word_depth as 576 (0x240)
but ur address range is 0 to 1023 .
as a result the max address u can write is 575 , then in the simulation waveform , u will find no output after address 575(0x23F) .

Added after 17 minutes:I changed 576 to 1023 in test_ram.v and used the ram model as follow , and ran ncverilog with nospecify and notimingcheck successfully .

model test_ram (
QA,
DA,
AA,
CLKA,
CENA,
WENA,
QB,
DB, AB,CLKB,
CENB,
WENB,
OENA,
OENB )
(bist_definition (
//Pin declarations
data_in DA (array = 31:0; );
data_in DB (array = 31:0; );
data_out QA (array = 31:0; );
data_out QB (array = 31:0; );
address AA (array = 9:0; );
address AB (array = 9:0; );
clock CLKA high;
clock CLKB high;
write_enable WENA low;
write_enable WENB low;
output_enable OENA high;
output_enable OENB high;
chip_enable CENA high;
chip_enable CENB high;

address_size = 10;
data_size = 32;
message = "test_ram";
min_address = 0;
max_address = 1023;

read_write_port (
read_cycle(
change AA;
wait;
wait ;
expect QA move; )write_cycle(
change AA;
change DA;
assert WENA ;
wait ; )
)read_write_port (
read_cycle(
change AB;
wait;
wait ;
expect QB move; )write_cycle(
change AB;
change DB;
assert WENB ;
wait ; )
)
)
)plz have a try .
 

Welcome to EDABoard.com

Sponsor

Back
Top