mirror of https://github.com/openXC7/prjxray.git
roi_harness: basys3 support, separate top.v into harness and ROI .v files
Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
parent
d587030ea5
commit
a39e1bca78
|
|
@ -1 +1,3 @@
|
||||||
export XRAY_PART=xc7a35tcsg324-1
|
export XRAY_PART=xc7a35tcsg324-1
|
||||||
|
export XRAY_PINCFG=ARTY_A7_SWBUT
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
# XC7A35T-1CPG236C
|
||||||
|
export XRAY_PART=xc7a35tcpg236-1
|
||||||
|
export XRAY_PINCFG=BASYS3_SWBUT
|
||||||
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
`ifndef DIN_N
|
||||||
|
`define DIN_N 8
|
||||||
|
`endif
|
||||||
|
|
||||||
|
`ifndef DOUT_N
|
||||||
|
`define DOUT_N 8
|
||||||
|
`endif
|
||||||
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
//See README and tcl for more info
|
||||||
|
|
||||||
|
`include "defines.v"
|
||||||
|
|
||||||
|
module roi(input clk,
|
||||||
|
input [DIN_N-1:0] din, output [DOUT_N-1:0] dout);
|
||||||
|
parameter DIN_N = `DIN_N;
|
||||||
|
parameter DOUT_N = `DOUT_N;
|
||||||
|
|
||||||
|
genvar i;
|
||||||
|
generate
|
||||||
|
//CLK
|
||||||
|
(* KEEP, DONT_TOUCH *)
|
||||||
|
reg clk_reg;
|
||||||
|
always @(posedge clk) begin
|
||||||
|
clk_reg <= clk_reg;
|
||||||
|
end
|
||||||
|
|
||||||
|
//DIN
|
||||||
|
for (i = 0; i < DIN_N; i = i+1) begin:ins
|
||||||
|
(* KEEP, DONT_TOUCH *)
|
||||||
|
LUT6 #(
|
||||||
|
.INIT(64'b01)
|
||||||
|
) lut (
|
||||||
|
.I0(din[i]),
|
||||||
|
.I1(1'b0),
|
||||||
|
.I2(1'b0),
|
||||||
|
.I3(1'b0),
|
||||||
|
.I4(1'b0),
|
||||||
|
.I5(1'b0),
|
||||||
|
.O());
|
||||||
|
end
|
||||||
|
|
||||||
|
//DOUT
|
||||||
|
for (i = 0; i < DOUT_N; i = i+1) begin:outs
|
||||||
|
(* KEEP, DONT_TOUCH *)
|
||||||
|
LUT6 #(
|
||||||
|
.INIT(64'b01)
|
||||||
|
) lut (
|
||||||
|
.I0(1'b0),
|
||||||
|
.I1(1'b0),
|
||||||
|
.I2(1'b0),
|
||||||
|
.I3(1'b0),
|
||||||
|
.I4(1'b0),
|
||||||
|
.I5(1'b0),
|
||||||
|
.O(dout[i]));
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
endmodule
|
||||||
|
|
@ -43,6 +43,7 @@ source ../../utils/utils.tcl
|
||||||
|
|
||||||
create_project -force -part $::env(XRAY_PART) design design
|
create_project -force -part $::env(XRAY_PART) design design
|
||||||
read_verilog top.v
|
read_verilog top.v
|
||||||
|
read_verilog roi_base.v
|
||||||
# added flatten_hierarchy
|
# added flatten_hierarchy
|
||||||
# dout_shr was getting folded into the pblock
|
# dout_shr was getting folded into the pblock
|
||||||
# synth_design -top top -flatten_hierarchy none -no_lc -keep_equivalent_registers -resource_sharing off
|
# synth_design -top top -flatten_hierarchy none -no_lc -keep_equivalent_registers -resource_sharing off
|
||||||
|
|
@ -53,6 +54,10 @@ array set net2pin [list]
|
||||||
|
|
||||||
# Create pin assignments based on what we are targetting
|
# Create pin assignments based on what we are targetting
|
||||||
set part "$::env(XRAY_PART)"
|
set part "$::env(XRAY_PART)"
|
||||||
|
set pincfg ""
|
||||||
|
if { [info exists ::env(XRAY_PINCFG) ] } {
|
||||||
|
set pincfg "$::env(XRAY_PINCFG)"
|
||||||
|
}
|
||||||
# A50T I/O Bank 16 sequential layout
|
# A50T I/O Bank 16 sequential layout
|
||||||
if {$part eq "xc7a50tfgg484-1"} {
|
if {$part eq "xc7a50tfgg484-1"} {
|
||||||
# Partial list, expand as needed
|
# Partial list, expand as needed
|
||||||
|
|
@ -79,52 +84,83 @@ if {$part eq "xc7a50tfgg484-1"} {
|
||||||
}
|
}
|
||||||
# Arty A7 switch, button, and LED
|
# Arty A7 switch, button, and LED
|
||||||
} elseif {$part eq "xc7a35tcsg324-1"} {
|
} elseif {$part eq "xc7a35tcsg324-1"} {
|
||||||
# https://reference.digilentinc.com/reference/programmable-logic/arty/reference-manual?redirect=1
|
if {$pincfg eq "ARTY_A7_SWBUT"} {
|
||||||
# 4 switches then 4 buttons
|
# https://reference.digilentinc.com/reference/programmable-logic/arty/reference-manual?redirect=1
|
||||||
set sw_but "A8 C11 C10 A10 D9 C9 B9 B8"
|
# 4 switches then 4 buttons
|
||||||
# 4 LEDs then 4 RGB LEDs (green only)
|
set sw_but "A8 C11 C10 A10 D9 C9 B9 B8"
|
||||||
set leds "H5 J5 T9 T10 F6 J4 J2 H6"
|
# 4 LEDs then 4 RGB LEDs (green only)
|
||||||
|
set leds "H5 J5 T9 T10 F6 J4 J2 H6"
|
||||||
|
|
||||||
# 100 MHz CLK onboard
|
# 100 MHz CLK onboard
|
||||||
set pin "E3"
|
set pin "E3"
|
||||||
set net2pin(clk) $pin
|
set net2pin(clk) $pin
|
||||||
|
|
||||||
# DIN
|
# DIN
|
||||||
for {set i 0} {$i < $DIN_N} {incr i} {
|
for {set i 0} {$i < $DIN_N} {incr i} {
|
||||||
set pin [lindex $sw_but $i]
|
set pin [lindex $sw_but $i]
|
||||||
set net2pin(din[$i]) $pin
|
set net2pin(din[$i]) $pin
|
||||||
|
}
|
||||||
|
|
||||||
|
# DOUT
|
||||||
|
for {set i 0} {$i < $DOUT_N} {incr i} {
|
||||||
|
set pin [lindex $leds $i]
|
||||||
|
set net2pin(dout[$i]) $pin
|
||||||
|
}
|
||||||
|
# Arty A7 pmod
|
||||||
|
# Disabled per above
|
||||||
|
} elseif {$pincfg eq "ARTY_A7_PMOD"} {
|
||||||
|
# https://reference.digilentinc.com/reference/programmable-logic/arty/reference-manual?redirect=1
|
||||||
|
set pmod_ja "G13 B11 A11 D12 D13 B18 A18 K16"
|
||||||
|
set pmod_jb "E15 E16 D15 C15 J17 J18 K15 J15"
|
||||||
|
set pmod_jc "U12 V12 V10 V11 U14 V14 T13 U13"
|
||||||
|
|
||||||
|
# CLK on Pmod JA
|
||||||
|
set pin [lindex $pmod_ja 0]
|
||||||
|
set net2pin(clk) $pin
|
||||||
|
|
||||||
|
# DIN on Pmod JB
|
||||||
|
for {set i 0} {$i < $DIN_N} {incr i} {
|
||||||
|
set pin [lindex $pmod_jb $i]
|
||||||
|
set net2pin(din[$i]) $pin
|
||||||
|
}
|
||||||
|
|
||||||
|
# DOUT on Pmod JC
|
||||||
|
for {set i 0} {$i < $DOUT_N} {incr i} {
|
||||||
|
set pin [lindex $pmod_jc $i]
|
||||||
|
set net2pin(dout[$i]) $pin
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
error "Unsupported config $pincfg"
|
||||||
}
|
}
|
||||||
|
# Arty A7 switch, button, and LED
|
||||||
|
} elseif {$part eq "xc7a35tcpg236-1"} {
|
||||||
|
if {$pincfg eq "BASYS3_SWBUT"} {
|
||||||
|
# https://raw.githubusercontent.com/Digilent/digilent-xdc/master/Basys-3-Master.xdc
|
||||||
|
|
||||||
# DOUT
|
# Slide switches
|
||||||
for {set i 0} {$i < $DOUT_N} {incr i} {
|
set sws "V17 V16 W16 W17 W15 V15 W14 W13 V2 T3 T2 R3 W2 U1 T1 R2"
|
||||||
set pin [lindex $leds $i]
|
set leds "U16 E19 U19 V19 W18 U15 U14 V14 V13 V3 W3 U3 P3 N3 P1 L1"
|
||||||
set net2pin(dout[$i]) $pin
|
|
||||||
}
|
|
||||||
# Arty A7 pmod
|
|
||||||
# Disabled per above
|
|
||||||
} elseif {$part eq "xc7a35tcsg324-1"} {
|
|
||||||
# https://reference.digilentinc.com/reference/programmable-logic/arty/reference-manual?redirect=1
|
|
||||||
set pmod_ja "G13 B11 A11 D12 D13 B18 A18 K16"
|
|
||||||
set pmod_jb "E15 E16 D15 C15 J17 J18 K15 J15"
|
|
||||||
set pmod_jc "U12 V12 V10 V11 U14 V14 T13 U13"
|
|
||||||
|
|
||||||
# CLK on Pmod JA
|
# 100 MHz CLK onboard
|
||||||
set pin [lindex $pmod_ja 0]
|
set pin "W5"
|
||||||
set net2pin(clk) $pin
|
set net2pin(clk) $pin
|
||||||
|
|
||||||
# DIN on Pmod JB
|
# DIN
|
||||||
for {set i 0} {$i < $DIN_N} {incr i} {
|
for {set i 0} {$i < $DIN_N} {incr i} {
|
||||||
set pin [lindex $pmod_jb $i]
|
set pin [lindex $sws $i]
|
||||||
set net2pin(din[$i]) $pin
|
set net2pin(din[$i]) $pin
|
||||||
}
|
}
|
||||||
|
|
||||||
# DOUT on Pmod JC
|
# DOUT
|
||||||
for {set i 0} {$i < $DOUT_N} {incr i} {
|
for {set i 0} {$i < $DOUT_N} {incr i} {
|
||||||
set pin [lindex $pmod_jc $i]
|
set pin [lindex $leds $i]
|
||||||
set net2pin(dout[$i]) $pin
|
set net2pin(dout[$i]) $pin
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
error "Unsupported config $pincfg"
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
error "Unsupported part $part"
|
error "Pins: unsupported part $part"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Now actually apply the pin definitions
|
# Now actually apply the pin definitions
|
||||||
|
|
@ -338,8 +374,11 @@ if {1} {
|
||||||
} elseif {$part eq "xc7a35tcsg324-1"} {
|
} elseif {$part eq "xc7a35tcsg324-1"} {
|
||||||
set node "INT_L_X10Y${y}/SW6BEG0"
|
set node "INT_L_X10Y${y}/SW6BEG0"
|
||||||
route_via2 "roi/dout[$i]" "$node"
|
route_via2 "roi/dout[$i]" "$node"
|
||||||
|
} elseif {$part eq "xc7a35tcpg236-1"} {
|
||||||
|
set node "INT_L_X10Y${y}/SW6BEG0"
|
||||||
|
route_via2 "roi/dout[$i]" "$node"
|
||||||
} else {
|
} else {
|
||||||
error "Unsupported part $part"
|
error "Routing: unsupported part $part"
|
||||||
}
|
}
|
||||||
# XXX: only care about right ports on Arty
|
# XXX: only care about right ports on Arty
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -358,5 +397,6 @@ puts "routing design"
|
||||||
route_design
|
route_design
|
||||||
|
|
||||||
write_checkpoint -force design.dcp
|
write_checkpoint -force design.dcp
|
||||||
|
set_property BITSTREAM.GENERAL.DEBUGBITSTREAM YES [current_design]
|
||||||
write_bitstream -force design.bit
|
write_bitstream -force design.bit
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,6 @@
|
||||||
//See README and tcl for more info
|
//See README and tcl for more info
|
||||||
|
|
||||||
`ifndef DIN_N
|
`include "defines.v"
|
||||||
`define DIN_N 4
|
|
||||||
`endif
|
|
||||||
|
|
||||||
`ifndef DOUT_N
|
|
||||||
`define DOUT_N 4
|
|
||||||
`endif
|
|
||||||
|
|
||||||
module top(input wire clk,
|
module top(input wire clk,
|
||||||
input [DIN_N-1:0] din, output [DOUT_N-1:0] dout);
|
input [DIN_N-1:0] din, output [DOUT_N-1:0] dout);
|
||||||
|
|
@ -18,48 +12,3 @@ module top(input wire clk,
|
||||||
.din(din), .dout(dout));
|
.din(din), .dout(dout));
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module roi(input clk,
|
|
||||||
input [DIN_N-1:0] din, output [DOUT_N-1:0] dout);
|
|
||||||
parameter DIN_N = 4;
|
|
||||||
parameter DOUT_N = 4;
|
|
||||||
|
|
||||||
genvar i;
|
|
||||||
generate
|
|
||||||
//CLK
|
|
||||||
(* KEEP, DONT_TOUCH *)
|
|
||||||
reg clk_reg;
|
|
||||||
always @(posedge clk) begin
|
|
||||||
clk_reg <= clk_reg;
|
|
||||||
end
|
|
||||||
|
|
||||||
//DIN
|
|
||||||
for (i = 0; i < DIN_N; i = i+1) begin:ins
|
|
||||||
(* KEEP, DONT_TOUCH *)
|
|
||||||
LUT6 #(
|
|
||||||
.INIT(64'b01)
|
|
||||||
) lut (
|
|
||||||
.I0(din[i]),
|
|
||||||
.I1(1'b0),
|
|
||||||
.I2(1'b0),
|
|
||||||
.I3(1'b0),
|
|
||||||
.I4(1'b0),
|
|
||||||
.I5(1'b0),
|
|
||||||
.O());
|
|
||||||
end
|
|
||||||
|
|
||||||
//DOUT
|
|
||||||
for (i = 0; i < DOUT_N; i = i+1) begin:outs
|
|
||||||
(* KEEP, DONT_TOUCH *)
|
|
||||||
LUT6 #(
|
|
||||||
.INIT(64'b01)
|
|
||||||
) lut (
|
|
||||||
.I0(1'b0),
|
|
||||||
.I1(1'b0),
|
|
||||||
.I2(1'b0),
|
|
||||||
.I3(1'b0),
|
|
||||||
.I4(1'b0),
|
|
||||||
.I5(1'b0),
|
|
||||||
.O(dout[i]));
|
|
||||||
end
|
|
||||||
endgenerate
|
|
||||||
endmodule
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue