source: ReferenceDesigns/w3_802.11/sysgen/wlan_phy_tx_pmd/blackboxes/interleaver_ram.v

Last change on this file was 5118, checked in by murphpo, 8 years ago

Better comments in black box wrapper

File size: 5.4 KB
RevLine 
[5110]1module interleaver_ram(
2  clk,
3  ce,
4  wea,
5  addra,
6  dina,
7  douta,
8  web,
9  addrb,
10  dinb,
11  doutb
12);
13
14//Sysgen blackboxes must have clk and ce ports
[5112]15// VHDL wrapper uses std_logic for these signals
[5110]16input clk;
17input ce;
18
[5112]19// Sysgen instantiates this module in a VHDL wrapper. The wrapper uses std_logic_vector(0:0) signals
20//  to connect to this module's ports. It's *very* important the scalar I/O below have dimensions [0:0].
21//  Without these XST bizarrely decides no connection is made and optimizes out the interleaver RAM.
22// Using Sysgen's "port.useHDLVector(false)" in the config.m would probably achieve the same thing.
23
[5118]24input  [0:0] dina;
25input  [0:0] wea;
26input  [8:0] addra;
[5110]27output [7:0] douta;
28
[5118]29input  [0:0] dinb;
30input  [0:0] web;
31input  [8:0] addrb;
[5110]32output [7:0] doutb;
33
[5118]34//Map sysgen clk to BRAM clks
35// This module does not use Sysgen's clock enbale (ce) signal
36// The Sysgen model must run this block at the system sample rate
37wire clka, clkb;
[5110]38assign clka = clk;
39assign clkb = clk;
40
[5118]41// dp_ram_wr_1b_rd_8b_512b is packaged as an ngc netlist cretaed with Coregen's Block Memory Generator
42//  The block memory is configured as:
43//   True dual port memory mode (required for different read/write widths)
44//   Write width A/B = 1 bit
45//   Write depth = 512 (512 bits total)
46//   Read width A/B = 8 bits
47//   Read depth = 64 (512 / 8)
48//   Always enbaled (no ena/enb ports)
49
[5110]50(* box_type = "black_box" *)
51dp_ram_wr_1b_rd_8b_512b ram_inst (
52  .clka(clka), // input clka
53  .wea(wea), // input [0 : 0] wea
54  .addra(addra), // input [8 : 0] addra
55  .dina(dina), // input [0 : 0] dina
56  .douta(douta), // output [7 : 0] douta
57  .clkb(clkb), // input clkb
58  .web(web), // input [0 : 0] web
59  .addrb(addrb), // input [8 : 0] addrb
60  .dinb(dinb), // input [0 : 0] dinb
61  .doutb(doutb) // output [7 : 0] doutb
62);
63
64endmodule
65
[5118]66//Define module for RAM blackbox - ngdbuild will substitute dp_ram_wr_1b_rd_8b_512b.ngc during implementation
[5110]67// Code inside translate_off/translate_on only used for simulation
68// Implementation will use NGC netlist for RAM block
69module dp_ram_wr_1b_rd_8b_512b(
70  clka,
71  wea,
72  addra,
73  dina,
74  douta,
75  clkb,
76  web,
77  addrb,
78  dinb,
79  doutb
80);
81
82input clka;
83input [0 : 0] wea;
84input [8 : 0] addra;
85input [0 : 0] dina;
86output [7 : 0] douta;
87input clkb;
88input [0 : 0] web;
89input [8 : 0] addrb;
90input [0 : 0] dinb;
91output [7 : 0] doutb;
92
93// synthesis translate_off
[5118]94//  BLK_MEM_GEN_V7_3 simulation model supplied by ISE - implementation will use coregen netlist
[5110]95  BLK_MEM_GEN_V7_3 #(
96    .C_ADDRA_WIDTH(9),
97    .C_ADDRB_WIDTH(9),
98    .C_ALGORITHM(1),
99    .C_AXI_ID_WIDTH(4),
100    .C_AXI_SLAVE_TYPE(0),
101    .C_AXI_TYPE(1),
102    .C_BYTE_SIZE(9),
103    .C_COMMON_CLK(1),
104    .C_DEFAULT_DATA("0"),
105    .C_DISABLE_WARN_BHV_COLL(0),
106    .C_DISABLE_WARN_BHV_RANGE(0),
107    .C_ENABLE_32BIT_ADDRESS(0),
108    .C_FAMILY("virtex6"),
109    .C_HAS_AXI_ID(0),
110    .C_HAS_ENA(0),
111    .C_HAS_ENB(0),
112    .C_HAS_INJECTERR(0),
113    .C_HAS_MEM_OUTPUT_REGS_A(0),
114    .C_HAS_MEM_OUTPUT_REGS_B(0),
115    .C_HAS_MUX_OUTPUT_REGS_A(0),
116    .C_HAS_MUX_OUTPUT_REGS_B(0),
117    .C_HAS_REGCEA(0),
118    .C_HAS_REGCEB(0),
119    .C_HAS_RSTA(0),
120    .C_HAS_RSTB(0),
121    .C_HAS_SOFTECC_INPUT_REGS_A(0),
122    .C_HAS_SOFTECC_OUTPUT_REGS_B(0),
123    .C_INIT_FILE("BlankString"),
124    .C_INIT_FILE_NAME("no_coe_file_loaded"),
125    .C_INITA_VAL("0"),
126    .C_INITB_VAL("0"),
127    .C_INTERFACE_TYPE(0),
128    .C_LOAD_INIT_FILE(0),
129    .C_MEM_TYPE(2),
130    .C_MUX_PIPELINE_STAGES(0),
131    .C_PRIM_TYPE(1),
132    .C_READ_DEPTH_A(64),
133    .C_READ_DEPTH_B(64),
134    .C_READ_WIDTH_A(8),
135    .C_READ_WIDTH_B(8),
136    .C_RST_PRIORITY_A("CE"),
137    .C_RST_PRIORITY_B("CE"),
138    .C_RST_TYPE("SYNC"),
139    .C_RSTRAM_A(0),
140    .C_RSTRAM_B(0),
141    .C_SIM_COLLISION_CHECK("ALL"),
142    .C_USE_BRAM_BLOCK(0),
143    .C_USE_BYTE_WEA(0),
144    .C_USE_BYTE_WEB(0),
145    .C_USE_DEFAULT_DATA(0),
146    .C_USE_ECC(0),
147    .C_USE_SOFTECC(0),
148    .C_WEA_WIDTH(1),
149    .C_WEB_WIDTH(1),
150    .C_WRITE_DEPTH_A(512),
151    .C_WRITE_DEPTH_B(512),
152    .C_WRITE_MODE_A("WRITE_FIRST"),
153    .C_WRITE_MODE_B("WRITE_FIRST"),
154    .C_WRITE_WIDTH_A(1),
155    .C_WRITE_WIDTH_B(1),
156    .C_XDEVICEFAMILY("virtex6")
157  )
158  inst (
159    .CLKA(clka),
160    .WEA(wea),
161    .ADDRA(addra),
162    .DINA(dina),
163    .DOUTA(douta),
164    .CLKB(clkb),
165    .WEB(web),
166    .ADDRB(addrb),
167    .DINB(dinb),
168    .DOUTB(doutb),
169    .RSTA(),
170    .ENA(),
171    .REGCEA(),
172    .RSTB(),
173    .ENB(),
174    .REGCEB(),
175    .INJECTSBITERR(),
176    .INJECTDBITERR(),
177    .SBITERR(),
178    .DBITERR(),
179    .RDADDRECC(),
180    .S_ACLK(),
181    .S_ARESETN(),
182    .S_AXI_AWID(),
183    .S_AXI_AWADDR(),
184    .S_AXI_AWLEN(),
185    .S_AXI_AWSIZE(),
186    .S_AXI_AWBURST(),
187    .S_AXI_AWVALID(),
188    .S_AXI_AWREADY(),
189    .S_AXI_WDATA(),
190    .S_AXI_WSTRB(),
191    .S_AXI_WLAST(),
192    .S_AXI_WVALID(),
193    .S_AXI_WREADY(),
194    .S_AXI_BID(),
195    .S_AXI_BRESP(),
196    .S_AXI_BVALID(),
197    .S_AXI_BREADY(),
198    .S_AXI_ARID(),
199    .S_AXI_ARADDR(),
200    .S_AXI_ARLEN(),
201    .S_AXI_ARSIZE(),
202    .S_AXI_ARBURST(),
203    .S_AXI_ARVALID(),
204    .S_AXI_ARREADY(),
205    .S_AXI_RID(),
206    .S_AXI_RDATA(),
207    .S_AXI_RRESP(),
208    .S_AXI_RLAST(),
209    .S_AXI_RVALID(),
210    .S_AXI_RREADY(),
211    .S_AXI_INJECTSBITERR(),
212    .S_AXI_INJECTDBITERR(),
213    .S_AXI_SBITERR(),
214    .S_AXI_DBITERR(),
215    .S_AXI_RDADDRECC()
216  );
217
218// synthesis translate_on
219endmodule
220
Note: See TracBrowser for help on using the repository browser.