mirror of https://github.com/openXC7/prjxray.git
commit
e94eebe10e
|
|
@ -44,4 +44,6 @@ build/roi_bram18_width.diff:
|
||||||
build/roi_bram18_write_mode.diff:
|
build/roi_bram18_write_mode.diff:
|
||||||
$(MAKE) -f diff.mk OUT_DIFF=build/roi_bram18_write_mode.diff PRJL=roi_bram18_write_mode_a PRJR=roi_bram18_write_mode_b
|
$(MAKE) -f diff.mk OUT_DIFF=build/roi_bram18_write_mode.diff PRJL=roi_bram18_write_mode_a PRJR=roi_bram18_write_mode_b
|
||||||
|
|
||||||
|
build/roi_bram18_ram_mode.diff:
|
||||||
|
$(MAKE) -f diff.mk OUT_DIFF=build/roi_bram18_ram_mode.diff PRJL=roi_bram18_ram_mode_tdp PRJR=roi_bram18_ram_mode_sdp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,5 +25,7 @@ route_design
|
||||||
write_checkpoint -force design.dcp
|
write_checkpoint -force design.dcp
|
||||||
|
|
||||||
# set_property BITSTREAM.GENERAL.DEBUGBITSTREAM Yes [current_design]
|
# set_property BITSTREAM.GENERAL.DEBUGBITSTREAM Yes [current_design]
|
||||||
|
# BRAM SDP WEA check, to make test slightly easier to write
|
||||||
|
set_property IS_ENABLED 0 [get_drc_checks {REQP-1931}]
|
||||||
write_bitstream -force design.bit
|
write_bitstream -force design.bit
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -266,7 +266,7 @@ module roi_hck(input clk, input [255:0] din, output [255:0] dout);
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Misc ROI
|
READ_WIDTH
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
module roi_bram18_width_a(input clk, input [255:0] din, output [255:0] dout);
|
module roi_bram18_width_a(input clk, input [255:0] din, output [255:0] dout);
|
||||||
|
|
@ -281,6 +281,9 @@ module roi_bram18_width_b(input clk, input [255:0] din, output [255:0] dout);
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
WRITE_MODE
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
module roi_bram18_write_mode_a(input clk, input [255:0] din, output [255:0] dout);
|
module roi_bram18_write_mode_a(input clk, input [255:0] din, output [255:0] dout);
|
||||||
ram_RAMB18E1 #(.LOC("RAMB18_X0Y40"), .WRITE_MODE_A("WRITE_FIRST"))
|
ram_RAMB18E1 #(.LOC("RAMB18_X0Y40"), .WRITE_MODE_A("WRITE_FIRST"))
|
||||||
|
|
@ -293,6 +296,29 @@ module roi_bram18_write_mode_b(input clk, input [255:0] din, output [255:0] dout
|
||||||
r0(.clk(clk), .din(din[ 0 +: 8]), .dout(dout[ 0 +: 8]));
|
r0(.clk(clk), .din(din[ 0 +: 8]), .dout(dout[ 0 +: 8]));
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
RAM_MODE
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
module roi_bram18_ram_mode_tdp(input clk, input [255:0] din, output [255:0] dout);
|
||||||
|
ram_RAMB18E1 #(.LOC("RAMB18_X0Y40"), .RAM_MODE("TDP"))
|
||||||
|
r0(.clk(clk), .din(din[ 0 +: 8]), .dout(dout[ 0 +: 8]));
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
/*
|
||||||
|
ERROR: [DRC REQP-1931] RAMB18E1_WEA_NO_CONNECT_OR_TIED_GND:
|
||||||
|
roi/r0/ram programming per UG473 requires that for SDP mode the WEA bus must be unconnected
|
||||||
|
or tied to GND.
|
||||||
|
|
||||||
|
Are these routing bits are real bits we need to look at?
|
||||||
|
> bit_0002031b_002_00
|
||||||
|
> bit_0002031b_002_04
|
||||||
|
*/
|
||||||
|
module roi_bram18_ram_mode_sdp(input clk, input [255:0] din, output [255:0] dout);
|
||||||
|
ram_RAMB18E1 #(.LOC("RAMB18_X0Y40"), .RAM_MODE("SDP"))
|
||||||
|
r0(.clk(clk), .din(din[ 0 +: 8]), .dout(dout[ 0 +: 8]));
|
||||||
|
endmodule
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Library
|
Library
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
|
||||||
|
|
@ -29,3 +29,27 @@ def load_bitdata(f):
|
||||||
bitdata[frame][1].add(wordidx * WORD_SIZE_BITS + bitidx)
|
bitdata[frame][1].add(wordidx * WORD_SIZE_BITS + bitidx)
|
||||||
|
|
||||||
return bitdata
|
return bitdata
|
||||||
|
|
||||||
|
|
||||||
|
# used by segprint
|
||||||
|
# TODO: merge these
|
||||||
|
def load_bitdata2(f):
|
||||||
|
# these are not compatible
|
||||||
|
# return bitstream.load_bitdata(open(bits_file, "r"))
|
||||||
|
|
||||||
|
bitdata = dict()
|
||||||
|
|
||||||
|
for line in f:
|
||||||
|
line = line.split("_")
|
||||||
|
frame = int(line[1], 16)
|
||||||
|
wordidx = int(line[2], 10)
|
||||||
|
bitidx = int(line[3], 10)
|
||||||
|
|
||||||
|
if frame not in bitdata:
|
||||||
|
bitdata[frame] = dict()
|
||||||
|
|
||||||
|
if wordidx not in bitdata[frame]:
|
||||||
|
bitdata[frame][wordidx] = set()
|
||||||
|
|
||||||
|
bitdata[frame][wordidx].add(bitidx)
|
||||||
|
return bitdata
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ This output is intended for debugging and not directly related to FASM
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import sys, os, json, re
|
import sys, os, json, re
|
||||||
|
from prjxray import bitstream
|
||||||
|
|
||||||
|
|
||||||
class NoDB(Exception):
|
class NoDB(Exception):
|
||||||
|
|
@ -178,26 +179,6 @@ def handle_segment(
|
||||||
print("tag %s" % tag)
|
print("tag %s" % tag)
|
||||||
|
|
||||||
|
|
||||||
def load_bitdata(bits_file):
|
|
||||||
bitdata = dict()
|
|
||||||
|
|
||||||
with open(bits_file, "r") as f:
|
|
||||||
for line in f:
|
|
||||||
line = line.split("_")
|
|
||||||
frame = int(line[1], 16)
|
|
||||||
wordidx = int(line[2], 10)
|
|
||||||
bitidx = int(line[3], 10)
|
|
||||||
|
|
||||||
if frame not in bitdata:
|
|
||||||
bitdata[frame] = dict()
|
|
||||||
|
|
||||||
if wordidx not in bitdata[frame]:
|
|
||||||
bitdata[frame][wordidx] = set()
|
|
||||||
|
|
||||||
bitdata[frame][wordidx].add(bitidx)
|
|
||||||
return bitdata
|
|
||||||
|
|
||||||
|
|
||||||
def mk_grid():
|
def mk_grid():
|
||||||
'''Load tilegrid, flattening all blocks into one dictionary'''
|
'''Load tilegrid, flattening all blocks into one dictionary'''
|
||||||
|
|
||||||
|
|
@ -254,7 +235,7 @@ def run(
|
||||||
verbose=False):
|
verbose=False):
|
||||||
grid = mk_grid()
|
grid = mk_grid()
|
||||||
|
|
||||||
bitdata = load_bitdata(bits_file)
|
bitdata = bitstream.load_bitdata2(open(bits_file, "r"))
|
||||||
|
|
||||||
if flag_unknown_bits:
|
if flag_unknown_bits:
|
||||||
print_unknown_bits(grid, bitdata)
|
print_unknown_bits(grid, bitdata)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue