📄 drf1024x16.v
字号:
//
// CONFIDENTIAL AND PROPRIETARY SOFTWARE OF ARM Physical IP, INC.
//
// Copyright (c) 1993-2006 ARM Physical IP, Inc. All Rights Reserved.
//
// Use of this Software is subject to the terms and conditions of the
// applicable license agreement with ARM Physical IP, Inc. In addition,
// this Software is protected by patents, copyright law and international
// treaties.
//
// The copyright notice(s) in this Software does not indicate actual or
// intended publication of this Software.
//
// name: High Speed/Density Two Port Register File Generator
// SMIC 0.18um Logic018 Process
// version: 2005Q3V1
// comment:
// configuration: -instname drf1024x16 -words 1024 -bits 16 -frequency 1 -ring_width 2 -mux 4 -drive 3 -write_mask off -wp_size 8 -top_layer met6 -power_type rings -horiz met3 -vert met2 -cust_comment "" -left_bus_delim "[" -right_bus_delim "]" -pwr_gnd_rename "VDD:VDD,GND:VSS" -prefix "" -pin_space 0.0 -name_case upper -check_instname on -diodes on -inside_ring_type GND -dpccm on -asvm off
//
// Verilog model for Synchronous Dual-Port Register File
//
// Instance Name: drf1024x16
// Words: 1024
// Word Width: 16
// Pipeline: No
//
// Creation Date: 2006-03-16 01:14:56Z
// Version: 2005Q3V1
//
// Verified With: Cadence Verilog-XL
//
// Modeling Assumptions: This model supports full gate level simulation
// including proper x-handling and timing check behavior. Unit
// delay timing is included in the model. Back-annotation of SDF
// (v2.1) is supported. SDF can be created utilyzing the delay
// calculation views provided with this generator and supported
// delay calculators. For netlisting simplicity, buses are
// not exploded. All buses are modeled [MSB:LSB]. All ports are
// padded with Verilog primitives.
//
// Modeling Limitations: None.
//
// Known Bugs: None.
//
// Known Work Arounds: N/A
//
`timescale 1 ns/1 ps
`celldefine
module drf1024x16 (
QA,
AA,
CLKA,
CENA,
AB,
DB,
CLKB,
CENB
);
parameter BITS = 16;
parameter word_depth = 1024;
parameter addr_width = 10;
parameter wordx = {BITS{1'bx}};
parameter addrx = {addr_width{1'bx}};
output [15:0] QA;
input [9:0] AA;
input CLKA;
input CENA;
input [9:0] AB;
input [15:0] DB;
input CLKB;
input CENB;
reg [BITS-1:0] mem [word_depth-1:0];
reg NOT_CONTA;
reg NOT_CONTB;
reg NOT_CENA;
reg NOT_CENB;
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_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 [BITS-1:0] NOT_DB;
reg NOT_CLKA_PER;
reg NOT_CLKA_MINH;
reg NOT_CLKA_MINL;
reg NOT_CLKB_PER;
reg NOT_CLKB_MINH;
reg NOT_CLKB_MINL;
reg LAST_NOT_CENA;
reg LAST_NOT_CENB;
reg LAST_NOT_AA0;
reg LAST_NOT_AA1;
reg LAST_NOT_AA2;
reg LAST_NOT_AA3;
reg LAST_NOT_AA4;
reg LAST_NOT_AA5;
reg LAST_NOT_AA6;
reg LAST_NOT_AA7;
reg LAST_NOT_AA8;
reg LAST_NOT_AA9;
reg [addr_width-1:0] LAST_NOT_AA;
reg LAST_NOT_AB0;
reg LAST_NOT_AB1;
reg LAST_NOT_AB2;
reg LAST_NOT_AB3;
reg LAST_NOT_AB4;
reg LAST_NOT_AB5;
reg LAST_NOT_AB6;
reg LAST_NOT_AB7;
reg LAST_NOT_AB8;
reg LAST_NOT_AB9;
reg [addr_width-1:0] LAST_NOT_AB;
reg LAST_NOT_DB0;
reg LAST_NOT_DB1;
reg LAST_NOT_DB2;
reg LAST_NOT_DB3;
reg LAST_NOT_DB4;
reg LAST_NOT_DB5;
reg LAST_NOT_DB6;
reg LAST_NOT_DB7;
reg LAST_NOT_DB8;
reg LAST_NOT_DB9;
reg LAST_NOT_DB10;
reg LAST_NOT_DB11;
reg LAST_NOT_DB12;
reg LAST_NOT_DB13;
reg LAST_NOT_DB14;
reg LAST_NOT_DB15;
reg [BITS-1:0] LAST_NOT_DB;
reg LAST_NOT_CLKA_PER;
reg LAST_NOT_CLKA_MINH;
reg LAST_NOT_CLKA_MINL;
reg LAST_NOT_CLKB_PER;
reg LAST_NOT_CLKB_MINH;
reg LAST_NOT_CLKB_MINL;
reg LAST_NOT_CONTA;
reg LAST_NOT_CONTB;
wire contA_flag;
wire contB_flag;
wire cont_flag;
wire [BITS-1:0] _QA;
wire [addr_width-1:0] _AA;
wire [addr_width-1:0] _AB;
wire _CLKA;
wire _CLKB;
wire _CENA;
wire _CENB;
wire [BITS-1:0] _DB;
wire re_flagA;
wire re_flagB;
reg LATCHED_CENA;
reg LATCHED_CENB;
reg [addr_width-1:0] LATCHED_AA;
reg [addr_width-1:0] LATCHED_AB;
reg [BITS-1:0] LATCHED_DB;
reg CENAi;
reg CENBi;
reg [addr_width-1:0] AAi;
reg [addr_width-1:0] ABi;
reg [BITS-1:0] DBi;
reg [BITS-1:0] QAi;
reg [BITS-1:0] LAST_QAi;
reg LAST_CLKA;
reg LAST_CLKB;
reg valid_cycleA;
reg valid_cycleB;
task update_Anotifier_buses;
begin
NOT_AA = {
NOT_AA9,
NOT_AA8,
NOT_AA7,
NOT_AA6,
NOT_AA5,
NOT_AA4,
NOT_AA3,
NOT_AA2,
NOT_AA1,
NOT_AA0};
end
endtask
task update_Bnotifier_buses;
begin
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_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};
end
endtask
task mem_cycleA;
begin
valid_cycleA = 1'bx;
casez({CENAi})
1'b0: begin
valid_cycleA = 1;
read_memA(1,0);
end
1'b1: ;
1'bx: begin
valid_cycleA = 1;
read_memA(0,1);
end
endcase
end
endtask
task mem_cycleB;
begin
valid_cycleB = 1'bx;
casez(CENBi)
1'b0: begin
valid_cycleB = 0;
write_mem(ABi,DBi);
end
1'b1: ;
1'bx: begin
valid_cycleB = 0;
write_mem_x(ABi);
end
endcase
end
endtask
task contentionA;
begin
casez(valid_cycleB)
1'bx: ;
1'b0:begin
read_memA(0,1);
end
1'b1: ;
endcase
end
endtask
task contentionB;
begin
casez(valid_cycleA)
1'bx: ;
1'b1:begin
read_memA(0,1);
end
1'b0: ;
endcase
end
endtask
task update_Alast_notifiers;
begin
LAST_NOT_AA = NOT_AA;
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;
end
endtask
task update_Blast_notifiers;
begin
LAST_NOT_AB = NOT_AB;
LAST_NOT_DB = NOT_DB;
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;
end
endtask
task latch_Ainputs;
begin
LATCHED_AA = _AA ;
LATCHED_CENA = _CENA ;
LAST_QAi = QAi;
end
endtask
task latch_Binputs;
begin
LATCHED_AB = _AB ;
LATCHED_DB = _DB ;
LATCHED_CENB = _CENB ;
end
endtask
task update_Alogic;
integer n;
begin
CENAi = LATCHED_CENA;
AAi = LATCHED_AA;
end
endtask
task update_Blogic;
integer n;
begin
CENBi = LATCHED_CENB;
ABi = LATCHED_AB;
DBi = LATCHED_DB;
end
endtask
task x_Ainputs;
integer n;
begin
for (n=0; n<addr_width; n=n+1)
begin
LATCHED_AA[n] = (NOT_AA[n]!==LAST_NOT_AA[n]) ? 1'bx : LATCHED_AA[n] ;
end
LATCHED_CENA = (NOT_CENA!==LAST_NOT_CENA) ? 1'bx : LATCHED_CENA ;
end
endtask
task x_Binputs;
integer n;
begin
for (n=0; n<addr_width; n=n+1)
begin
LATCHED_AB[n] = (NOT_AB[n]!==LAST_NOT_AB[n]) ? 1'bx : LATCHED_AB[n] ;
end
for (n=0; n<BITS; n=n+1)
begin
LATCHED_DB[n] = (NOT_DB[n]!==LAST_NOT_DB[n]) ? 1'bx : LATCHED_DB[n] ;
end
LATCHED_CENB = (NOT_CENB!==LAST_NOT_CENB) ? 1'bx : LATCHED_CENB ;
end
endtask
task read_memA;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -