source: ReferenceDesigns/w3_802.11/sysgen/wlan_phy_rx_pmd/blackboxes/deinterleaver_ram.v

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

Redesigned Rx de-interleaver, again. Previous architecture was too slow for worst-case packet lengths with HTMF MCS7 waveforms. New design uses parallel demod (all bits per subcarrier in 1 cycle) writing to DP RAM, reading 2 LLRs per cycle into decoder.

Also increased range of soft demod values to Fix9_7 to avoid skewing confidence values for outermost points in 64QAM.

File size: 5.1 KB
Line 
1module deinterleaver_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
15// VHDL wrapper uses std_logic for these signals
16input clk;
17input ce;
18
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
24input  [31:0] dina;
25input  [0:0] wea;
26input  [8:0] addra;
27output [3:0] douta;
28
29input  [31:0] dinb;
30input  [0:0] web;
31input  [8:0] addrb;
32output [3:0] doutb;
33
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;
38assign clka = clk;
39assign clkb = clk;
40
41// dp_ram_wr_32b_rd_4b_2048b 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//   Common clock (clka=clkb)
45//   Write width A/B = 32 bits
46//   Write depth = 64 (2048 bits total)
47//   Read width A/B = 4 bits
48//   Read depth = 512 (2048 / 4)
49//   Always enbaled (no ena/enb ports)
50
51(* box_type = "black_box" *)
52dp_ram_wr_32b_rd_4b_2048b ram_inst (
53  .clka(clka), 
54  .wea(wea), 
55  .addra(addra),
56  .dina(dina),
57  .douta(douta),
58  .clkb(clkb),
59  .web(web),
60  .addrb(addrb),
61  .dinb(dinb),
62  .doutb(doutb)
63);
64
65endmodule
66
67//Define module for RAM blackbox - ngdbuild will substitute dp_ram_wr_32b_rd_4b_2048b.ngc during implementation
68// Code inside translate_off/translate_on only used for simulation
69// Implementation will use NGC netlist for RAM block
70module dp_ram_wr_32b_rd_4b_2048b(
71  clka,
72  wea,
73  addra,
74  dina,
75  douta,
76  clkb,
77  web,
78  addrb,
79  dinb,
80  doutb
81);
82
83input clka;
84input [0 : 0] wea;
85input [8 : 0] addra;
86input [31 : 0] dina;
87output [3 : 0] douta;
88input clkb;
89input [0 : 0] web;
90input [8 : 0] addrb;
91input [31 : 0] dinb;
92output [3 : 0] doutb;
93
94// synthesis translate_off
95
96  BLK_MEM_GEN_V7_3 #(
97    .C_ADDRA_WIDTH(9),
98    .C_ADDRB_WIDTH(9),
99    .C_ALGORITHM(1),
100    .C_AXI_ID_WIDTH(4),
101    .C_AXI_SLAVE_TYPE(0),
102    .C_AXI_TYPE(1),
103    .C_BYTE_SIZE(9),
104    .C_COMMON_CLK(1),
105    .C_DEFAULT_DATA("0"),
106    .C_DISABLE_WARN_BHV_COLL(0),
107    .C_DISABLE_WARN_BHV_RANGE(0),
108    .C_ENABLE_32BIT_ADDRESS(0),
109    .C_FAMILY("virtex6"),
110    .C_HAS_AXI_ID(0),
111    .C_HAS_ENA(0),
112    .C_HAS_ENB(0),
113    .C_HAS_INJECTERR(0),
114    .C_HAS_MEM_OUTPUT_REGS_A(0),
115    .C_HAS_MEM_OUTPUT_REGS_B(0),
116    .C_HAS_MUX_OUTPUT_REGS_A(0),
117    .C_HAS_MUX_OUTPUT_REGS_B(0),
118    .C_HAS_REGCEA(0),
119    .C_HAS_REGCEB(0),
120    .C_HAS_RSTA(0),
121    .C_HAS_RSTB(0),
122    .C_HAS_SOFTECC_INPUT_REGS_A(0),
123    .C_HAS_SOFTECC_OUTPUT_REGS_B(0),
124    .C_INIT_FILE("BlankString"),
125    .C_INIT_FILE_NAME("no_coe_file_loaded"),
126    .C_INITA_VAL("0"),
127    .C_INITB_VAL("0"),
128    .C_INTERFACE_TYPE(0),
129    .C_LOAD_INIT_FILE(0),
130    .C_MEM_TYPE(2),
131    .C_MUX_PIPELINE_STAGES(0),
132    .C_PRIM_TYPE(1),
133    .C_READ_DEPTH_A(512),
134    .C_READ_DEPTH_B(512),
135    .C_READ_WIDTH_A(4),
136    .C_READ_WIDTH_B(4),
137    .C_RST_PRIORITY_A("CE"),
138    .C_RST_PRIORITY_B("CE"),
139    .C_RST_TYPE("SYNC"),
140    .C_RSTRAM_A(0),
141    .C_RSTRAM_B(0),
142    .C_SIM_COLLISION_CHECK("ALL"),
143    .C_USE_BRAM_BLOCK(0),
144    .C_USE_BYTE_WEA(0),
145    .C_USE_BYTE_WEB(0),
146    .C_USE_DEFAULT_DATA(0),
147    .C_USE_ECC(0),
148    .C_USE_SOFTECC(0),
149    .C_WEA_WIDTH(1),
150    .C_WEB_WIDTH(1),
151    .C_WRITE_DEPTH_A(64),
152    .C_WRITE_DEPTH_B(64),
153    .C_WRITE_MODE_A("WRITE_FIRST"),
154    .C_WRITE_MODE_B("WRITE_FIRST"),
155    .C_WRITE_WIDTH_A(32),
156    .C_WRITE_WIDTH_B(32),
157    .C_XDEVICEFAMILY("virtex6")
158  )
159  inst (
160    .CLKA(clka),
161    .WEA(wea),
162    .ADDRA(addra),
163    .DINA(dina),
164    .DOUTA(douta),
165    .CLKB(clkb),
166    .WEB(web),
167    .ADDRB(addrb),
168    .DINB(dinb),
169    .DOUTB(doutb),
170    .RSTA(),
171    .ENA(),
172    .REGCEA(),
173    .RSTB(),
174    .ENB(),
175    .REGCEB(),
176    .INJECTSBITERR(),
177    .INJECTDBITERR(),
178    .SBITERR(),
179    .DBITERR(),
180    .RDADDRECC(),
181    .S_ACLK(),
182    .S_ARESETN(),
183    .S_AXI_AWID(),
184    .S_AXI_AWADDR(),
185    .S_AXI_AWLEN(),
186    .S_AXI_AWSIZE(),
187    .S_AXI_AWBURST(),
188    .S_AXI_AWVALID(),
189    .S_AXI_AWREADY(),
190    .S_AXI_WDATA(),
191    .S_AXI_WSTRB(),
192    .S_AXI_WLAST(),
193    .S_AXI_WVALID(),
194    .S_AXI_WREADY(),
195    .S_AXI_BID(),
196    .S_AXI_BRESP(),
197    .S_AXI_BVALID(),
198    .S_AXI_BREADY(),
199    .S_AXI_ARID(),
200    .S_AXI_ARADDR(),
201    .S_AXI_ARLEN(),
202    .S_AXI_ARSIZE(),
203    .S_AXI_ARBURST(),
204    .S_AXI_ARVALID(),
205    .S_AXI_ARREADY(),
206    .S_AXI_RID(),
207    .S_AXI_RDATA(),
208    .S_AXI_RRESP(),
209    .S_AXI_RLAST(),
210    .S_AXI_RVALID(),
211    .S_AXI_RREADY(),
212    .S_AXI_INJECTSBITERR(),
213    .S_AXI_INJECTDBITERR(),
214    .S_AXI_SBITERR(),
215    .S_AXI_DBITERR(),
216    .S_AXI_RDADDRECC()
217  );
218
219// synthesis translate_on
220
221endmodule
Note: See TracBrowser for help on using the repository browser.