From 35e62f6a84da31c86ce10376b791a2286e4cd1e1 Mon Sep 17 00:00:00 2001 From: David Papp Date: Mon, 23 Oct 2017 19:17:22 -0400 Subject: [PATCH 01/50] Create work_plan.txt --- work_plan.txt | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 work_plan.txt diff --git a/work_plan.txt b/work_plan.txt new file mode 100644 index 0000000..e73ea9e --- /dev/null +++ b/work_plan.txt @@ -0,0 +1,36 @@ +Work Plan Lab 2 + +Jonah Spear and David Papp + +Input Conditioning: do 10/24 +Implementation: 1 hours +Test Bench: 2 hours +Composing deliverables: 0.5 hours + + +Shift Register: do 10/24 +Implementation: 1 hours +Test bench: 2 hours +Composing deliverables: 0.25 hours + + +Midpoint check in due 10/25: +Implementation: 1 hour +Deliverables: 1 hour + + +SPI Memory do 10/29 +Implementation: 1 hour +Testing: 1.5 hours + + +Inconveniences/debugging do 10/29 +2 hours + + +Lab write up do 10/29 +1 hour + + +Total: +14.5 Hours From 9d471eed9ac05103290d49ec15c7c414f4e5a7f1 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Tue, 24 Oct 2017 15:35:32 -0400 Subject: [PATCH 02/50] Added gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f47cb20 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.out From 997f47c2648c93b2fab44ac7ca57ae1c343a8cd7 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Tue, 24 Oct 2017 16:13:42 -0400 Subject: [PATCH 03/50] add positive edge and negative edge detection --- inputconditioner.v | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/inputconditioner.v b/inputconditioner.v index 736a866..aca8dff 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -16,23 +16,44 @@ output reg negativeedge // 1 clk pulse at falling edge of conditioned parameter counterwidth = 3; // Counter size, in bits, >= log2(waittime) parameter waittime = 3; // Debounce delay, in clock cycles - + reg[counterwidth-1:0] counter = 0; + reg prevconditioned = 0; reg synchronizer0 = 0; reg synchronizer1 = 0; - + + //0 0 0 0 1 0 1 1 1 1 always @(posedge clk ) begin + // Case 1: previous signal is same as current output if(conditioned == synchronizer1) counter <= 0; else begin + // Case 2: Counter reaches maximum limit if( counter == waittime) begin counter <= 0; conditioned <= synchronizer1; end - else + // Case 3: Counter has not reached max limit + else counter <= counter+1; end synchronizer0 <= noisysignal; synchronizer1 <= synchronizer0; + + prevconditioned <= conditioned; + // Set positive edge output + if(conditioned == 1 & prevconditioned == 0) begin + positiveedge <= 1; + end + else begin + positiveedge <= 0; + end + + if(conditioned == 0 & prevconditioned == 1) begin + negativeedge <= 1; + end + else begin + negativeedge <= 0; + end end endmodule From a46155e2bc50faf827f3a3f82a5343c47feedee5 Mon Sep 17 00:00:00 2001 From: dpapp Date: Tue, 24 Oct 2017 16:25:17 -0400 Subject: [PATCH 04/50] idk --- inputconditioner.t.v | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/inputconditioner.t.v b/inputconditioner.t.v index 2814163..565bd55 100644 --- a/inputconditioner.t.v +++ b/inputconditioner.t.v @@ -1,6 +1,7 @@ //------------------------------------------------------------------------ // Input Conditioner test bench //------------------------------------------------------------------------ +`include "inputconditioner.v" module testConditioner(); @@ -14,7 +15,7 @@ module testConditioner(); .noisysignal(pin), .conditioned(conditioned), .positiveedge(rising), - .negativeedge(falling)) + .negativeedge(falling)); // Generate clock (50MHz) @@ -22,6 +23,20 @@ module testConditioner(); always #10 clk=!clk; // 50MHz Clock initial begin + $dumpfile("inputconditioner.vcd"); + $dumpvars; + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=1; #10 + pin=0; #10 + pin=1; #10 + pin=1; #10 + pin=1; + end + + $finish // Your Test Code // Be sure to test each of the three conditioner functions: // Synchronization, Debouncing, Edge Detection From 17aeae5ce9538371740ad9e0533440a376273a41 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Tue, 24 Oct 2017 16:26:33 -0400 Subject: [PATCH 05/50] Made stuff work --- inputconditioner.t.v | 11 +++--- inputconditioner.vcd | 92 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 inputconditioner.vcd diff --git a/inputconditioner.t.v b/inputconditioner.t.v index 565bd55..92f4d70 100644 --- a/inputconditioner.t.v +++ b/inputconditioner.t.v @@ -10,7 +10,7 @@ module testConditioner(); wire conditioned; wire rising; wire falling; - + inputconditioner dut(.clk(clk), .noisysignal(pin), .conditioned(conditioned), @@ -21,7 +21,7 @@ module testConditioner(); // Generate clock (50MHz) initial clk=0; always #10 clk=!clk; // 50MHz Clock - + initial begin $dumpfile("inputconditioner.vcd"); $dumpvars; @@ -33,12 +33,13 @@ module testConditioner(); pin=0; #10 pin=1; #10 pin=1; #10 - pin=1; + pin=1; #10 + $finish; end - $finish + // Your Test Code // Be sure to test each of the three conditioner functions: // Synchronization, Debouncing, Edge Detection - + endmodule diff --git a/inputconditioner.vcd b/inputconditioner.vcd new file mode 100644 index 0000000..457377a --- /dev/null +++ b/inputconditioner.vcd @@ -0,0 +1,92 @@ +$date + Tue Oct 24 16:26:27 2017 +$end +$version + Icarus Verilog +$end +$timescale + 1s +$end +$scope module testConditioner $end +$var wire 1 ! conditioned $end +$var wire 1 " falling $end +$var wire 1 # rising $end +$var reg 1 $ clk $end +$var reg 1 % pin $end +$scope module dut $end +$var wire 1 & clk $end +$var wire 1 ' noisysignal $end +$var reg 1 ( conditioned $end +$var reg 3 ) counter [2:0] $end +$var reg 1 * negativeedge $end +$var reg 1 + positiveedge $end +$var reg 1 , prevconditioned $end +$var reg 1 - synchronizer0 $end +$var reg 1 . synchronizer1 $end +$upscope $end +$upscope $end +$enddefinitions $end +#0 +$dumpvars +0. +0- +0, +x+ +x* +b0 ) +x( +0' +0& +0% +0$ +x# +x" +x! +$end +#10 +0* +0" +0+ +0# +x, +b1 ) +1$ +1& +#20 +0$ +0& +#30 +b10 ) +1$ +1& +#40 +1% +1' +0$ +0& +#50 +b11 ) +0% +0' +1$ +1& +#60 +1% +1' +0$ +0& +#70 +1- +0( +0! +b0 ) +1$ +1& +#80 +0$ +0& +#90 +0, +1. +1$ +1& From de4fdd360f16457151a3cf337b5118fadc3b228a Mon Sep 17 00:00:00 2001 From: dpapp Date: Tue, 24 Oct 2017 16:47:43 -0400 Subject: [PATCH 06/50] i --- inputconditioner.t.v | 23 ++++++- inputconditioner.v | 10 +-- inputconditioner.vcd | 155 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 182 insertions(+), 6 deletions(-) create mode 100644 inputconditioner.vcd diff --git a/inputconditioner.t.v b/inputconditioner.t.v index 565bd55..270dc83 100644 --- a/inputconditioner.t.v +++ b/inputconditioner.t.v @@ -33,10 +33,29 @@ module testConditioner(); pin=0; #10 pin=1; #10 pin=1; #10 - pin=1; + pin=1; #10 + pin=1; #10 + pin=1; #10 + pin=1; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + pin=0; #10 + $finish; end - $finish // Your Test Code // Be sure to test each of the three conditioner functions: // Synchronization, Debouncing, Edge Detection diff --git a/inputconditioner.v b/inputconditioner.v index 736a866..238e716 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -15,12 +15,14 @@ output reg negativeedge // 1 clk pulse at falling edge of conditioned ); parameter counterwidth = 3; // Counter size, in bits, >= log2(waittime) - parameter waittime = 3; // Debounce delay, in clock cycles + parameter waittime = 5; // Debounce delay, in clock cycles - reg[counterwidth-1:0] counter = 0; - reg synchronizer0 = 0; - reg synchronizer1 = 0; + reg[counterwidth-1:0] counter = 0; // 0 + reg synchronizer0 = 0; // 1 + reg synchronizer1 = 0; // 1 + // conditioned <= 0; + // 0 0 0 0 1 0 1 1 1 1 1 always @(posedge clk ) begin if(conditioned == synchronizer1) counter <= 0; diff --git a/inputconditioner.vcd b/inputconditioner.vcd new file mode 100644 index 0000000..2ca3ce1 --- /dev/null +++ b/inputconditioner.vcd @@ -0,0 +1,155 @@ +$date + Tue Oct 24 16:41:04 2017 +$end +$version + Icarus Verilog +$end +$timescale + 1s +$end +$scope module testConditioner $end +$var wire 1 ! conditioned $end +$var wire 1 " falling $end +$var wire 1 # rising $end +$var reg 1 $ clk $end +$var reg 1 % pin $end +$scope module dut $end +$var wire 1 & clk $end +$var wire 1 ' noisysignal $end +$var reg 1 ( conditioned $end +$var reg 3 ) counter [2:0] $end +$var reg 1 * negativeedge $end +$var reg 1 + positiveedge $end +$var reg 1 , synchronizer0 $end +$var reg 1 - synchronizer1 $end +$upscope $end +$upscope $end +$enddefinitions $end +#0 +$dumpvars +0- +0, +x+ +x* +b0 ) +x( +0' +0& +0% +0$ +x# +x" +x! +$end +#10 +b1 ) +1$ +1& +#20 +0$ +0& +#30 +b10 ) +1$ +1& +#40 +1% +1' +0$ +0& +#50 +b11 ) +0% +0' +1$ +1& +#60 +1% +1' +0$ +0& +#70 +1, +b100 ) +1$ +1& +#80 +0$ +0& +#90 +1- +b101 ) +1$ +1& +#100 +0$ +0& +#110 +1( +1! +b0 ) +1$ +1& +#120 +0% +0' +0$ +0& +#130 +0, +1$ +1& +#140 +0$ +0& +#150 +0- +1$ +1& +#160 +0$ +0& +#170 +b1 ) +1$ +1& +#180 +0$ +0& +#190 +b10 ) +1$ +1& +#200 +0$ +0& +#210 +b11 ) +1$ +1& +#220 +0$ +0& +#230 +b100 ) +1$ +1& +#240 +0$ +0& +#250 +b101 ) +1$ +1& +#260 +0$ +0& +#270 +0( +0! +b0 ) +1$ +1& +#280 +0$ +0& From 12636ca7becd2a78d8a8354261d94d6b45bfd863 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Tue, 24 Oct 2017 16:49:21 -0400 Subject: [PATCH 07/50] unmess up stuff --- inputconditioner.v | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/inputconditioner.v b/inputconditioner.v index 8a3ecb6..aca8dff 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -16,13 +16,13 @@ output reg negativeedge // 1 clk pulse at falling edge of conditioned parameter counterwidth = 3; // Counter size, in bits, >= log2(waittime) parameter waittime = 3; // Debounce delay, in clock cycles - - reg[counterwidth-1:0] counter = 0; // 0 - reg synchronizer0 = 0; // 1 - reg synchronizer1 = 0; // 1 - // conditioned <= 0; - - // 0 0 0 0 1 0 1 1 1 1 1 + + reg[counterwidth-1:0] counter = 0; + reg prevconditioned = 0; + reg synchronizer0 = 0; + reg synchronizer1 = 0; + + //0 0 0 0 1 0 1 1 1 1 always @(posedge clk ) begin // Case 1: previous signal is same as current output if(conditioned == synchronizer1) From 24667e811d602a27e998fd9471abdec3557e825f Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 25 Oct 2017 11:45:13 -0400 Subject: [PATCH 08/50] understand behavior --- inputconditioner.t.v | 33 +++----------- inputconditioner.v | 2 +- inputconditioner.vcd | 103 ++++++++----------------------------------- 3 files changed, 24 insertions(+), 114 deletions(-) diff --git a/inputconditioner.t.v b/inputconditioner.t.v index cb47ebd..61ace9c 100644 --- a/inputconditioner.t.v +++ b/inputconditioner.t.v @@ -25,34 +25,11 @@ module testConditioner(); initial begin $dumpfile("inputconditioner.vcd"); $dumpvars; - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=1; #10 - pin=0; #10 - pin=1; #10 - pin=1; #10 - pin=1; #10 - pin=1; #10 - pin=1; #10 - pin=1; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 - pin=0; #10 + // Initialize conditioner by running at 0 for 3 clock cycles + pin=0; #50 + + pin=1; #40 + #100 $finish; end diff --git a/inputconditioner.v b/inputconditioner.v index aca8dff..412118f 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -15,7 +15,7 @@ output reg negativeedge // 1 clk pulse at falling edge of conditioned ); parameter counterwidth = 3; // Counter size, in bits, >= log2(waittime) - parameter waittime = 3; // Debounce delay, in clock cycles + parameter waittime = 2; // Debounce delay, in clock cycles reg[counterwidth-1:0] counter = 0; reg prevconditioned = 0; diff --git a/inputconditioner.vcd b/inputconditioner.vcd index 9bfeeaf..00c84d4 100644 --- a/inputconditioner.vcd +++ b/inputconditioner.vcd @@ -1,9 +1,5 @@ $date -<<<<<<< HEAD - Tue Oct 24 16:41:04 2017 -======= - Tue Oct 24 16:26:27 2017 ->>>>>>> 17aeae5ce9538371740ad9e0533440a376273a41 + Wed Oct 25 11:43:16 2017 $end $version Icarus Verilog @@ -24,23 +20,15 @@ $var reg 1 ( conditioned $end $var reg 3 ) counter [2:0] $end $var reg 1 * negativeedge $end $var reg 1 + positiveedge $end -<<<<<<< HEAD -$var reg 1 , synchronizer0 $end -$var reg 1 - synchronizer1 $end -======= $var reg 1 , prevconditioned $end $var reg 1 - synchronizer0 $end $var reg 1 . synchronizer1 $end ->>>>>>> 17aeae5ce9538371740ad9e0533440a376273a41 $upscope $end $upscope $end $enddefinitions $end #0 $dumpvars -<<<<<<< HEAD -======= 0. ->>>>>>> 17aeae5ce9538371740ad9e0533440a376273a41 0- 0, x+ @@ -56,14 +44,11 @@ x" x! $end #10 -<<<<<<< HEAD -======= 0* 0" 0+ 0# x, ->>>>>>> 17aeae5ce9538371740ad9e0533440a376273a41 b1 ) 1$ 1& @@ -75,120 +60,68 @@ b10 ) 1$ 1& #40 -1% -1' 0$ 0& #50 -b11 ) -0% -0' +1- +0( +0! +b0 ) 1$ 1& -#60 1% 1' +#60 0$ 0& #70 -<<<<<<< HEAD -1, -b100 ) +0, +1. 1$ 1& #80 0$ 0& #90 -1- -b101 ) +b1 ) 1$ 1& #100 0$ 0& #110 -1( -1! -b0 ) +b10 ) 1$ 1& #120 -0% -0' 0$ 0& #130 -0, +1( +1! +b0 ) 1$ 1& #140 0$ 0& #150 -0- +1+ +1# +1, 1$ 1& #160 0$ 0& #170 -b1 ) +0+ +0# 1$ 1& #180 0$ 0& #190 -b10 ) -1$ -1& -#200 -0$ -0& -#210 -b11 ) -1$ -1& -#220 -0$ -0& -#230 -b100 ) -1$ -1& -#240 -0$ -0& -#250 -b101 ) -1$ -1& -#260 -0$ -0& -#270 -0( -0! -b0 ) -1$ -1& -#280 -0$ -0& -======= -1- -0( -0! -b0 ) -1$ -1& -#80 -0$ -0& -#90 -0, -1. 1$ 1& ->>>>>>> 17aeae5ce9538371740ad9e0533440a376273a41 From 85c5d6aa286fcb9ae7938fc689b47a79633dbe9a Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 25 Oct 2017 11:52:42 -0400 Subject: [PATCH 09/50] split up debouncer into seperate module --- inputconditioner.v | 45 ++++++++++++++++++++------------------ inputconditioner.vcd | 52 ++++++++++++++++++++------------------------ 2 files changed, 48 insertions(+), 49 deletions(-) diff --git a/inputconditioner.v b/inputconditioner.v index 412118f..b2314f6 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -9,51 +9,54 @@ module inputconditioner ( input clk, // Clock domain to synchronize input to input noisysignal, // (Potentially) noisy input signal -output reg conditioned, // Conditioned output signal +output wire conditioned, // Conditioned output signal output reg positiveedge, // 1 clk pulse at rising edge of conditioned output reg negativeedge // 1 clk pulse at falling edge of conditioned +); + debouncer deb(clk, noisysignal, conditioned); + + reg prevconditioned = 0; + always @(posedge clk ) begin + if(conditioned == 0 & prevconditioned == 1) begin + positiveedge <= 1; + end + else begin + negativeedge <= 0; + end + end +endmodule + +// only changes the input signal after it is stable for a given waittime +module debouncer +( +input clk, // Clock domain to synchronize input to +input sig, // (Potentially) noisy input signal +output reg out // Debounced output signal ); parameter counterwidth = 3; // Counter size, in bits, >= log2(waittime) parameter waittime = 2; // Debounce delay, in clock cycles reg[counterwidth-1:0] counter = 0; - reg prevconditioned = 0; reg synchronizer0 = 0; reg synchronizer1 = 0; //0 0 0 0 1 0 1 1 1 1 always @(posedge clk ) begin // Case 1: previous signal is same as current output - if(conditioned == synchronizer1) + if(out == synchronizer1) counter <= 0; else begin // Case 2: Counter reaches maximum limit if( counter == waittime) begin counter <= 0; - conditioned <= synchronizer1; + out <= synchronizer1; end // Case 3: Counter has not reached max limit else counter <= counter+1; end - synchronizer0 <= noisysignal; + synchronizer0 <= sig; synchronizer1 <= synchronizer0; - - prevconditioned <= conditioned; - // Set positive edge output - if(conditioned == 1 & prevconditioned == 0) begin - positiveedge <= 1; - end - else begin - positiveedge <= 0; - end - - if(conditioned == 0 & prevconditioned == 1) begin - negativeedge <= 1; - end - else begin - negativeedge <= 0; - end end endmodule diff --git a/inputconditioner.vcd b/inputconditioner.vcd index 00c84d4..fe19d9e 100644 --- a/inputconditioner.vcd +++ b/inputconditioner.vcd @@ -1,5 +1,5 @@ $date - Wed Oct 25 11:43:16 2017 + Wed Oct 25 11:52:03 2017 $end $version Icarus Verilog @@ -15,25 +15,30 @@ $var reg 1 $ clk $end $var reg 1 % pin $end $scope module dut $end $var wire 1 & clk $end +$var wire 1 ! conditioned $end $var wire 1 ' noisysignal $end -$var reg 1 ( conditioned $end -$var reg 3 ) counter [2:0] $end -$var reg 1 * negativeedge $end -$var reg 1 + positiveedge $end -$var reg 1 , prevconditioned $end +$var reg 1 ( negativeedge $end +$var reg 1 ) positiveedge $end +$var reg 1 * prevconditioned $end +$scope module deb $end +$var wire 1 & clk $end +$var wire 1 ' sig $end +$var reg 3 + counter [2:0] $end +$var reg 1 , out $end $var reg 1 - synchronizer0 $end $var reg 1 . synchronizer1 $end $upscope $end $upscope $end +$upscope $end $enddefinitions $end #0 $dumpvars 0. 0- -0, -x+ -x* -b0 ) +x, +b0 + +0* +x) x( 0' 0& @@ -44,19 +49,16 @@ x" x! $end #10 -0* +b1 + +0( 0" -0+ -0# -x, -b1 ) 1$ 1& #20 0$ 0& #30 -b10 ) +b10 + 1$ 1& #40 @@ -64,9 +66,9 @@ b10 ) 0& #50 1- -0( +0, 0! -b0 ) +b0 + 1$ 1& 1% @@ -75,7 +77,6 @@ b0 ) 0$ 0& #70 -0, 1. 1$ 1& @@ -83,40 +84,35 @@ b0 ) 0$ 0& #90 -b1 ) +b1 + 1$ 1& #100 0$ 0& #110 -b10 ) +b10 + 1$ 1& #120 0$ 0& #130 -1( +1, 1! -b0 ) +b0 + 1$ 1& #140 0$ 0& #150 -1+ -1# -1, 1$ 1& #160 0$ 0& #170 -0+ -0# 1$ 1& #180 From e88240929598ee747d08be3ab89d0407bc167922 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 25 Oct 2017 12:15:43 -0400 Subject: [PATCH 10/50] refactor debouncer --- inputconditioner.t.v | 2 +- inputconditioner.v | 35 +++++++++++----------------- inputconditioner.vcd | 55 ++++++++++++++++++++++++++------------------ 3 files changed, 47 insertions(+), 45 deletions(-) diff --git a/inputconditioner.t.v b/inputconditioner.t.v index 61ace9c..ab477d9 100644 --- a/inputconditioner.t.v +++ b/inputconditioner.t.v @@ -26,7 +26,7 @@ module testConditioner(); $dumpfile("inputconditioner.vcd"); $dumpvars; // Initialize conditioner by running at 0 for 3 clock cycles - pin=0; #50 + pin=0; #100 pin=1; #40 #100 diff --git a/inputconditioner.v b/inputconditioner.v index b2314f6..66b158e 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -26,37 +26,30 @@ output reg negativeedge // 1 clk pulse at falling edge of conditioned end endmodule -// only changes the input signal after it is stable for a given waittime +// only changes the input signal after it is stable for a given wait_time module debouncer ( input clk, // Clock domain to synchronize input to input sig, // (Potentially) noisy input signal output reg out // Debounced output signal ); + parameter wait_time = 3; // Debounce delay, in clock cycles - parameter counterwidth = 3; // Counter size, in bits, >= log2(waittime) - parameter waittime = 2; // Debounce delay, in clock cycles - - reg[counterwidth-1:0] counter = 0; - reg synchronizer0 = 0; - reg synchronizer1 = 0; + reg[wait_time-1:0] prev_vals; //0 0 0 0 1 0 1 1 1 1 always @(posedge clk ) begin - // Case 1: previous signal is same as current output - if(out == synchronizer1) - counter <= 0; - else begin - // Case 2: Counter reaches maximum limit - if( counter == waittime) begin - counter <= 0; - out <= synchronizer1; - end - // Case 3: Counter has not reached max limit - else - counter <= counter+1; + // Case 1: The previous values are all 1s + if( prev_vals == ((2**wait_time) - 1)) begin + out <= 1; + end + // Case 2: The previous values are all 0s + else if( prev_vals == 0) begin + out <= 0; end - synchronizer0 <= sig; - synchronizer1 <= synchronizer0; + // Update the previous values to have the new signal bit + // Note that the output won't reflect the latest signal + // until the next clock cycle + prev_vals <= {prev_vals, sig}; end endmodule diff --git a/inputconditioner.vcd b/inputconditioner.vcd index fe19d9e..0f90010 100644 --- a/inputconditioner.vcd +++ b/inputconditioner.vcd @@ -1,5 +1,5 @@ $date - Wed Oct 25 11:52:03 2017 + Wed Oct 25 12:11:55 2017 $end $version Icarus Verilog @@ -23,20 +23,16 @@ $var reg 1 * prevconditioned $end $scope module deb $end $var wire 1 & clk $end $var wire 1 ' sig $end -$var reg 3 + counter [2:0] $end -$var reg 1 , out $end -$var reg 1 - synchronizer0 $end -$var reg 1 . synchronizer1 $end +$var reg 1 + out $end +$var reg 3 , prev_vals [2:0] $end $upscope $end $upscope $end $upscope $end $enddefinitions $end #0 $dumpvars -0. -0- -x, -b0 + +bx , +x+ 0* x) x( @@ -49,7 +45,7 @@ x" x! $end #10 -b1 + +bx0 , 0( 0" 1$ @@ -58,61 +54,59 @@ b1 + 0$ 0& #30 -b10 + +bx00 , 1$ 1& #40 0$ 0& #50 -1- -0, -0! -b0 + +b0 , 1$ 1& -1% -1' #60 0$ 0& #70 -1. +0+ +0! 1$ 1& #80 0$ 0& #90 -b1 + 1$ 1& #100 0$ 0& +1% +1' #110 -b10 + +b1 , 1$ 1& #120 0$ 0& #130 -1, -1! -b0 + +b11 , 1$ 1& #140 0$ 0& #150 +b111 , 1$ 1& #160 0$ 0& #170 +1+ +1! 1$ 1& #180 @@ -121,3 +115,18 @@ b0 + #190 1$ 1& +#200 +0$ +0& +#210 +1$ +1& +#220 +0$ +0& +#230 +1$ +1& +#240 +0$ +0& From c3a6154d0f9ccd33ad260555203be3b9c9e4f1cd Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 25 Oct 2017 13:05:41 -0400 Subject: [PATCH 11/50] added posedge and negedge but theyre delayed --- inputconditioner.t.v | 15 ++- inputconditioner.v | 16 ++- inputconditioner.vcd | 293 +++++++++++++++++++++++++++++++++++++++++-- shiftregister.v | 14 ++- 4 files changed, 317 insertions(+), 21 deletions(-) diff --git a/inputconditioner.t.v b/inputconditioner.t.v index ab477d9..eadc333 100644 --- a/inputconditioner.t.v +++ b/inputconditioner.t.v @@ -20,15 +20,24 @@ module testConditioner(); // Generate clock (50MHz) initial clk=0; - always #10 clk=!clk; // 50MHz Clock + always #5 clk=!clk; // 50MHz Clock initial begin $dumpfile("inputconditioner.vcd"); $dumpvars; // Initialize conditioner by running at 0 for 3 clock cycles - pin=0; #100 + pin=0; #40 - pin=1; #40 + pin=1; #10 + pin=0; #10 + pin=1; #80 + pin=0; #100 + pin=1; #10 + pin=0; #10 + pin=1; #10 + pin=0; #10 + pin=1; #80 + pin=0; #100 $finish; end diff --git a/inputconditioner.v b/inputconditioner.v index 66b158e..1061d48 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -17,12 +17,23 @@ output reg negativeedge // 1 clk pulse at falling edge of conditioned reg prevconditioned = 0; always @(posedge clk ) begin - if(conditioned == 0 & prevconditioned == 1) begin + + // look for positive edge + if((conditioned == 1) & (prevconditioned == 0)) begin positiveedge <= 1; end + else begin + positiveedge <= 0; + end + + // look for negative edge + if ((conditioned == 0) & (prevconditioned == 1)) begin + negativeedge <= 1; + end else begin negativeedge <= 0; end + prevconditioned <= conditioned; end endmodule @@ -36,7 +47,6 @@ output reg out // Debounced output signal parameter wait_time = 3; // Debounce delay, in clock cycles reg[wait_time-1:0] prev_vals; - //0 0 0 0 1 0 1 1 1 1 always @(posedge clk ) begin // Case 1: The previous values are all 1s @@ -50,6 +60,6 @@ output reg out // Debounced output signal // Update the previous values to have the new signal bit // Note that the output won't reflect the latest signal // until the next clock cycle - prev_vals <= {prev_vals, sig}; + prev_vals <= {prev_vals, sig}; // wont this overflow? when are we deleting from prev_vals? end endmodule diff --git a/inputconditioner.vcd b/inputconditioner.vcd index 0f90010..50cdedf 100644 --- a/inputconditioner.vcd +++ b/inputconditioner.vcd @@ -1,5 +1,5 @@ $date - Wed Oct 25 12:11:55 2017 + Wed Oct 25 12:57:12 2017 $end $version Icarus Verilog @@ -44,89 +44,356 @@ x# x" x! $end -#10 +#5 bx0 , +x* 0( 0" +0) +0# +1$ +1& +#10 +0$ +0& +#15 +bx00 , 1$ 1& #20 0$ 0& +#25 +b0 , +1$ +1& #30 -bx00 , +0$ +0& +#35 +0+ +0! 1$ 1& #40 0$ 0& +1% +1' +#45 +b1 , +0* +1$ +1& #50 -b0 , +0$ +0& +0% +0' +#55 +b10 , 1$ 1& #60 0$ 0& +1% +1' +#65 +b101 , +1$ +1& #70 -0+ -0! +0$ +0& +#75 +b11 , 1$ 1& #80 0$ 0& +#85 +b111 , +1$ +1& #90 +0$ +0& +#95 +1+ +1! 1$ 1& #100 0$ 0& -1% -1' +#105 +1* +1) +1# +1$ +1& #110 -b1 , +0$ +0& +#115 +0) +0# 1$ 1& #120 0$ 0& +#125 +1$ +1& #130 -b11 , +0$ +0& +#135 1$ 1& #140 0$ 0& +0% +0' +#145 +b110 , +1$ +1& #150 -b111 , +0$ +0& +#155 +b100 , 1$ 1& #160 0$ 0& +#165 +b0 , +1$ +1& #170 -1+ -1! +0$ +0& +#175 +0+ +0! 1$ 1& #180 0$ 0& +#185 +0* +1( +1" +1$ +1& #190 +0$ +0& +#195 +0( +0" 1$ 1& #200 0$ 0& +#205 +1$ +1& #210 +0$ +0& +#215 1$ 1& #220 0$ 0& +#225 +1$ +1& #230 +0$ +0& +#235 1$ 1& #240 0$ 0& +1% +1' +#245 +b1 , +1$ +1& +#250 +0$ +0& +0% +0' +#255 +b10 , +1$ +1& +#260 +0$ +0& +1% +1' +#265 +b101 , +1$ +1& +#270 +0$ +0& +0% +0' +#275 +b10 , +1$ +1& +#280 +0$ +0& +1% +1' +#285 +b101 , +1$ +1& +#290 +0$ +0& +#295 +b11 , +1$ +1& +#300 +0$ +0& +#305 +b111 , +1$ +1& +#310 +0$ +0& +#315 +1+ +1! +1$ +1& +#320 +0$ +0& +#325 +1* +1) +1# +1$ +1& +#330 +0$ +0& +#335 +0) +0# +1$ +1& +#340 +0$ +0& +#345 +1$ +1& +#350 +0$ +0& +#355 +1$ +1& +#360 +0$ +0& +0% +0' +#365 +b110 , +1$ +1& +#370 +0$ +0& +#375 +b100 , +1$ +1& +#380 +0$ +0& +#385 +b0 , +1$ +1& +#390 +0$ +0& +#395 +0+ +0! +1$ +1& +#400 +0$ +0& +#405 +0* +1( +1" +1$ +1& +#410 +0$ +0& +#415 +0( +0" +1$ +1& +#420 +0$ +0& +#425 +1$ +1& +#430 +0$ +0& +#435 +1$ +1& +#440 +0$ +0& +#445 +1$ +1& +#450 +0$ +0& +#455 +1$ +1& +#460 +0$ +0& diff --git a/shiftregister.v b/shiftregister.v index b4ec057..9af5c4d 100644 --- a/shiftregister.v +++ b/shiftregister.v @@ -18,8 +18,18 @@ output [width-1:0] parallelDataOut, // Shift reg data contents output serialDataOut // Positive edge synchronized ); - reg [width-1:0] shiftregistermem; + reg [width-1:0] data; + always @(posedge clk) begin - // Your Code Here + if (peripheralClkEdge) begin + data <= {data << 1, serialDataIn}; + end + if (parallelLoad) begin + data <= parallelDataIn; + end + serialDataOut <= data[width - 1]; + parallelDataOut <= data; end + + endmodule From 1cbfd7fc698e98f85a3643cba19ca48308dd3506 Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 25 Oct 2017 13:50:44 -0400 Subject: [PATCH 12/50] working --- inputconditioner.t.v | 4 + inputconditioner.v | 64 ++++++++++----- inputconditioner.vcd | 189 +++++++++++++++++++++++++++---------------- 3 files changed, 167 insertions(+), 90 deletions(-) diff --git a/inputconditioner.t.v b/inputconditioner.t.v index eadc333..ab9666a 100644 --- a/inputconditioner.t.v +++ b/inputconditioner.t.v @@ -35,6 +35,10 @@ module testConditioner(); pin=1; #10 pin=0; #10 pin=1; #10 + pin=0; #50 + pin=1; #10 + pin=0; #10 + pin=1; #10 pin=0; #10 pin=1; #80 pin=0; diff --git a/inputconditioner.v b/inputconditioner.v index 1061d48..1d3356a 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -9,52 +9,77 @@ module inputconditioner ( input clk, // Clock domain to synchronize input to input noisysignal, // (Potentially) noisy input signal -output wire conditioned, // Conditioned output signal +output reg conditioned, // Conditioned output signal output reg positiveedge, // 1 clk pulse at rising edge of conditioned output reg negativeedge // 1 clk pulse at falling edge of conditioned ); - debouncer deb(clk, noisysignal, conditioned); + parameter wait_time = 3; // Debounce delay, in clock cycles + reg[wait_time-1:0] prev_vals; + - reg prevconditioned = 0; always @(posedge clk ) begin - - // look for positive edge - if((conditioned == 1) & (prevconditioned == 0)) begin - positiveedge <= 1; - end - else begin - positiveedge <= 0; + // Case 1: The previous values are all 1s + if( prev_vals == ((2**wait_time) - 1)) begin + if (conditioned == 0) begin + positiveedge <= 1; + end + else begin + positiveedge <= 0; + end + conditioned <= 1; end + // Case 2: The previous values are all 0s + else if( prev_vals == 0) begin + if (conditioned == 1) begin + negativeedge <= 1; + end + else begin + negativeedge <= 0; + end - // look for negative edge - if ((conditioned == 0) & (prevconditioned == 1)) begin - negativeedge <= 1; - end - else begin - negativeedge <= 0; + conditioned <= 0; end - prevconditioned <= conditioned; + + prev_vals <= {prev_vals, noisysignal}; // wont this overflow? when are we deleting from prev_vals? end + endmodule +/* // only changes the input signal after it is stable for a given wait_time module debouncer ( input clk, // Clock domain to synchronize input to input sig, // (Potentially) noisy input signal -output reg out // Debounced output signal +output reg out, // Debounced output signal +output reg positiveedge, +output reg negativeedge ); parameter wait_time = 3; // Debounce delay, in clock cycles reg[wait_time-1:0] prev_vals; + //0 0 0 0 1 0 1 1 1 1 always @(posedge clk ) begin // Case 1: The previous values are all 1s if( prev_vals == ((2**wait_time) - 1)) begin - out <= 1; + if (out == 0) begin + positiveedge <= 1; + out <= 1; + end + else begin + positiveedge <= 0; + out <= 1; + end end // Case 2: The previous values are all 0s else if( prev_vals == 0) begin + if (out == 1) begin + negativeedge <= 1; + end + else begin + negativeedge <= 0; + end out <= 0; end // Update the previous values to have the new signal bit @@ -63,3 +88,4 @@ output reg out // Debounced output signal prev_vals <= {prev_vals, sig}; // wont this overflow? when are we deleting from prev_vals? end endmodule +*/ \ No newline at end of file diff --git a/inputconditioner.vcd b/inputconditioner.vcd index 50cdedf..1b8a81f 100644 --- a/inputconditioner.vcd +++ b/inputconditioner.vcd @@ -1,5 +1,5 @@ $date - Wed Oct 25 12:57:12 2017 + Wed Oct 25 13:37:41 2017 $end $version Icarus Verilog @@ -15,25 +15,18 @@ $var reg 1 $ clk $end $var reg 1 % pin $end $scope module dut $end $var wire 1 & clk $end -$var wire 1 ! conditioned $end $var wire 1 ' noisysignal $end -$var reg 1 ( negativeedge $end -$var reg 1 ) positiveedge $end -$var reg 1 * prevconditioned $end -$scope module deb $end -$var wire 1 & clk $end -$var wire 1 ' sig $end -$var reg 1 + out $end -$var reg 3 , prev_vals [2:0] $end -$upscope $end +$var reg 1 ( conditioned $end +$var reg 1 ) negativeedge $end +$var reg 1 * positiveedge $end +$var reg 3 + prev_vals [2:0] $end $upscope $end $upscope $end $enddefinitions $end #0 $dumpvars -bx , -x+ -0* +bx + +x* x) x( 0' @@ -45,34 +38,31 @@ x" x! $end #5 -bx0 , -x* -0( -0" -0) -0# +bx0 + 1$ 1& #10 0$ 0& #15 -bx00 , +bx00 + 1$ 1& #20 0$ 0& #25 -b0 , +b0 + 1$ 1& #30 0$ 0& #35 -0+ +0( 0! +0) +0" 1$ 1& #40 @@ -81,8 +71,7 @@ b0 , 1% 1' #45 -b1 , -0* +b1 + 1$ 1& #50 @@ -91,7 +80,7 @@ b1 , 0% 0' #55 -b10 , +b10 + 1$ 1& #60 @@ -100,46 +89,45 @@ b10 , 1% 1' #65 -b101 , +b101 + 1$ 1& #70 0$ 0& #75 -b11 , +b11 + 1$ 1& #80 0$ 0& #85 -b111 , +b111 + 1$ 1& #90 0$ 0& #95 -1+ +1( 1! +1* +1# 1$ 1& #100 0$ 0& #105 -1* -1) -1# +0* +0# 1$ 1& #110 0$ 0& #115 -0) -0# 1$ 1& #120 @@ -160,46 +148,45 @@ b111 , 0% 0' #145 -b110 , +b110 + 1$ 1& #150 0$ 0& #155 -b100 , +b100 + 1$ 1& #160 0$ 0& #165 -b0 , +b0 + 1$ 1& #170 0$ 0& #175 -0+ +0( 0! +1) +1" 1$ 1& #180 0$ 0& #185 -0* -1( -1" +0) +0" 1$ 1& #190 0$ 0& #195 -0( -0" 1$ 1& #200 @@ -232,7 +219,7 @@ b0 , 1% 1' #245 -b1 , +b1 + 1$ 1& #250 @@ -241,7 +228,7 @@ b1 , 0% 0' #255 -b10 , +b10 + 1$ 1& #260 @@ -250,7 +237,7 @@ b10 , 1% 1' #265 -b101 , +b101 + 1$ 1& #270 @@ -259,98 +246,102 @@ b101 , 0% 0' #275 -b10 , +b10 + 1$ 1& #280 0$ 0& -1% -1' #285 -b101 , +b100 + 1$ 1& #290 0$ 0& #295 -b11 , +b0 + 1$ 1& #300 0$ 0& #305 -b111 , 1$ 1& #310 0$ 0& #315 -1+ -1! 1$ 1& #320 0$ 0& +1% +1' #325 -1* -1) -1# +b1 + 1$ 1& #330 0$ 0& +0% +0' #335 -0) -0# +b10 + 1$ 1& #340 0$ 0& +1% +1' #345 +b101 + 1$ 1& #350 0$ 0& +0% +0' #355 +b10 + 1$ 1& #360 0$ 0& -0% -0' +1% +1' #365 -b110 , +b101 + 1$ 1& #370 0$ 0& #375 -b100 , +b11 + 1$ 1& #380 0$ 0& #385 -b0 , +b111 + 1$ 1& #390 0$ 0& #395 -0+ -0! +1( +1! +1* +1# 1$ 1& #400 @@ -358,16 +349,13 @@ b0 , 0& #405 0* -1( -1" +0# 1$ 1& #410 0$ 0& #415 -0( -0" 1$ 1& #420 @@ -385,15 +373,74 @@ b0 , #440 0$ 0& +0% +0' #445 +b110 + 1$ 1& #450 0$ 0& #455 +b100 + 1$ 1& #460 0$ 0& +#465 +b0 + +1$ +1& +#470 +0$ +0& +#475 +0( +0! +1) +1" +1$ +1& +#480 +0$ +0& +#485 +0) +0" +1$ +1& +#490 +0$ +0& +#495 +1$ +1& +#500 +0$ +0& +#505 +1$ +1& +#510 +0$ +0& +#515 +1$ +1& +#520 +0$ +0& +#525 +1$ +1& +#530 +0$ +0& +#535 +1$ +1& +#540 +0$ +0& From 9730f81a649cb0e5a8e2844c17a7ea0070355962 Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 25 Oct 2017 16:02:30 -0400 Subject: [PATCH 13/50] remove comments --- inputconditioner.v | 51 +++------------------------------------------- 1 file changed, 3 insertions(+), 48 deletions(-) diff --git a/inputconditioner.v b/inputconditioner.v index 1d3356a..5491359 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -13,7 +13,7 @@ output reg conditioned, // Conditioned output signal output reg positiveedge, // 1 clk pulse at rising edge of conditioned output reg negativeedge // 1 clk pulse at falling edge of conditioned ); - parameter wait_time = 3; // Debounce delay, in clock cycles + parameter wait_time = 3; reg[wait_time-1:0] prev_vals; @@ -40,52 +40,7 @@ output reg negativeedge // 1 clk pulse at falling edge of conditioned conditioned <= 0; end - prev_vals <= {prev_vals, noisysignal}; // wont this overflow? when are we deleting from prev_vals? + prev_vals <= {prev_vals, noisysignal}; end -endmodule - -/* -// only changes the input signal after it is stable for a given wait_time -module debouncer -( -input clk, // Clock domain to synchronize input to -input sig, // (Potentially) noisy input signal -output reg out, // Debounced output signal -output reg positiveedge, -output reg negativeedge -); - parameter wait_time = 3; // Debounce delay, in clock cycles - - reg[wait_time-1:0] prev_vals; - - //0 0 0 0 1 0 1 1 1 1 - always @(posedge clk ) begin - // Case 1: The previous values are all 1s - if( prev_vals == ((2**wait_time) - 1)) begin - if (out == 0) begin - positiveedge <= 1; - out <= 1; - end - else begin - positiveedge <= 0; - out <= 1; - end - end - // Case 2: The previous values are all 0s - else if( prev_vals == 0) begin - if (out == 1) begin - negativeedge <= 1; - end - else begin - negativeedge <= 0; - end - out <= 0; - end - // Update the previous values to have the new signal bit - // Note that the output won't reflect the latest signal - // until the next clock cycle - prev_vals <= {prev_vals, sig}; // wont this overflow? when are we deleting from prev_vals? - end -endmodule -*/ \ No newline at end of file +endmodule \ No newline at end of file From feebecbf43d0358331dc41f9a4d909d4ad6b38b1 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 25 Oct 2017 16:19:33 -0400 Subject: [PATCH 14/50] Add parallel tests --- shiftregister.t.v | 64 +++++++++++++++++++++++++++++++++++++++-------- shiftregister.v | 4 +-- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/shiftregister.t.v b/shiftregister.t.v index abe5b48..d1cb753 100644 --- a/shiftregister.t.v +++ b/shiftregister.t.v @@ -1,6 +1,7 @@ //------------------------------------------------------------------------ // Shift Register test bench //------------------------------------------------------------------------ +`include "shiftregister.v" module testshiftregister(); @@ -10,20 +11,63 @@ module testshiftregister(); wire[7:0] parallelDataOut; wire serialDataOut; reg[7:0] parallelDataIn; - reg serialDataIn; - + reg serialDataIn; + // Instantiate with parameter width = 8 - shiftregister #(8) dut(.clk(clk), + shiftregister #(8) dut(.clk(clk), .peripheralClkEdge(peripheralClkEdge), - .parallelLoad(parallelLoad), - .parallelDataIn(parallelDataIn), - .serialDataIn(serialDataIn), - .parallelDataOut(parallelDataOut), + .parallelLoad(parallelLoad), + .parallelDataIn(parallelDataIn), + .serialDataIn(serialDataIn), + .parallelDataOut(parallelDataOut), .serialDataOut(serialDataOut)); - + + // Generate clock (50MHz) + initial clk=0; + always #5 clk=!clk; + initial begin - // Your Test Code + // Test parallel looads + parallelLoad = 1; + parallelDataIn = 8'b00000000; + #20; + if (parallelDataOut == 8'b00000000) begin + $display("Test Case 1 Passed"); + end + else begin + $display("Test Case 1 Failed!"); + end + + parallelDataIn = 8'b00001111; + #20; + if (parallelDataOut == 8'b00001111) begin + $display("Test Case 2 Passed"); + end + else begin + $display("Test Case 2 Failed!"); + end + + parallelDataIn = 8'b11111111; + #20; + if (parallelDataOut == 8'b11111111) begin + $display("Test Case 3 Passed"); + end + else begin + $display("Test Case 3 Failed!"); + end + + parallelLoad = 0; + parallelDataIn = 8'b00000000; + #20; + if (parallelDataOut == 8'b00000000) begin + $display("Test Case 4 Failed!"); + end + else begin + $display("Test Case 4 Passed"); + end + + + $finish; end endmodule - diff --git a/shiftregister.v b/shiftregister.v index 9af5c4d..a6f5ab8 100644 --- a/shiftregister.v +++ b/shiftregister.v @@ -14,8 +14,8 @@ input peripheralClkEdge, // Edge indicator input parallelLoad, // 1 = Load shift reg with parallelDataIn input [width-1:0] parallelDataIn, // Load shift reg in parallel input serialDataIn, // Load shift reg serially -output [width-1:0] parallelDataOut, // Shift reg data contents -output serialDataOut // Positive edge synchronized +output reg [width-1:0] parallelDataOut, // Shift reg data contents +output reg serialDataOut // Positive edge synchronized ); reg [width-1:0] data; From e82ace44da92c642f3fa86fddb105e3634bfbd2e Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 25 Oct 2017 16:19:33 -0400 Subject: [PATCH 15/50] Add parallel tests --- shiftregister.t.v | 65 +++++++++++++++++++++++++++++++++++++++-------- shiftregister.v | 4 +-- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/shiftregister.t.v b/shiftregister.t.v index abe5b48..f851c2f 100644 --- a/shiftregister.t.v +++ b/shiftregister.t.v @@ -1,6 +1,7 @@ //------------------------------------------------------------------------ // Shift Register test bench //------------------------------------------------------------------------ +`include "shiftregister.v" module testshiftregister(); @@ -10,20 +11,64 @@ module testshiftregister(); wire[7:0] parallelDataOut; wire serialDataOut; reg[7:0] parallelDataIn; - reg serialDataIn; - + reg serialDataIn; + // Instantiate with parameter width = 8 - shiftregister #(8) dut(.clk(clk), + shiftregister #(8) dut(.clk(clk), .peripheralClkEdge(peripheralClkEdge), - .parallelLoad(parallelLoad), - .parallelDataIn(parallelDataIn), - .serialDataIn(serialDataIn), - .parallelDataOut(parallelDataOut), + .parallelLoad(parallelLoad), + .parallelDataIn(parallelDataIn), + .serialDataIn(serialDataIn), + .parallelDataOut(parallelDataOut), .serialDataOut(serialDataOut)); - + + // Generate clock (50MHz) + initial clk=0; + always #5 clk=!clk; + initial begin - // Your Test Code + // Test parallel loads + parallelLoad = 1; + parallelDataIn = 8'b00000000; + #20; + if (parallelDataOut == 8'b00000000) begin + $display("Test Case 1 Passed"); + end + else begin + $display("Test Case 1 Failed!"); + end + + parallelDataIn = 8'b00001111; + #20; + if (parallelDataOut == 8'b00001111) begin + $display("Test Case 2 Passed"); + end + else begin + $display("Test Case 2 Failed!"); + end + + parallelDataIn = 8'b11111111; + #20; + if (parallelDataOut == 8'b11111111) begin + $display("Test Case 3 Passed"); + end + else begin + $display("Test Case 3 Failed!"); + end + + // If parallel load is off, the data should not be changed. + parallelLoad = 0; + parallelDataIn = 8'b00000000; + #20; + if (parallelDataOut == 8'b00000000) begin + $display("Test Case 4 Failed!"); + end + else begin + $display("Test Case 4 Passed"); + end + + + $finish; end endmodule - diff --git a/shiftregister.v b/shiftregister.v index 9af5c4d..a6f5ab8 100644 --- a/shiftregister.v +++ b/shiftregister.v @@ -14,8 +14,8 @@ input peripheralClkEdge, // Edge indicator input parallelLoad, // 1 = Load shift reg with parallelDataIn input [width-1:0] parallelDataIn, // Load shift reg in parallel input serialDataIn, // Load shift reg serially -output [width-1:0] parallelDataOut, // Shift reg data contents -output serialDataOut // Positive edge synchronized +output reg [width-1:0] parallelDataOut, // Shift reg data contents +output reg serialDataOut // Positive edge synchronized ); reg [width-1:0] data; From a8494e8558d15570ed462512be7580503d21657d Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 25 Oct 2017 16:27:57 -0400 Subject: [PATCH 16/50] serial tests --- shiftregister.t.v | 41 +++++++++++++++++++++++++++++++++- shiftregister.v | 4 ++-- shiftregister.vcd | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 shiftregister.vcd diff --git a/shiftregister.t.v b/shiftregister.t.v index abe5b48..0d66d77 100644 --- a/shiftregister.t.v +++ b/shiftregister.t.v @@ -1,6 +1,7 @@ //------------------------------------------------------------------------ // Shift Register test bench //------------------------------------------------------------------------ +`include "shiftregister.v" module testshiftregister(); @@ -21,8 +22,46 @@ module testshiftregister(); .parallelDataOut(parallelDataOut), .serialDataOut(serialDataOut)); + always #10 clk=!clk; initial begin - // Your Test Code + //$dumpfile("shiftregister.vcd"); + //$dumpvars; + parallelLoad = 1; + parallelDataIn = 8'b00000000; #100 + peripheralClkEdge = 1; + + serialDataIn = 1; #10 + if (serialDataOut == 0) begin + $display("Passed Test Case 1"); + end + else begin + $display("Failed Test Case 1"); + $display(serialDataOut); + $display("%8b", parallelDataOut); + end + if (parallelDataOut == 1) begin + $display("Failed Test Case 2"); + end + else begin + $display("Passed Test Case 2"); + end + #30 + if (serialDataOut != 0) begin + $display("Failed Test Case 3"); + end + if (parallelDataOut != 8) begin + $display("Failed Test Case 4"); + end + #50 + /*if (parallelLoad == 0) begin + $display("Failed!"); + end + serialDataIn = 0; #10 + serialDataIn = 1; #10 + serialDataIn = 1; #10 + serialDataIn = 1; + #100*/ + $finish; end endmodule diff --git a/shiftregister.v b/shiftregister.v index 9af5c4d..a6f5ab8 100644 --- a/shiftregister.v +++ b/shiftregister.v @@ -14,8 +14,8 @@ input peripheralClkEdge, // Edge indicator input parallelLoad, // 1 = Load shift reg with parallelDataIn input [width-1:0] parallelDataIn, // Load shift reg in parallel input serialDataIn, // Load shift reg serially -output [width-1:0] parallelDataOut, // Shift reg data contents -output serialDataOut // Positive edge synchronized +output reg [width-1:0] parallelDataOut, // Shift reg data contents +output reg serialDataOut // Positive edge synchronized ); reg [width-1:0] data; diff --git a/shiftregister.vcd b/shiftregister.vcd new file mode 100644 index 0000000..8223811 --- /dev/null +++ b/shiftregister.vcd @@ -0,0 +1,57 @@ +$date + Wed Oct 25 16:15:27 2017 +$end +$version + Icarus Verilog +$end +$timescale + 1s +$end +$scope module testshiftregister $end +$var wire 8 ! parallelDataOut [7:0] $end +$var wire 1 " serialDataOut $end +$var reg 1 # clk $end +$var reg 8 $ parallelDataIn [7:0] $end +$var reg 1 % parallelLoad $end +$var reg 1 & peripheralClkEdge $end +$var reg 1 ' serialDataIn $end +$scope module dut $end +$var wire 1 ( clk $end +$var wire 8 ) parallelDataIn [7:0] $end +$var wire 1 * parallelLoad $end +$var wire 1 + peripheralClkEdge $end +$var wire 1 , serialDataIn $end +$var reg 8 - data [7:0] $end +$var reg 8 . parallelDataOut [7:0] $end +$var reg 1 / serialDataOut $end +$upscope $end +$upscope $end +$enddefinitions $end +#0 +$dumpvars +x/ +bx . +bx - +x, +x+ +x* +b0 ) +x( +x' +x& +x% +b0 $ +x# +x" +bx ! +$end +#100 +1' +1, +#120 +0' +0, +#130 +1' +1, +#250 From 0365a9de304b16258f25e553e7bd9ea02dde6850 Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 25 Oct 2017 16:44:30 -0400 Subject: [PATCH 17/50] saving --- shiftregister.t.v | 46 ++++++++++++++++++++++++++++++++++++++-------- shiftregister.v | 8 ++++---- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/shiftregister.t.v b/shiftregister.t.v index 2093820..3c9ea95 100644 --- a/shiftregister.t.v +++ b/shiftregister.t.v @@ -22,7 +22,7 @@ module testshiftregister(); .parallelDataOut(parallelDataOut), .serialDataOut(serialDataOut)); - intial clk = 0; + initial clk = 0; always #5 clk=!clk; initial begin //$dumpfile("shiftregister.vcd"); @@ -67,13 +67,43 @@ module testshiftregister(); else begin $display("Test Case 4 Passed"); end + $finish; - // Test serial loads - parallelLoad = 1; - parallelDataIn = 8'b00000000; #100 + // Manual clock + parallelLoad = 0; + serialDataIn = 1; peripheralClkEdge = 1; + + clk = 0; clk = 1; clk = 0; + if (parallelDataOut == 8'b00000001) begin + $display("passed ----"); + end + else begin + $display("failed -----"); + $display("%8b", parallelDataOut); + end + serialDataIn = 0; + + clk = 1; clk = 0; + if (parallelDataOut == 8'b00000010) begin + $display("passed ----"); + end + else begin + $display("failed -----"); + $display("%8b", parallelDataOut); + end + + /*if (parallelDataOut == 8'b00000010) begin + $display("passed ----"); + end + else begin + $display("failed -----"); + $display("%8b", parallelDataOut); + end*/ - serialDataIn = 1; #10 + //peripheralClkEdge = 1; + + /*serialDataIn = 1; #10 if (serialDataOut == 0) begin $display("Passed Test Case 1"); end @@ -94,8 +124,8 @@ module testshiftregister(); end if (parallelDataOut != 8) begin $display("Failed Test Case 4"); - end - #50 + end*/ + /*if (parallelLoad == 0) begin $display("Failed!"); end @@ -105,7 +135,7 @@ module testshiftregister(); serialDataIn = 1; #100*/ - $finish; + //$finish; end endmodule diff --git a/shiftregister.v b/shiftregister.v index a6f5ab8..61fa201 100644 --- a/shiftregister.v +++ b/shiftregister.v @@ -21,11 +21,11 @@ output reg serialDataOut // Positive edge synchronized reg [width-1:0] data; always @(posedge clk) begin - if (peripheralClkEdge) begin - data <= {data << 1, serialDataIn}; - end if (parallelLoad) begin - data <= parallelDataIn; + data <= parallelDataIn; + end + else if (peripheralClkEdge) begin + data <= {data << 1, serialDataIn}; end serialDataOut <= data[width - 1]; parallelDataOut <= data; From 1a16be1555726c7542ab34de614fe59c31d5b8d4 Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 25 Oct 2017 20:28:39 -0400 Subject: [PATCH 18/50] shifter working --- shiftregister.t.v | 102 ++++++++++++++++++----------------- shiftregister.v | 11 ++-- shiftregister.vcd | 132 +++++++++++++++++++++++++++++++++++++--------- 3 files changed, 166 insertions(+), 79 deletions(-) diff --git a/shiftregister.t.v b/shiftregister.t.v index 3c9ea95..c1b0f7c 100644 --- a/shiftregister.t.v +++ b/shiftregister.t.v @@ -23,16 +23,16 @@ module testshiftregister(); .serialDataOut(serialDataOut)); initial clk = 0; - always #5 clk=!clk; + initial begin - //$dumpfile("shiftregister.vcd"); - //$dumpvars; - + $dumpfile("shiftregister.vcd"); + $dumpvars; + peripheralClkEdge = 0; // Test parallel loads parallelLoad = 1; parallelDataIn = 8'b00000000; - #20; + clk = 1; #10 clk = 0; #10 if (parallelDataOut == 8'b00000000) begin $display("Test Case 1 Passed"); end @@ -41,7 +41,7 @@ module testshiftregister(); end parallelDataIn = 8'b00001111; - #20; + clk = 1; #10 clk = 0; #10; if (parallelDataOut == 8'b00001111) begin $display("Test Case 2 Passed"); end @@ -50,92 +50,96 @@ module testshiftregister(); end parallelDataIn = 8'b11111111; - #20; + clk = 1; #10 clk = 0; #10 if (parallelDataOut == 8'b11111111) begin $display("Test Case 3 Passed"); end else begin $display("Test Case 3 Failed!"); end + if (serialDataOut == 1) begin + $display("Test Case 10 serialDataOut Passed"); + end + else begin + $display("Test Case 10 serialDataOut Failed!"); + $display("%8b", serialDataOut); + end + parallelLoad = 0; parallelDataIn = 8'b00000000; - #20; + clk = 1; #10 clk = 0; #10 if (parallelDataOut == 8'b00000000) begin $display("Test Case 4 Failed!"); end else begin $display("Test Case 4 Passed"); end - $finish; - // Manual clock + + // serial tests + clk = 0; #10 + parallelLoad = 1; + parallelDataIn = 8'b00000000; + clk = 1; #10 clk = 0; #10 + parallelLoad = 0; serialDataIn = 1; peripheralClkEdge = 1; - clk = 0; clk = 1; clk = 0; + clk = 1; #5 clk = 0; #5 if (parallelDataOut == 8'b00000001) begin - $display("passed ----"); + $display("Test Case 6 Passed"); end else begin - $display("failed -----"); + $display("Test Case 6 Failed!"); $display("%8b", parallelDataOut); end - serialDataIn = 0; + if (serialDataOut == 0) begin + $display("Test Case 7 Passed"); + end + else begin + $display("Test Case 7 Failed!"); + $display("%8b", serialDataOut); + end - clk = 1; clk = 0; - if (parallelDataOut == 8'b00000010) begin - $display("passed ----"); + clk = 1; #5 clk = 0; #5 + + if (parallelDataOut == 8'b00000011) begin + $display("passed serial test 2"); end else begin - $display("failed -----"); + $display("failed serial test 2"); $display("%8b", parallelDataOut); end - /*if (parallelDataOut == 8'b00000010) begin - $display("passed ----"); + clk = 1; #5 clk = 0; #5 + if (parallelDataOut == 8'b00000111) begin + $display("passed serial test 3"); end else begin - $display("failed -----"); + $display("failed serial test 3"); $display("%8b", parallelDataOut); - end*/ - - //peripheralClkEdge = 1; + end - /*serialDataIn = 1; #10 - if (serialDataOut == 0) begin - $display("Passed Test Case 1"); + serialDataIn = 0; + clk = 1; #5 clk = 0; #5 + if (parallelDataOut == 8'b00001110) begin + $display("passed serial test 4"); end else begin - $display("Failed Test Case 1"); - $display(serialDataOut); + $display("failed serial test 4"); $display("%8b", parallelDataOut); end - if (parallelDataOut == 1) begin - $display("Failed Test Case 2"); + if (serialDataOut == 0) begin + $display("passed serialOut test 2"); end else begin - $display("Passed Test Case 2"); + $display("failed serialOut test 2"); + $display("%8b", serialDataOut); end - #30 - if (serialDataOut != 0) begin - $display("Failed Test Case 3"); - end - if (parallelDataOut != 8) begin - $display("Failed Test Case 4"); - end*/ - - /*if (parallelLoad == 0) begin - $display("Failed!"); - end - serialDataIn = 0; #10 - serialDataIn = 1; #10 - serialDataIn = 1; #10 - serialDataIn = 1; - #100*/ - //$finish; + // test serialDataOut end endmodule diff --git a/shiftregister.v b/shiftregister.v index 61fa201..a62744f 100644 --- a/shiftregister.v +++ b/shiftregister.v @@ -14,8 +14,8 @@ input peripheralClkEdge, // Edge indicator input parallelLoad, // 1 = Load shift reg with parallelDataIn input [width-1:0] parallelDataIn, // Load shift reg in parallel input serialDataIn, // Load shift reg serially -output reg [width-1:0] parallelDataOut, // Shift reg data contents -output reg serialDataOut // Positive edge synchronized +output [width-1:0] parallelDataOut, // Shift reg data contents +output serialDataOut // Positive edge synchronized ); reg [width-1:0] data; @@ -25,11 +25,12 @@ output reg serialDataOut // Positive edge synchronized data <= parallelDataIn; end else if (peripheralClkEdge) begin - data <= {data << 1, serialDataIn}; + data <= {data[width - 2:0], serialDataIn}; end - serialDataOut <= data[width - 1]; - parallelDataOut <= data; + end + assign serialDataOut = data[width - 1]; + assign parallelDataOut = data; endmodule diff --git a/shiftregister.vcd b/shiftregister.vcd index 8223811..199cf2d 100644 --- a/shiftregister.vcd +++ b/shiftregister.vcd @@ -1,5 +1,5 @@ $date - Wed Oct 25 16:15:27 2017 + Wed Oct 25 20:27:31 2017 $end $version Icarus Verilog @@ -18,40 +18,122 @@ $var reg 1 ' serialDataIn $end $scope module dut $end $var wire 1 ( clk $end $var wire 8 ) parallelDataIn [7:0] $end -$var wire 1 * parallelLoad $end -$var wire 1 + peripheralClkEdge $end -$var wire 1 , serialDataIn $end -$var reg 8 - data [7:0] $end -$var reg 8 . parallelDataOut [7:0] $end -$var reg 1 / serialDataOut $end +$var wire 8 * parallelDataOut [7:0] $end +$var wire 1 + parallelLoad $end +$var wire 1 , peripheralClkEdge $end +$var wire 1 - serialDataIn $end +$var wire 1 " serialDataOut $end +$var reg 8 . data [7:0] $end $upscope $end $upscope $end $enddefinitions $end #0 $dumpvars -x/ -bx . -bx - -x, -x+ -x* +b0 . +x- +0, +1+ +b0 * b0 ) -x( +1( x' -x& -x% +0& +1% b0 $ -x# -x" -bx ! +1# +0" +b0 ! $end +#10 +0# +0( +#20 +b1111 . +b1111 ! +b1111 * +1# +1( +b1111 $ +b1111 ) +#30 +0# +0( +#40 +1" +b11111111 . +b11111111 ! +b11111111 * +1# +1( +b11111111 $ +b11111111 ) +#50 +0# +0( +#60 +1# +1( +b0 $ +b0 ) +0% +0+ +#70 +0# +0( +#90 +0" +b0 . +b0 ! +b0 * +1# +1( +1% +1+ #100 -1' +0# +0( +#110 +b1 . +b1 ! +b1 * +1# +1( +1& 1, +1' +1- +0% +0+ +#115 +0# +0( #120 -0' -0, +b11 . +b11 ! +b11 * +1# +1( +#125 +0# +0( #130 -1' -1, -#250 +b111 . +b111 ! +b111 * +1# +1( +#135 +0# +0( +#140 +b1110 . +b1110 ! +b1110 * +1# +1( +0' +0- +#145 +0# +0( +#150 From 5888a5d4cb450fef04df4b258c996a6f09be97a8 Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 25 Oct 2017 21:53:23 -0400 Subject: [PATCH 19/50] adding report --- Lab-2-Midpoint-Check-In-Report.md | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Lab-2-Midpoint-Check-In-Report.md diff --git a/Lab-2-Midpoint-Check-In-Report.md b/Lab-2-Midpoint-Check-In-Report.md new file mode 100644 index 0000000..3ebcd1e --- /dev/null +++ b/Lab-2-Midpoint-Check-In-Report.md @@ -0,0 +1,55 @@ +# Lab 2 Midpoint Check-In Report +Jonah Spear, David Papp + +# Input Conditioning + +Our waveform illustrates the three desired characteristics: + +![](https://d2mxuefqeaa7sj.cloudfront.net/s_B9532690B10F570C9A4A02C57E09079770E739AAA391501DF085C097B989418B_1508953194069_input_fixed.png) + + +**Input synchronisation:** The conditioned input is synchronised with the noisy input with the clock. This part was already done for us. + +**Input debouncing:** We create a noisy signal with several bounces prior to stabilisation in both the positive and negative directions. It is evident from the waveform image that the conditioned input only changes if the input pin is stable for at least three cycles. Because of this, there is a three cycle delay between when the noisy signal changes to when conditioned registers this change. + +**Edge detection:** It is evident from the waveform image that rising rises for exactly one clock cycle when conditioned switches from 0 to 1. Conversely, falling rises for exactly one clock cycle when conditioned switches from 1 to 0. Rising and falling flip at the exact time that condition flips. + + +**Circuit diagram:** + + + +**Question:** If the main system clock is running at 50MHz, what is the maximum length input glitch that will be suppressed by this design for a `waittime` of 10? Include the analysis in your report. + +With a *waittime* of 10, the noisy signal needs to be steady for 10 cycles before the conditioned input changes. With a 50MHz clock, each cycle takes 2e-8 seconds. Ten cycles will thus take 2e-7 seconds. + + +---------- +# Shift Register + +**Test bench for shiftregister.v:** We tested three properties of our shift register. First, we tested that parallel load was working properly. We confirmed that parallelDataOut was the same as the parallelDataIn when parallel load was enabled. +Next, we confirmed that the shift register advances one position and appends the correct serialDataIn value. We did this by manually setting the peripheralClkEdge and adding ones and zeros in manual clock cycles and verifying parallelDataOut in each iteration. +Finally, we made sure that serialDataOut was correct. This was simple to test, since we essentially just needed to make sure that we were reading the right value. + + + +---------- +# Midpoint + + +Pressing and releasing the button will reset the LEDs to the binary representation of hA5, which is b10101001. + +Switch 0 will provide the serialBitIn. It will update when switch 1 is toggled from 0 to 1. + +Switching switch 1 to from 0 to 1 will trigger a Clk Edge in the shift register, which will cause the register to shift. + + +We will confirm that our FPGA works by first initialising our LEDs to 0. We will then toggle switch 0 to ON, and proceeded to toggle switch 1 off and on several times. This will push a few 1s into our LED queue. We will then toggle switch 0 to OFF. Now, when we toggle switch 1 off and on, it will push 0s into our LED queue. +Finally, we will check that parallel load works as expected. When we press the button, the LEDs are set to the sequence 10101001. + + + +---------- + + + From 65dad5fa480415903937965d45ebfde36051b1e8 Mon Sep 17 00:00:00 2001 From: dpapp Date: Sat, 28 Oct 2017 12:02:23 -0400 Subject: [PATCH 20/50] lab --- dff.v | 25 +++++++++++++++++++++++++ spimemory.v | 11 +++++++++++ 2 files changed, 36 insertions(+) create mode 100644 dff.v diff --git a/dff.v b/dff.v new file mode 100644 index 0000000..f0515c6 --- /dev/null +++ b/dff.v @@ -0,0 +1,25 @@ +// Design +// D flip-flop +module dff (clk, reset, + d, q, qb); + input clk; + input reset; + input d; + output q; + output qb; + + reg q; + + assign qb = ~q; + + always @(posedge clk or posedge reset) + begin + if (reset) begin + // Asynchronous reset when reset goes high + q <= 1'b0; + end else begin + // Assign D to Q on positive clock edge + q <= d; + end + end +endmodule \ No newline at end of file diff --git a/spimemory.v b/spimemory.v index c6ed4f7..ad010cc 100644 --- a/spimemory.v +++ b/spimemory.v @@ -1,6 +1,8 @@ //------------------------------------------------------------------------ // SPI Memory //------------------------------------------------------------------------ +`include "inputconditioner.v" +`include "shiftregister.v" module spiMemory ( @@ -11,7 +13,16 @@ module spiMemory input mosi_pin, // SPI master out slave in output [3:0] leds // LEDs for debugging ) + wire conditionedInput1, conditionedInput2; + wire positiveEdge, negativeEdge; + inputcondition condition1(clk, miso_pin, conditioned, ,); + inputcondition condition1(clk, sclk_pin, , positiveEdge, negativeEdge); + inputcondition condition1(clk, cs_pin, conditionedInput2, , ); + wire parallelOut, serialOut; + shiftregister shiftRegister(clk, positiveEdge, sr_we, parallelDataIn, conditionedInput1, parallelOut, serialOut); + wire q; + dff dFF(clk, serialOut, negativeEdge, q, ); endmodule From 1837ba4ec47e2c712f65e006af39f606ca71e5e7 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sat, 28 Oct 2017 12:04:02 -0400 Subject: [PATCH 21/50] finish midpoint --- ZYBO_Master.xdc | 146 ++++++ midpoint.v | 19 + sim/sim.cache/wt/gui_resources.wdf | 24 + sim/sim.cache/wt/java_command_handlers.wdf | 14 + sim/sim.cache/wt/project.wpc | 4 + sim/sim.cache/wt/synthesis.wdf | 39 ++ sim/sim.cache/wt/synthesis_details.wdf | 3 + sim/sim.cache/wt/webtalk_pa.xml | 64 +++ sim/sim.hw/hw_1/hw.xml | 16 + sim/sim.hw/sim.lpr | 8 + sim/sim.runs/.jobs/vrs_config_1.xml | 5 + sim/sim.runs/.jobs/vrs_config_10.xml | 5 + sim/sim.runs/.jobs/vrs_config_2.xml | 5 + sim/sim.runs/.jobs/vrs_config_3.xml | 5 + sim/sim.runs/.jobs/vrs_config_4.xml | 5 + sim/sim.runs/.jobs/vrs_config_5.xml | 5 + sim/sim.runs/.jobs/vrs_config_6.xml | 5 + sim/sim.runs/.jobs/vrs_config_7.xml | 5 + sim/sim.runs/.jobs/vrs_config_8.xml | 5 + sim/sim.runs/.jobs/vrs_config_9.xml | 5 + .../impl_1/.Vivado_Implementation.queue.rst | 0 sim/sim.runs/impl_1/.init_design.begin.rst | 5 + sim/sim.runs/impl_1/.init_design.end.rst | 0 sim/sim.runs/impl_1/.opt_design.begin.rst | 5 + sim/sim.runs/impl_1/.opt_design.end.rst | 0 sim/sim.runs/impl_1/.place_design.begin.rst | 5 + sim/sim.runs/impl_1/.place_design.end.rst | 0 sim/sim.runs/impl_1/.route_design.begin.rst | 5 + sim/sim.runs/impl_1/.route_design.end.rst | 0 sim/sim.runs/impl_1/.vivado.begin.rst | 10 + sim/sim.runs/impl_1/.vivado.end.rst | 0 .../impl_1/.write_bitstream.begin.rst | 5 + sim/sim.runs/impl_1/.write_bitstream.end.rst | 0 sim/sim.runs/impl_1/ISEWrap.js | 244 ++++++++++ sim/sim.runs/impl_1/ISEWrap.sh | 63 +++ sim/sim.runs/impl_1/gen_run.xml | 104 ++++ sim/sim.runs/impl_1/htr.txt | 9 + sim/sim.runs/impl_1/init_design.pb | Bin 0 -> 1307 bytes sim/sim.runs/impl_1/midpoint.bit | Bin 0 -> 2083844 bytes sim/sim.runs/impl_1/midpoint.tcl | 66 +++ sim/sim.runs/impl_1/midpoint.vdi | 432 +++++++++++++++++ sim/sim.runs/impl_1/midpoint_29201.backup.vdi | 372 ++++++++++++++ sim/sim.runs/impl_1/midpoint_5899.backup.vdi | 372 ++++++++++++++ .../midpoint_clock_utilization_routed.rpt | 154 ++++++ .../impl_1/midpoint_control_sets_placed.rpt | 63 +++ sim/sim.runs/impl_1/midpoint_drc_opted.rpt | 41 ++ sim/sim.runs/impl_1/midpoint_drc_routed.pb | Bin 0 -> 37 bytes sim/sim.runs/impl_1/midpoint_drc_routed.rpt | 41 ++ sim/sim.runs/impl_1/midpoint_drc_routed.rpx | Bin 0 -> 351 bytes sim/sim.runs/impl_1/midpoint_io_placed.rpt | 442 +++++++++++++++++ .../midpoint_methodology_drc_routed.rpt | 175 +++++++ .../midpoint_methodology_drc_routed.rpx | Bin 0 -> 7049 bytes sim/sim.runs/impl_1/midpoint_opt.dcp | Bin 0 -> 214554 bytes sim/sim.runs/impl_1/midpoint_placed.dcp | Bin 0 -> 220534 bytes sim/sim.runs/impl_1/midpoint_power_routed.rpt | 151 ++++++ sim/sim.runs/impl_1/midpoint_power_routed.rpx | Bin 0 -> 17138 bytes .../impl_1/midpoint_power_summary_routed.pb | Bin 0 -> 722 bytes sim/sim.runs/impl_1/midpoint_route_status.pb | Bin 0 -> 43 bytes sim/sim.runs/impl_1/midpoint_route_status.rpt | 11 + sim/sim.runs/impl_1/midpoint_routed.dcp | Bin 0 -> 225597 bytes .../impl_1/midpoint_timing_summary_routed.rpt | 173 +++++++ .../impl_1/midpoint_timing_summary_routed.rpx | Bin 0 -> 6591 bytes .../impl_1/midpoint_utilization_placed.pb | Bin 0 -> 224 bytes .../impl_1/midpoint_utilization_placed.rpt | 201 ++++++++ sim/sim.runs/impl_1/opt_design.pb | Bin 0 -> 7790 bytes sim/sim.runs/impl_1/place_design.pb | Bin 0 -> 13116 bytes sim/sim.runs/impl_1/project.wdf | 31 ++ sim/sim.runs/impl_1/route_design.pb | Bin 0 -> 10895 bytes sim/sim.runs/impl_1/rundef.js | 44 ++ sim/sim.runs/impl_1/runme.bat | 11 + sim/sim.runs/impl_1/runme.log | 430 +++++++++++++++++ sim/sim.runs/impl_1/runme.sh | 43 ++ .../impl_1/usage_statistics_webtalk.html | 456 ++++++++++++++++++ .../impl_1/usage_statistics_webtalk.xml | 404 ++++++++++++++++ sim/sim.runs/impl_1/vivado.jou | 12 + sim/sim.runs/impl_1/vivado.pb | Bin 0 -> 149 bytes sim/sim.runs/impl_1/vivado_29201.backup.jou | 12 + sim/sim.runs/impl_1/vivado_5899.backup.jou | 12 + sim/sim.runs/impl_1/write_bitstream.pb | Bin 0 -> 6204 bytes .../synth_1/.Vivado_Synthesis.queue.rst | 0 .../synth_1/.Xil/midpoint_propImpl.xdc | 25 + sim/sim.runs/synth_1/.vivado.begin.rst | 5 + sim/sim.runs/synth_1/.vivado.end.rst | 0 sim/sim.runs/synth_1/ISEWrap.js | 244 ++++++++++ sim/sim.runs/synth_1/ISEWrap.sh | 63 +++ sim/sim.runs/synth_1/gen_run.xml | 44 ++ sim/sim.runs/synth_1/htr.txt | 9 + sim/sim.runs/synth_1/midpoint.dcp | Bin 0 -> 12260 bytes sim/sim.runs/synth_1/midpoint.tcl | 35 ++ sim/sim.runs/synth_1/midpoint.vds | 289 +++++++++++ .../synth_1/midpoint_utilization_synth.pb | Bin 0 -> 224 bytes .../synth_1/midpoint_utilization_synth.rpt | 174 +++++++ sim/sim.runs/synth_1/project.wdf | 31 ++ sim/sim.runs/synth_1/rundef.js | 40 ++ sim/sim.runs/synth_1/runme.bat | 11 + sim/sim.runs/synth_1/runme.log | 288 +++++++++++ sim/sim.runs/synth_1/runme.sh | 39 ++ sim/sim.runs/synth_1/vivado.jou | 12 + sim/sim.runs/synth_1/vivado.pb | Bin 0 -> 31606 bytes sim/sim.xpr | 144 ++++++ vivado.jou | 57 +++ vivado.log | 144 ++++++ 102 files changed, 6645 insertions(+) create mode 100644 ZYBO_Master.xdc create mode 100644 midpoint.v create mode 100644 sim/sim.cache/wt/gui_resources.wdf create mode 100644 sim/sim.cache/wt/java_command_handlers.wdf create mode 100644 sim/sim.cache/wt/project.wpc create mode 100644 sim/sim.cache/wt/synthesis.wdf create mode 100644 sim/sim.cache/wt/synthesis_details.wdf create mode 100644 sim/sim.cache/wt/webtalk_pa.xml create mode 100644 sim/sim.hw/hw_1/hw.xml create mode 100644 sim/sim.hw/sim.lpr create mode 100644 sim/sim.runs/.jobs/vrs_config_1.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_10.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_2.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_3.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_4.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_5.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_6.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_7.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_8.xml create mode 100644 sim/sim.runs/.jobs/vrs_config_9.xml create mode 100644 sim/sim.runs/impl_1/.Vivado_Implementation.queue.rst create mode 100644 sim/sim.runs/impl_1/.init_design.begin.rst create mode 100644 sim/sim.runs/impl_1/.init_design.end.rst create mode 100644 sim/sim.runs/impl_1/.opt_design.begin.rst create mode 100644 sim/sim.runs/impl_1/.opt_design.end.rst create mode 100644 sim/sim.runs/impl_1/.place_design.begin.rst create mode 100644 sim/sim.runs/impl_1/.place_design.end.rst create mode 100644 sim/sim.runs/impl_1/.route_design.begin.rst create mode 100644 sim/sim.runs/impl_1/.route_design.end.rst create mode 100644 sim/sim.runs/impl_1/.vivado.begin.rst create mode 100644 sim/sim.runs/impl_1/.vivado.end.rst create mode 100644 sim/sim.runs/impl_1/.write_bitstream.begin.rst create mode 100644 sim/sim.runs/impl_1/.write_bitstream.end.rst create mode 100755 sim/sim.runs/impl_1/ISEWrap.js create mode 100755 sim/sim.runs/impl_1/ISEWrap.sh create mode 100644 sim/sim.runs/impl_1/gen_run.xml create mode 100644 sim/sim.runs/impl_1/htr.txt create mode 100644 sim/sim.runs/impl_1/init_design.pb create mode 100644 sim/sim.runs/impl_1/midpoint.bit create mode 100644 sim/sim.runs/impl_1/midpoint.tcl create mode 100644 sim/sim.runs/impl_1/midpoint.vdi create mode 100644 sim/sim.runs/impl_1/midpoint_29201.backup.vdi create mode 100644 sim/sim.runs/impl_1/midpoint_5899.backup.vdi create mode 100644 sim/sim.runs/impl_1/midpoint_clock_utilization_routed.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_control_sets_placed.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_drc_opted.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_drc_routed.pb create mode 100644 sim/sim.runs/impl_1/midpoint_drc_routed.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_drc_routed.rpx create mode 100644 sim/sim.runs/impl_1/midpoint_io_placed.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_methodology_drc_routed.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_methodology_drc_routed.rpx create mode 100644 sim/sim.runs/impl_1/midpoint_opt.dcp create mode 100644 sim/sim.runs/impl_1/midpoint_placed.dcp create mode 100644 sim/sim.runs/impl_1/midpoint_power_routed.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_power_routed.rpx create mode 100644 sim/sim.runs/impl_1/midpoint_power_summary_routed.pb create mode 100644 sim/sim.runs/impl_1/midpoint_route_status.pb create mode 100644 sim/sim.runs/impl_1/midpoint_route_status.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_routed.dcp create mode 100644 sim/sim.runs/impl_1/midpoint_timing_summary_routed.rpt create mode 100644 sim/sim.runs/impl_1/midpoint_timing_summary_routed.rpx create mode 100644 sim/sim.runs/impl_1/midpoint_utilization_placed.pb create mode 100644 sim/sim.runs/impl_1/midpoint_utilization_placed.rpt create mode 100644 sim/sim.runs/impl_1/opt_design.pb create mode 100644 sim/sim.runs/impl_1/place_design.pb create mode 100644 sim/sim.runs/impl_1/project.wdf create mode 100644 sim/sim.runs/impl_1/route_design.pb create mode 100644 sim/sim.runs/impl_1/rundef.js create mode 100644 sim/sim.runs/impl_1/runme.bat create mode 100644 sim/sim.runs/impl_1/runme.log create mode 100755 sim/sim.runs/impl_1/runme.sh create mode 100644 sim/sim.runs/impl_1/usage_statistics_webtalk.html create mode 100644 sim/sim.runs/impl_1/usage_statistics_webtalk.xml create mode 100644 sim/sim.runs/impl_1/vivado.jou create mode 100644 sim/sim.runs/impl_1/vivado.pb create mode 100644 sim/sim.runs/impl_1/vivado_29201.backup.jou create mode 100644 sim/sim.runs/impl_1/vivado_5899.backup.jou create mode 100644 sim/sim.runs/impl_1/write_bitstream.pb create mode 100644 sim/sim.runs/synth_1/.Vivado_Synthesis.queue.rst create mode 100644 sim/sim.runs/synth_1/.Xil/midpoint_propImpl.xdc create mode 100644 sim/sim.runs/synth_1/.vivado.begin.rst create mode 100644 sim/sim.runs/synth_1/.vivado.end.rst create mode 100755 sim/sim.runs/synth_1/ISEWrap.js create mode 100755 sim/sim.runs/synth_1/ISEWrap.sh create mode 100644 sim/sim.runs/synth_1/gen_run.xml create mode 100644 sim/sim.runs/synth_1/htr.txt create mode 100644 sim/sim.runs/synth_1/midpoint.dcp create mode 100644 sim/sim.runs/synth_1/midpoint.tcl create mode 100644 sim/sim.runs/synth_1/midpoint.vds create mode 100644 sim/sim.runs/synth_1/midpoint_utilization_synth.pb create mode 100644 sim/sim.runs/synth_1/midpoint_utilization_synth.rpt create mode 100644 sim/sim.runs/synth_1/project.wdf create mode 100644 sim/sim.runs/synth_1/rundef.js create mode 100644 sim/sim.runs/synth_1/runme.bat create mode 100644 sim/sim.runs/synth_1/runme.log create mode 100755 sim/sim.runs/synth_1/runme.sh create mode 100644 sim/sim.runs/synth_1/vivado.jou create mode 100644 sim/sim.runs/synth_1/vivado.pb create mode 100644 sim/sim.xpr create mode 100644 vivado.jou create mode 100644 vivado.log diff --git a/ZYBO_Master.xdc b/ZYBO_Master.xdc new file mode 100644 index 0000000..2375822 --- /dev/null +++ b/ZYBO_Master.xdc @@ -0,0 +1,146 @@ +## This file is a general .xdc for the ZYBO Rev B board +## To use it in a project: +## - uncomment the lines corresponding to used pins +## - rename the used signals according to the project + + +##Clock signal +set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L11P_T1_SRCC_35 Sch=sysclk +#create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports { clk }]; + + +##Switches +set_property -dict { PACKAGE_PIN G15 IOSTANDARD LVCMOS33 } [get_ports { sw[0] }]; #IO_L19N_T3_VREF_35 Sch=SW0 +set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { sw[1] }]; #IO_L24P_T3_34 Sch=SW1 +#set_property -dict { PACKAGE_PIN W13 IOSTANDARD LVCMOS33 } [get_ports { sw[2] }]; #IO_L4N_T0_34 Sch=SW2 +#set_property -dict { PACKAGE_PIN T16 IOSTANDARD LVCMOS33 } [get_ports { sw[3] }]; #IO_L9P_T1_DQS_34 Sch=SW3 + + +##Buttons +set_property -dict { PACKAGE_PIN R18 IOSTANDARD LVCMOS33 } [get_ports { btn }]; #IO_L20N_T3_34 Sch=BTN0 +#set_property -dict { PACKAGE_PIN P16 IOSTANDARD LVCMOS33 } [get_ports { btn[1] }]; #IO_L24N_T3_34 Sch=BTN1 +#set_property -dict { PACKAGE_PIN V16 IOSTANDARD LVCMOS33 } [get_ports { btn[2] }]; #IO_L18P_T2_34 Sch=BTN2 +#set_property -dict { PACKAGE_PIN Y16 IOSTANDARD LVCMOS33 } [get_ports { btn[3] }]; #IO_L7P_T1_34 Sch=BTN3 + + +##LEDs +#set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { led[0] }]; #IO_L23P_T3_35 Sch=LED0 +#set_property -dict { PACKAGE_PIN M15 IOSTANDARD LVCMOS33 } [get_ports { led[1] }]; #IO_L23N_T3_35 Sch=LED1 +#set_property -dict { PACKAGE_PIN G14 IOSTANDARD LVCMOS33 } [get_ports { led[2] }]; #IO_0_35=Sch=LED2 +#set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 } [get_ports { led[3] }]; #IO_L3N_T0_DQS_AD1N_35 Sch=LED3 + + +##I2S Audio Codec +#set_property -dict { PACKAGE_PIN K18 IOSTANDARD LVCMOS33 } [get_ports ac_bclk]; #IO_L12N_T1_MRCC_35 Sch=AC_BCLK +#set_property -dict { PACKAGE_PIN T19 IOSTANDARD LVCMOS33 } [get_ports ac_mclk]; #IO_25_34 Sch=AC_MCLK +#set_property -dict { PACKAGE_PIN P18 IOSTANDARD LVCMOS33 } [get_ports ac_muten]; #IO_L23N_T3_34 Sch=AC_MUTEN +#set_property -dict { PACKAGE_PIN M17 IOSTANDARD LVCMOS33 } [get_ports ac_pbdat]; #IO_L8P_T1_AD10P_35 Sch=AC_PBDAT +#set_property -dict { PACKAGE_PIN L17 IOSTANDARD LVCMOS33 } [get_ports ac_pblrc]; #IO_L11N_T1_SRCC_35 Sch=AC_PBLRC +#set_property -dict { PACKAGE_PIN K17 IOSTANDARD LVCMOS33 } [get_ports ac_recdat]; #IO_L12P_T1_MRCC_35 Sch=AC_RECDAT +#set_property -dict { PACKAGE_PIN M18 IOSTANDARD LVCMOS33 } [get_ports ac_reclrc]; #IO_L8N_T1_AD10N_35 Sch=AC_RECLRC + + +##Audio Codec/external EEPROM IIC bus +#set_property -dict { PACKAGE_PIN N18 IOSTANDARD LVCMOS33 } [get_ports ac_scl]; #IO_L13P_T2_MRCC_34 Sch=AC_SCL +#set_property -dict { PACKAGE_PIN N17 IOSTANDARD LVCMOS33 } [get_ports ac_sda]; #IO_L23P_T3_34 Sch=AC_SDA + + +##Additional Ethernet signals +#set_property -dict { PACKAGE_PIN F16 IOSTANDARD LVCMOS33 } [get_ports eth_int_b]; #IO_L6P_T0_35 Sch=ETH_INT_B +#set_property -dict { PACKAGE_PIN E17 IOSTANDARD LVCMOS33 } [get_ports eth_rst_b]; #IO_L3P_T0_DQS_AD1P_35 Sch=ETH_RST_B + + +##HDMI Signals +#set_property -dict { PACKAGE_PIN H17 IOSTANDARD TMDS_33 } [get_ports hdmi_clk_n]; #IO_L13N_T2_MRCC_35 Sch=HDMI_CLK_N +#set_property -dict { PACKAGE_PIN H16 IOSTANDARD TMDS_33 } [get_ports hdmi_clk_p]; #IO_L13P_T2_MRCC_35 Sch=HDMI_CLK_P +#set_property -dict { PACKAGE_PIN D20 IOSTANDARD TMDS_33 } [get_ports { hdmi_d_n[0] }]; #IO_L4N_T0_35 Sch=HDMI_D0_N +#set_property -dict { PACKAGE_PIN D19 IOSTANDARD TMDS_33 } [get_ports { hdmi_d_p[0] }]; #IO_L4P_T0_35 Sch=HDMI_D0_P +#set_property -dict { PACKAGE_PIN B20 IOSTANDARD TMDS_33 } [get_ports { hdmi_d_n[1] }]; #IO_L1N_T0_AD0N_35 Sch=HDMI_D1_N +#set_property -dict { PACKAGE_PIN C20 IOSTANDARD TMDS_33 } [get_ports { hdmi_d_p[1] }]; #IO_L1P_T0_AD0P_35 Sch=HDMI_D1_P +#set_property -dict { PACKAGE_PIN A20 IOSTANDARD TMDS_33 } [get_ports { hdmi_d_n[2] }]; #IO_L2N_T0_AD8N_35 Sch=HDMI_D2_N +#set_property -dict { PACKAGE_PIN B19 IOSTANDARD TMDS_33 } [get_ports { hdmi_d_p[2] }]; #IO_L2P_T0_AD8P_35 Sch=HDMI_D2_P +#set_property -dict { PACKAGE_PIN E19 IOSTANDARD LVCMOS33 } [get_ports hdmi_cec]; #IO_L5N_T0_AD9N_35 Sch=HDMI_CEC +#set_property -dict { PACKAGE_PIN E18 IOSTANDARD LVCMOS33 } [get_ports hdmi_hpd]; #IO_L5P_T0_AD9P_35 Sch=HDMI_HPD +#set_property -dict { PACKAGE_PIN F17 IOSTANDARD LVCMOS33 } [get_ports hdmi_out_en]; #IO_L6N_T0_VREF_35 Sch=HDMI_OUT_EN +#set_property -dict { PACKAGE_PIN G17 IOSTANDARD LVCMOS33 } [get_ports hdmi_scl]; #IO_L16P_T2_35 Sch=HDMI_SCL +#set_property -dict { PACKAGE_PIN G18 IOSTANDARD LVCMOS33 } [get_ports hdmi_sda]; #IO_L16N_T2_35 Sch=HDMI_SDA + + +##Pmod Header JA (XADC) +#set_property -dict { PACKAGE_PIN N15 IOSTANDARD LVCMOS33 } [get_ports { ja_p[0] }]; #IO_L21P_T3_DQS_AD14P_35 Sch=JA1_R_p +#set_property -dict { PACKAGE_PIN L14 IOSTANDARD LVCMOS33 } [get_ports { ja_p[1] }]; #IO_L22P_T3_AD7P_35 Sch=JA2_R_P +#set_property -dict { PACKAGE_PIN K16 IOSTANDARD LVCMOS33 } [get_ports { ja_p[2] }]; #IO_L24P_T3_AD15P_35 Sch=JA3_R_P +#set_property -dict { PACKAGE_PIN K14 IOSTANDARD LVCMOS33 } [get_ports { ja_p[3] }]; #IO_L20P_T3_AD6P_35 Sch=JA4_R_P +#set_property -dict { PACKAGE_PIN N16 IOSTANDARD LVCMOS33 } [get_ports { ja_n[0] }]; #IO_L21N_T3_DQS_AD14N_35 Sch=JA1_R_N +#set_property -dict { PACKAGE_PIN L15 IOSTANDARD LVCMOS33 } [get_ports { ja_n[1] }]; #IO_L22N_T3_AD7N_35 Sch=JA2_R_N +#set_property -dict { PACKAGE_PIN J16 IOSTANDARD LVCMOS33 } [get_ports { ja_n[2] }]; #IO_L24N_T3_AD15N_35 Sch=JA3_R_N +#set_property -dict { PACKAGE_PIN J14 IOSTANDARD LVCMOS33 } [get_ports { ja_n[3] }]; #IO_L20N_T3_AD6N_35 Sch=JA4_R_N + + +##Pmod Header JB +#set_property -dict { PACKAGE_PIN T20 IOSTANDARD LVCMOS33 } [get_ports { jb_p[0] }]; #IO_L15P_T2_DQS_34 Sch=JB1_p +#set_property -dict { PACKAGE_PIN U20 IOSTANDARD LVCMOS33 } [get_ports { jb_n[0] }]; #IO_L15N_T2_DQS_34 Sch=JB1_N +#set_property -dict { PACKAGE_PIN V20 IOSTANDARD LVCMOS33 } [get_ports { jb_p[1] }]; #IO_L16P_T2_34 Sch=JB2_P +#set_property -dict { PACKAGE_PIN W20 IOSTANDARD LVCMOS33 } [get_ports { jb_n[1] }]; #IO_L16N_T2_34 Sch=JB2_N +#set_property -dict { PACKAGE_PIN Y18 IOSTANDARD LVCMOS33 } [get_ports { jb_p[2] }]; #IO_L17P_T2_34 Sch=JB3_P +#set_property -dict { PACKAGE_PIN Y19 IOSTANDARD LVCMOS33 } [get_ports { jb_n[2] }]; #IO_L17N_T2_34 Sch=JB3_N +#set_property -dict { PACKAGE_PIN W18 IOSTANDARD LVCMOS33 } [get_ports { jb_p[3] }]; #IO_L22P_T3_34 Sch=JB4_P +#set_property -dict { PACKAGE_PIN W19 IOSTANDARD LVCMOS33 } [get_ports { jb_n[3] }]; #IO_L22N_T3_34 Sch=JB4_N + + +##Pmod Header JC +#set_property -dict { PACKAGE_PIN V15 IOSTANDARD LVCMOS33 } [get_ports { jc_p[0] }]; #IO_L10P_T1_34 Sch=JC1_P +#set_property -dict { PACKAGE_PIN W15 IOSTANDARD LVCMOS33 } [get_ports { jc_n[0] }]; #IO_L10N_T1_34 Sch=JC1_N +#set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { jc_p[1] }]; #IO_L1P_T0_34 Sch=JC2_P +#set_property -dict { PACKAGE_PIN T10 IOSTANDARD LVCMOS33 } [get_ports { jc_n[1] }]; #IO_L1N_T0_34 Sch=JC2_N +#set_property -dict { PACKAGE_PIN W14 IOSTANDARD LVCMOS33 } [get_ports { jc_p[2] }]; #IO_L8P_T1_34 Sch=JC3_P +#set_property -dict { PACKAGE_PIN Y14 IOSTANDARD LVCMOS33 } [get_ports { jc_n[2] }]; #IO_L8N_T1_34 Sch=JC3_N +#set_property -dict { PACKAGE_PIN T12 IOSTANDARD LVCMOS33 } [get_ports { jc_p[3] }]; #IO_L2P_T0_34 Sch=JC4_P +#set_property -dict { PACKAGE_PIN U12 IOSTANDARD LVCMOS33 } [get_ports { jc_n[3] }]; #IO_L2N_T0_34 Sch=JC4_N + + +##Pmod Header JD +#set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { jd_p[0] }]; #IO_L5P_T0_34 Sch=JD1_P +#set_property -dict { PACKAGE_PIN T15 IOSTANDARD LVCMOS33 } [get_ports { jd_n[0] }]; #IO_L5N_T0_34 Sch=JD1_N +#set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { jd_p[1] }]; #IO_L6P_T0_34 Sch=JD2_P +#set_property -dict { PACKAGE_PIN R14 IOSTANDARD LVCMOS33 } [get_ports { jd_n[1] }]; #IO_L6N_T0_VREF_34 Sch=JD2_N +#set_property -dict { PACKAGE_PIN U14 IOSTANDARD LVCMOS33 } [get_ports { jd_p[2] }]; #IO_L11P_T1_SRCC_34 Sch=JD3_P +#set_property -dict { PACKAGE_PIN U15 IOSTANDARD LVCMOS33 } [get_ports { jd_n[2] }]; #IO_L11N_T1_SRCC_34 Sch=JD3_N +#set_property -dict { PACKAGE_PIN V17 IOSTANDARD LVCMOS33 } [get_ports { jd_p[3] }]; #IO_L21P_T3_DQS_34 Sch=JD4_P +#set_property -dict { PACKAGE_PIN V18 IOSTANDARD LVCMOS33 } [get_ports { jd_n[3] }]; #IO_L21N_T3_DQS_34 Sch=JD4_N + + +##Pmod Header JE +set_property -dict { PACKAGE_PIN V12 IOSTANDARD LVCMOS33 } [get_ports { je[0] }]; #IO_L4P_T0_34 Sch=JE1 +set_property -dict { PACKAGE_PIN W16 IOSTANDARD LVCMOS33 } [get_ports { je[1] }]; #IO_L18N_T2_34 Sch=JE2 +set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports { je[2] }]; #IO_25_35 Sch=JE3 +set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { je[3] }]; #IO_L19P_T3_35 Sch=JE4 +set_property -dict { PACKAGE_PIN V13 IOSTANDARD LVCMOS33 } [get_ports { je[4] }]; #IO_L3N_T0_DQS_34 Sch=JE7 +set_property -dict { PACKAGE_PIN U17 IOSTANDARD LVCMOS33 } [get_ports { je[5] }]; #IO_L9N_T1_DQS_34 Sch=JE8 +set_property -dict { PACKAGE_PIN T17 IOSTANDARD LVCMOS33 } [get_ports { je[6] }]; #IO_L20P_T3_34 Sch=JE9 +set_property -dict { PACKAGE_PIN Y17 IOSTANDARD LVCMOS33 } [get_ports { je[7] }]; #IO_L7N_T1_34 Sch=JE10 + + +##USB-OTG overcurrent detect pin +#set_property -dict { PACKAGE_PIN U13 IOSTANDARD LVCMOS33 } [get_ports otg_oc]; #IO_L3P_T0_DQS_PUDC_B_34 Sch=OTG_OC + + +##VGA Connector +#set_property -dict { PACKAGE_PIN M19 IOSTANDARD LVCMOS33 } [get_ports { vga_r[0] }]; #IO_L7P_T1_AD2P_35 Sch=VGA_R1 +#set_property -dict { PACKAGE_PIN L20 IOSTANDARD LVCMOS33 } [get_ports { vga_r[1] }]; #IO_L9N_T1_DQS_AD3N_35 Sch=VGA_R2 +#set_property -dict { PACKAGE_PIN J20 IOSTANDARD LVCMOS33 } [get_ports { vga_r[2] }]; #IO_L17P_T2_AD5P_35 Sch=VGA_R3 +#set_property -dict { PACKAGE_PIN G20 IOSTANDARD LVCMOS33 } [get_ports { vga_r[3] }]; #IO_L18N_T2_AD13N_35 Sch=VGA_R4 +#set_property -dict { PACKAGE_PIN F19 IOSTANDARD LVCMOS33 } [get_ports { vga_r[4] }]; #IO_L15P_T2_DQS_AD12P_35 Sch=VGA_R5 +#set_property -dict { PACKAGE_PIN H18 IOSTANDARD LVCMOS33 } [get_ports { vga_g[0] }]; #IO_L14N_T2_AD4N_SRCC_35 Sch=VGA_G0 +#set_property -dict { PACKAGE_PIN N20 IOSTANDARD LVCMOS33 } [get_ports { vga_g[1] }]; #IO_L14P_T2_SRCC_34 Sch=VGA_G1 +#set_property -dict { PACKAGE_PIN L19 IOSTANDARD LVCMOS33 } [get_ports { vga_g[2] }]; #IO_L9P_T1_DQS_AD3P_35 Sch=VGA_G2 +#set_property -dict { PACKAGE_PIN J19 IOSTANDARD LVCMOS33 } [get_ports { vga_g[3] }]; #IO_L10N_T1_AD11N_35 Sch=VGA_G3 +#set_property -dict { PACKAGE_PIN H20 IOSTANDARD LVCMOS33 } [get_ports { vga_g[4] }]; #IO_L17N_T2_AD5N_35 Sch=VGA_G4 +#set_property -dict { PACKAGE_PIN F20 IOSTANDARD LVCMOS33 } [get_ports { vga_g[5] }]; #IO_L15N_T2_DQS_AD12N_35 Sch=VGA=G5 +#set_property -dict { PACKAGE_PIN P20 IOSTANDARD LVCMOS33 } [get_ports { vga_b[0] }]; #IO_L14N_T2_SRCC_34 Sch=VGA_B1 +#set_property -dict { PACKAGE_PIN M20 IOSTANDARD LVCMOS33 } [get_ports { vga_b[1] }]; #IO_L7N_T1_AD2N_35 Sch=VGA_B2 +#set_property -dict { PACKAGE_PIN K19 IOSTANDARD LVCMOS33 } [get_ports { vga_b[2] }]; #IO_L10P_T1_AD11P_35 Sch=VGA_B3 +#set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { vga_b[3] }]; #IO_L14P_T2_AD4P_SRCC_35 Sch=VGA_B4 +#set_property -dict { PACKAGE_PIN G19 IOSTANDARD LVCMOS33 } [get_ports { vga_b[4] }]; #IO_L18P_T2_AD13P_35 Sch=VGA_B5 +#set_property -dict { PACKAGE_PIN P19 IOSTANDARD LVCMOS33 } [get_ports vga_hs]; #IO_L13N_T2_MRCC_34 Sch=VGA_HS +#set_property -dict { PACKAGE_PIN R19 IOSTANDARD LVCMOS33 } [get_ports vga_vs]; #IO_0_34 Sch=VGA_VS diff --git a/midpoint.v b/midpoint.v new file mode 100644 index 0000000..cf4071b --- /dev/null +++ b/midpoint.v @@ -0,0 +1,19 @@ +// midpoint tests the + +`include "inputconditioner.v" +`include "shiftregister.v" + +module midpoint +( +input clk, +input btn, +input [1:0] sw, +output [7:0] je +); + wire neg_edg, pos_edg, srl_in; + inputconditioner i1 (clk, btn, , , neg_edg); + inputconditioner i2 (clk, sw[0], srl_in, , ); + inputconditioner i3 (clk, sw[1], , pos_edg, ); + + shiftregister shft(clk, pos_edg, neg_edg, 8'hA5, srl_in, je, ); +endmodule diff --git a/sim/sim.cache/wt/gui_resources.wdf b/sim/sim.cache/wt/gui_resources.wdf new file mode 100644 index 0000000..3e30634 --- /dev/null +++ b/sim/sim.cache/wt/gui_resources.wdf @@ -0,0 +1,24 @@ +version:1 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:61646473726377697a6172645f737065636966795f68646c5f6e65746c6973745f626c6f636b5f64657369676e:32:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:61646473726377697a6172645f737065636966795f6f725f6372656174655f636f6e73747261696e745f66696c6573:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:626173656469616c6f675f63616e63656c:32:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:626173656469616c6f675f6f6b:3432:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:636d646d73676469616c6f675f6f6b:34:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:636f6e73747261696e747363686f6f73657270616e656c5f6164645f6578697374696e675f6f725f6372656174655f6e65775f636f6e73747261696e7473:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:636f6e73747261696e747363686f6f73657270616e656c5f6164645f66696c6573:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:66696c6573657470616e656c5f66696c655f7365745f70616e656c5f74726565:3130:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:666c6f776e6176696761746f727472656570616e656c5f666c6f775f6e6176696761746f725f74726565:3137:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:67657474696e6773746172746564766965775f6372656174655f6e65775f70726f6a656374:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:68636f6465656469746f725f7365617263685f746578745f636f6d626f5f626f78:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:68617264776172657472656570616e656c5f68617264776172655f747265655f7461626c65:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:6d73677472656570616e656c5f6d6573736167655f766965775f74726565:38:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:7061636f6d6d616e646e616d65735f6164645f736f7572636573:33:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:7061636f6d6d616e646e616d65735f6175746f5f636f6e6e6563745f746172676574:32:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:7061636f6d6d616e646e616d65735f6f70656e5f68617264776172655f6d616e61676572:32:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:706176696577735f646576696365:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:7061727463686f6f7365725f626f61726473:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:7061727463686f6f7365725f7061727473:32:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:70726f6772616d667067616469616c6f675f70726f6772616d:34:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:70726f6a6563746e616d6563686f6f7365725f70726f6a6563745f6e616d65:31:00:00 +70726f6a656374:76697661646f5f75736167655c6775695f7265736f7572636573:73726363686f6f73657270616e656c5f6164645f68646c5f616e645f6e65746c6973745f66696c65735f746f5f796f75725f70726f6a656374:31:00:00 +eof:1335099877 diff --git a/sim/sim.cache/wt/java_command_handlers.wdf b/sim/sim.cache/wt/java_command_handlers.wdf new file mode 100644 index 0000000..c69ede2 --- /dev/null +++ b/sim/sim.cache/wt/java_command_handlers.wdf @@ -0,0 +1,14 @@ +version:1 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:616464736f7572636573:33:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6175746f636f6e6e656374746172676574:31:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6c61756e636870726f6772616d66706761:32:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6e657770726f6a656374:31:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6f70656e68617264776172656d616e61676572:34:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:70726f6772616d646576696365:32:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:72756e62697467656e:32:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:72756e696d706c656d656e746174696f6e:34:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:72756e73796e746865736973:36:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:73686f7776696577:32:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:766965777461736b696d706c656d656e746174696f6e:32:00:00 +70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:766965777461736b70726f6a6563746d616e61676572:31:00:00 +eof:1308606398 diff --git a/sim/sim.cache/wt/project.wpc b/sim/sim.cache/wt/project.wpc new file mode 100644 index 0000000..0a638ea --- /dev/null +++ b/sim/sim.cache/wt/project.wpc @@ -0,0 +1,4 @@ +version:1 +57656254616c6b5472616e736d697373696f6e417474656d70746564:2 +6d6f64655f636f756e7465727c4755494d6f6465:1 +eof: diff --git a/sim/sim.cache/wt/synthesis.wdf b/sim/sim.cache/wt/synthesis.wdf new file mode 100644 index 0000000..15ebfb4 --- /dev/null +++ b/sim/sim.cache/wt/synthesis.wdf @@ -0,0 +1,39 @@ +version:1 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d70617274:7863377a303130636c673430302d31:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e616d65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d746f70:6d6964706f696e74:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d696e636c7564655f64697273:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d67656e65726963:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d766572696c6f675f646566696e65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636f6e737472736574:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d7365755f70726f74656374:64656661756c743a3a6e6f6e65:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d666c617474656e5f686965726172636879:64656661756c743a3a72656275696c74:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d67617465645f636c6f636b5f636f6e76657273696f6e:64656661756c743a3a6f6666:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d646972656374697665:64656661756c743a3a64656661756c74:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c5f736b69705f6970:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c5f736b69705f636f6e73747261696e7473:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f6c63:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d62756667:64656661756c743a3a3132:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d66616e6f75745f6c696d6974:64656661756c743a3a3130303030:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73687265675f6d696e5f73697a65:64656661756c743a3a33:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d6f6465:64656661756c743a3a64656661756c74:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d66736d5f65787472616374696f6e:64656661756c743a3a6175746f:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6b6565705f6571756976616c656e745f726567697374657273:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d7265736f757263655f73686172696e67:64656661756c743a3a6175746f:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636173636164655f647370:64656661756c743a3a6175746f:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636f6e74726f6c5f7365745f6f70745f7468726573686f6c64:64656661756c743a3a6175746f:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f6272616d:64656661756c743a3a2d31:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f7572616d:64656661756c743a3a2d31:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f647370:64656661756c743a3a2d31:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f6272616d5f636173636164655f686569676874:64656661756c743a3a2d31:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f7572616d5f636173636164655f686569676874:64656661756c743a3a2d31:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d726574696d696e67:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f73726c65787472616374:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d617373657274:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f74696d696e675f64726976656e:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73666375:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00 +73796e746865736973:73796e7468657369735c7573616765:656c6170736564:30303a30303a313873:00:00 +73796e746865736973:73796e7468657369735c7573616765:6d656d6f72795f7065616b:313439342e3338374d42:00:00 +73796e746865736973:73796e7468657369735c7573616765:6d656d6f72795f6761696e:3430352e3335324d42:00:00 +eof:452193476 diff --git a/sim/sim.cache/wt/synthesis_details.wdf b/sim/sim.cache/wt/synthesis_details.wdf new file mode 100644 index 0000000..78f8d66 --- /dev/null +++ b/sim/sim.cache/wt/synthesis_details.wdf @@ -0,0 +1,3 @@ +version:1 +73796e746865736973:73796e7468657369735c7573616765:686c735f6970:30:00:00 +eof:2511430288 diff --git a/sim/sim.cache/wt/webtalk_pa.xml b/sim/sim.cache/wt/webtalk_pa.xml new file mode 100644 index 0000000..6aa0e9f --- /dev/null +++ b/sim/sim.cache/wt/webtalk_pa.xml @@ -0,0 +1,64 @@ + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
diff --git a/sim/sim.hw/hw_1/hw.xml b/sim/sim.hw/hw_1/hw.xml new file mode 100644 index 0000000..4253063 --- /dev/null +++ b/sim/sim.hw/hw_1/hw.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/sim/sim.hw/sim.lpr b/sim/sim.hw/sim.lpr new file mode 100644 index 0000000..e87eed2 --- /dev/null +++ b/sim/sim.hw/sim.lpr @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_1.xml b/sim/sim.runs/.jobs/vrs_config_1.xml new file mode 100644 index 0000000..19ce55a --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_10.xml b/sim/sim.runs/.jobs/vrs_config_10.xml new file mode 100644 index 0000000..038c596 --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_10.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_2.xml b/sim/sim.runs/.jobs/vrs_config_2.xml new file mode 100644 index 0000000..0ea1672 --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_3.xml b/sim/sim.runs/.jobs/vrs_config_3.xml new file mode 100644 index 0000000..19ce55a --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_3.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_4.xml b/sim/sim.runs/.jobs/vrs_config_4.xml new file mode 100644 index 0000000..0ea1672 --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_4.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_5.xml b/sim/sim.runs/.jobs/vrs_config_5.xml new file mode 100644 index 0000000..19ce55a --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_5.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_6.xml b/sim/sim.runs/.jobs/vrs_config_6.xml new file mode 100644 index 0000000..0ea1672 --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_6.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_7.xml b/sim/sim.runs/.jobs/vrs_config_7.xml new file mode 100644 index 0000000..038c596 --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_7.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_8.xml b/sim/sim.runs/.jobs/vrs_config_8.xml new file mode 100644 index 0000000..19ce55a --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_8.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/.jobs/vrs_config_9.xml b/sim/sim.runs/.jobs/vrs_config_9.xml new file mode 100644 index 0000000..0ea1672 --- /dev/null +++ b/sim/sim.runs/.jobs/vrs_config_9.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/impl_1/.Vivado_Implementation.queue.rst b/sim/sim.runs/impl_1/.Vivado_Implementation.queue.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/impl_1/.init_design.begin.rst b/sim/sim.runs/impl_1/.init_design.begin.rst new file mode 100644 index 0000000..db2a9e9 --- /dev/null +++ b/sim/sim.runs/impl_1/.init_design.begin.rst @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/impl_1/.init_design.end.rst b/sim/sim.runs/impl_1/.init_design.end.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/impl_1/.opt_design.begin.rst b/sim/sim.runs/impl_1/.opt_design.begin.rst new file mode 100644 index 0000000..db2a9e9 --- /dev/null +++ b/sim/sim.runs/impl_1/.opt_design.begin.rst @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/impl_1/.opt_design.end.rst b/sim/sim.runs/impl_1/.opt_design.end.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/impl_1/.place_design.begin.rst b/sim/sim.runs/impl_1/.place_design.begin.rst new file mode 100644 index 0000000..db2a9e9 --- /dev/null +++ b/sim/sim.runs/impl_1/.place_design.begin.rst @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/impl_1/.place_design.end.rst b/sim/sim.runs/impl_1/.place_design.end.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/impl_1/.route_design.begin.rst b/sim/sim.runs/impl_1/.route_design.begin.rst new file mode 100644 index 0000000..db2a9e9 --- /dev/null +++ b/sim/sim.runs/impl_1/.route_design.begin.rst @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/impl_1/.route_design.end.rst b/sim/sim.runs/impl_1/.route_design.end.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/impl_1/.vivado.begin.rst b/sim/sim.runs/impl_1/.vivado.begin.rst new file mode 100644 index 0000000..3821c7f --- /dev/null +++ b/sim/sim.runs/impl_1/.vivado.begin.rst @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/sim/sim.runs/impl_1/.vivado.end.rst b/sim/sim.runs/impl_1/.vivado.end.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/impl_1/.write_bitstream.begin.rst b/sim/sim.runs/impl_1/.write_bitstream.begin.rst new file mode 100644 index 0000000..1eb98c5 --- /dev/null +++ b/sim/sim.runs/impl_1/.write_bitstream.begin.rst @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/impl_1/.write_bitstream.end.rst b/sim/sim.runs/impl_1/.write_bitstream.end.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/impl_1/ISEWrap.js b/sim/sim.runs/impl_1/ISEWrap.js new file mode 100755 index 0000000..8284d2d --- /dev/null +++ b/sim/sim.runs/impl_1/ISEWrap.js @@ -0,0 +1,244 @@ +// +// Vivado(TM) +// ISEWrap.js: Vivado Runs Script for WSH 5.1/5.6 +// Copyright 1986-1999, 2001-2013,2015 Xilinx, Inc. All Rights Reserved. +// + +// GLOBAL VARIABLES +var ISEShell = new ActiveXObject( "WScript.Shell" ); +var ISEFileSys = new ActiveXObject( "Scripting.FileSystemObject" ); +var ISERunDir = ""; +var ISELogFile = "runme.log"; +var ISELogFileStr = null; +var ISELogEcho = true; +var ISEOldVersionWSH = false; + + + +// BOOTSTRAP +ISEInit(); + + + +// +// ISE FUNCTIONS +// +function ISEInit() { + + // 1. RUN DIR setup + var ISEScrFP = WScript.ScriptFullName; + var ISEScrN = WScript.ScriptName; + ISERunDir = + ISEScrFP.substr( 0, ISEScrFP.length - ISEScrN.length - 1 ); + + // 2. LOG file setup + ISELogFileStr = ISEOpenFile( ISELogFile ); + + // 3. LOG echo? + var ISEScriptArgs = WScript.Arguments; + for ( var loopi=0; loopi> " + ISELogFile + " 2>&1"; + ISEExitCode = ISEShell.Run( ISECmdLine, 0, true ); + ISELogFileStr = ISEOpenFile( ISELogFile ); + + } else { // WSH 5.6 + + // LAUNCH! + ISEShell.CurrentDirectory = ISERunDir; + + // Redirect STDERR to STDOUT + ISECmdLine = "%comspec% /c " + ISECmdLine + " 2>&1"; + var ISEProcess = ISEShell.Exec( ISECmdLine ); + + // BEGIN file creation + var ISENetwork = WScript.CreateObject( "WScript.Network" ); + var ISEHost = ISENetwork.ComputerName; + var ISEUser = ISENetwork.UserName; + var ISEPid = ISEProcess.ProcessID; + var ISEBeginFile = ISEOpenFile( "." + ISEStep + ".begin.rst" ); + ISEBeginFile.WriteLine( "" ); + ISEBeginFile.WriteLine( "" ); + ISEBeginFile.WriteLine( " " ); + ISEBeginFile.WriteLine( " " ); + ISEBeginFile.WriteLine( "" ); + ISEBeginFile.Close(); + + var ISEOutStr = ISEProcess.StdOut; + var ISEErrStr = ISEProcess.StdErr; + + // WAIT for ISEStep to finish + while ( ISEProcess.Status == 0 ) { + + // dump stdout then stderr - feels a little arbitrary + while ( !ISEOutStr.AtEndOfStream ) { + ISEStdOut( ISEOutStr.ReadLine() ); + } + + WScript.Sleep( 100 ); + } + + ISEExitCode = ISEProcess.ExitCode; + } + + ISELogFileStr.Close(); + + // END/ERROR file creation + if ( ISEExitCode != 0 ) { + ISETouchFile( ISEStep, "error" ); + + } else { + ISETouchFile( ISEStep, "end" ); + } + + return ISEExitCode; +} + + +// +// UTILITIES +// +function ISEStdOut( ISELine ) { + + ISELogFileStr.WriteLine( ISELine ); + + if ( ISELogEcho ) { + WScript.StdOut.WriteLine( ISELine ); + } +} + +function ISEStdErr( ISELine ) { + + ISELogFileStr.WriteLine( ISELine ); + + if ( ISELogEcho ) { + WScript.StdErr.WriteLine( ISELine ); + } +} + +function ISETouchFile( ISERoot, ISEStatus ) { + + var ISETFile = + ISEOpenFile( "." + ISERoot + "." + ISEStatus + ".rst" ); + ISETFile.Close(); +} + +function ISEOpenFile( ISEFilename ) { + + // This function has been updated to deal with a problem seen in CR #870871. + // In that case the user runs a script that runs impl_1, and then turns around + // and runs impl_1 -to_step write_bitstream. That second run takes place in + // the same directory, which means we may hit some of the same files, and in + // particular, we will open the runme.log file. Even though this script closes + // the file (now), we see cases where a subsequent attempt to open the file + // fails. Perhaps the OS is slow to release the lock, or the disk comes into + // play? In any case, we try to work around this by first waiting if the file + // is already there for an arbitrary 5 seconds. Then we use a try-catch block + // and try to open the file 10 times with a one second delay after each attempt. + // Again, 10 is arbitrary. But these seem to stop the hang in CR #870871. + // If there is an unrecognized exception when trying to open the file, we output + // an error message and write details to an exception.log file. + var ISEFullPath = ISERunDir + "/" + ISEFilename; + if (ISEFileSys.FileExists(ISEFullPath)) { + // File is already there. This could be a problem. Wait in case it is still in use. + WScript.Sleep(5000); + } + var i; + for (i = 0; i < 10; ++i) { + try { + return ISEFileSys.OpenTextFile(ISEFullPath, 8, true); + } catch (exception) { + var error_code = exception.number & 0xFFFF; // The other bits are a facility code. + if (error_code == 52) { // 52 is bad file name or number. + // Wait a second and try again. + WScript.Sleep(1000); + continue; + } else { + WScript.StdErr.WriteLine("ERROR: Exception caught trying to open file " + ISEFullPath); + var exceptionFilePath = ISERunDir + "/exception.log"; + if (!ISEFileSys.FileExists(exceptionFilePath)) { + WScript.StdErr.WriteLine("See file " + exceptionFilePath + " for details."); + var exceptionFile = ISEFileSys.OpenTextFile(exceptionFilePath, 8, true); + exceptionFile.WriteLine("ERROR: Exception caught trying to open file " + ISEFullPath); + exceptionFile.WriteLine("\tException name: " + exception.name); + exceptionFile.WriteLine("\tException error code: " + error_code); + exceptionFile.WriteLine("\tException message: " + exception.message); + exceptionFile.Close(); + } + throw exception; + } + } + } + // If we reached this point, we failed to open the file after 10 attempts. + // We need to error out. + WScript.StdErr.WriteLine("ERROR: Failed to open file " + ISEFullPath); + WScript.Quit(1); +} diff --git a/sim/sim.runs/impl_1/ISEWrap.sh b/sim/sim.runs/impl_1/ISEWrap.sh new file mode 100755 index 0000000..e1a8f5d --- /dev/null +++ b/sim/sim.runs/impl_1/ISEWrap.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +# +# Vivado(TM) +# ISEWrap.sh: Vivado Runs Script for UNIX +# Copyright 1986-1999, 2001-2013 Xilinx, Inc. All Rights Reserved. +# + +HD_LOG=$1 +shift + +# CHECK for a STOP FILE +if [ -f .stop.rst ] +then +echo "" >> $HD_LOG +echo "*** Halting run - EA reset detected ***" >> $HD_LOG +echo "" >> $HD_LOG +exit 1 +fi + +ISE_STEP=$1 +shift + +# WRITE STEP HEADER to LOG +echo "" >> $HD_LOG +echo "*** Running $ISE_STEP" >> $HD_LOG +echo " with args $@" >> $HD_LOG +echo "" >> $HD_LOG + +# LAUNCH! +$ISE_STEP "$@" >> $HD_LOG 2>&1 & + +# BEGIN file creation +ISE_PID=$! +if [ X != X$HOSTNAME ] +then +ISE_HOST=$HOSTNAME #bash +else +ISE_HOST=$HOST #csh +fi +ISE_USER=$USER +ISE_BEGINFILE=.$ISE_STEP.begin.rst +/bin/touch $ISE_BEGINFILE +echo "" >> $ISE_BEGINFILE +echo "" >> $ISE_BEGINFILE +echo " " >> $ISE_BEGINFILE +echo " " >> $ISE_BEGINFILE +echo "" >> $ISE_BEGINFILE + +# WAIT for ISEStep to finish +wait $ISE_PID + +# END/ERROR file creation +RETVAL=$? +if [ $RETVAL -eq 0 ] +then + /bin/touch .$ISE_STEP.end.rst +else + /bin/touch .$ISE_STEP.error.rst +fi + +exit $RETVAL + diff --git a/sim/sim.runs/impl_1/gen_run.xml b/sim/sim.runs/impl_1/gen_run.xml new file mode 100644 index 0000000..b2f0eac --- /dev/null +++ b/sim/sim.runs/impl_1/gen_run.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default settings for Implementation. + + + + + + + + + + + + diff --git a/sim/sim.runs/impl_1/htr.txt b/sim/sim.runs/impl_1/htr.txt new file mode 100644 index 0000000..0670d3b --- /dev/null +++ b/sim/sim.runs/impl_1/htr.txt @@ -0,0 +1,9 @@ +# +# Vivado(TM) +# htr.txt: a Vivado-generated description of how-to-repeat the +# the basic steps of a run. Note that runme.bat/sh needs +# to be invoked for Vivado to track run status. +# Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. +# + +vivado -log midpoint.vdi -applog -m64 -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace diff --git a/sim/sim.runs/impl_1/init_design.pb b/sim/sim.runs/impl_1/init_design.pb new file mode 100644 index 0000000000000000000000000000000000000000..e2c802d122027fcc63aacb4175326548fa11ce8f GIT binary patch literal 1307 zcmcgsK~LK-7$uYz;Yp*H?SQn+6Y4Z7wN2chG)Oxz7?&}I#z0%A33<*(Yn0fL?Uuq} zzhQ@6_g`m+g2Gxj?iPKv-}~P8-WN1L>${-&Kwz$M0%vrT8ZHLdNURmpV772Wqx#ZX zCG1Acl{}?ldk8ck&(MmNBgH_U24s2qa_i=!Ukgafz8Eg#OOvHv-a>s5ougOxQ86jB zQFqzGf7qsX9$*X0Y=BzZf~J>OPEAAOW5G4gFr<)yFdCmpg%wymtSF#*b!{<-n#%%A z%C#X+kQdI;RV8sNaI&hC>WwTi#r~|Q&=xnNhD(8&%<>crB$x}=!Or0^)?j5McA%Dx z^zN|v_pp&(nQeleA6$2cFQ~>$0d)))+zcH@LtEquiG${HuH-o|L)K93gpX+=XYt(` z@q?&MX3zT7pcO`OnfnB-?n|1uf#y`1DOs=?HERisIRmneRwpdF@&lixgV6U|bE82l zvfnKuzegK~)(ol~_SAvGp;Qhy!!kEK<5$I4-RLUaFuoP&8r_WiGTd(uJw2pKJG3vm zJ9v+$fWI~L_aewa6gM9wMd(L{r%^#N&!&lsF(@nYwcc<)1Y1e1|2XHuR@y~~<6g63?Q!ceC&2fV`?YS+3c7cK z{S&>MzeY!+ETigj3teYB2uj(GQR6_)to8*cz~*KdA!(yoe_U!TR5>+|5qc*Q{K>AU HO6uNUiJpK# literal 0 HcmV?d00001 diff --git a/sim/sim.runs/impl_1/midpoint.bit b/sim/sim.runs/impl_1/midpoint.bit new file mode 100644 index 0000000000000000000000000000000000000000..b9d421e84cfd67d5efcbca2d03b71bce9e533f22 GIT binary patch literal 2083844 zcmeI*TZklA835qZJv}VsyqsBW?P(-A5 zjIabm(Ih15!-zK!RFIe;f-GJiL{UK$@kK7pUnSFZ>RkTw zpYL?{^!Cp5hV>KwZvPiT?H%F8AG+_|AN|OEAO8657e03H{daG@YV)mkb&lKLeDD1q zyYC|(e%1NSbGN?qe0XQrxb;(;=QiKxf$LSuE-m1KDT-E`Im=xhxPO4ZoB3D zZJVzM_lD>E=4($4IYJ0Ox$4HS)$R7($1c1liIto6q!v%{9NOoQwa%@!cKMlkxpiHC zd%I69snx?B|Jh z>eNe@WFeM8fWSxs=}5iizmw;#`QIZM5+Fc;z-$ESvzfNESx?J_aLhl7N5X;31st?PT_1;ZZ163KmtPrvY|Z|qr);iPVC8I z+~;ITfB*pk1jZF;F8W_Eb{5<`KJLorxPR-{9p*T{5mQ@v-iRG_BS3%v0RjXF5FkK+ z009C72oNAZVEO{h=}%eqjHkBBjwl`h0t5(*Es%^oV(td4yl(DNk`Ms`1PBlyK!5-N z0t5&UAV7cs0RjXFR3h-DR@Ad!sU*0d#RRfAED1Lj8*CH-0t5&UIHCgSqO7~|=0(Z0 zygZZgLRAu}@%c)^3QB;$f(wlMBgN^I*L!k%$`j6Rx~%Bbg$EX#u>RJ90}UfUfB=Dc z6llyUsWX3^)y(E4Ft&il$=GBD5Fjvz0?D*;y86PjW-<=}0&^fR?pup(Mf{DZ>le>qsQd%Y7sW@3ByN`U|Y0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyKw#+wnzb^Pc)5%qVsr$q`)?T(Nf|-JAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009D33S=uk*$dy?D=PI9sP(I? zpzddTF&mfm%4L+&)iR=pL4W`O0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK;UQ!-2MHdxo)c_For<$?Biqf)^!R3^|1cqDNJLEaRk!!C&uZn?-T^G zvrkT87E=&daDir4%>o*E*jfnPb2YOpXVhj|>AISo=-qRrlL=0M009C72uw+!9+K8f z-Sd>DH4TB%1umB!u@!Kw6SjMn9ZAPf{N|)}E2Je!@D0^|-Z`w#7N>ndXf2KBc$cXE^*b*r9O{S;Jo|<*7oLvUzuP_O7Dhj(qjz1Z zo>%^|{N=QM=cE<3k%n~4_{o_4XVJal-`u$Nol{y=I;D9QeVQbGkN@1FFJk%fzu_0< zuW6#^u8N-*N?C1IN|gRVV(j&u{!IgGyr?)hNSJ@r{^J9)#w4&`0f<2U%Y9q|}>H(I^(5lemSJ(2WXX5&qLt0$|>=giu# zxROq!?zwa6bcn#l7Y=Ehuqm5x{1F>o@2+?Co^Gksa~2;c^(5ZJLWt+1ePrV;|BC01 z*MIchokTjPeBACGA;0Kut@x-F}!9nII`LXu-#{?y^~2#P#=< zzLGq462Iz6EN!N2I@Vs-i!DuwTjP*%I8eufAMJjK_l)>`wuL6jbord zXRppYI1?>cJFY+uLySNob=^cC1R*SC7Y$~29SkdUVNQ&{}G zs3gB~bOq9G;lMc!ZKu;8KhQAoWsIA~Ao*9Qzb3y8uTSfvzrE5LaRhG~^?HbQ@woo| zRV}~!9#?a1yQ(RcD{huA=VJU?J(icsJhD!(EN(>>>b2*`>(imC&(kY2^V!CVFS_FY z`JQZiv+PXb<0H%B*Tr~K58K%Tv0MwyFO@yd;>L?G{f_!}=Lx>?pMK4g)MX)S?LxfC zYH{0}YY#T!rZ{#5qEDZrvAx|`X+2KXe$}UWqN*$4Qp0T-?6+_}YUHJY4fQ z*+b3tian)9eY;U>?Mb8b&*9$PlkF_~?8WWup|uAex@b>&^k-UpYNoTByq|zQ>8CQ= zI(sr(|9-RElYT0p+5Y4Dfwrx1@=~li8DFV>{XkO*m#sM)Tj84XNh4f+=cQ)+S?+LG z34xa-MDFplBffF|`dAtF>-1w!Yn-s+eIdK{MUAla$#ChFFKL9kKAE%a{Ox*$LFM+0ETMbMwmH zD`f)9E0Fdqt+(7$y|38YrxE|{rrzs)9eXZD>C@A_^*K1b*CUk2onqYnBcw1NT~54U zKJpkji)7@U3)}Jdv-YK)?YkOqG0I1vj?!m9_}N$Y{Y-)BrM2;leRC!It|q%kCmTLs z^f;ScO$GxJE3f+0x66w)cagG!8I|yJoV`=`mIr0j+vjZjdAZ)}QO1nYe^8u5>c~*U!@J|U z=Ry6ZRX-??LG`8OWlu_@6o|l45}5fX`m8SbznhpW;Js<(w+oo`9Hd<3U%{QYTx@~E zavIh?Y}QG~4~suSdpbg&O1fNkxstF&f~G|VRXV2scb3ZkP1XXhg@@%dtbH(J+o1UP z!I2BMWPL{_eQV3AEU+hW>R~wzYag6_)@mv~esE+h1PBlyK%j^~n#NK2*VxCM@wLWk zKD3sGt*4LP3ahcL!eirKV+S9W)3Ejd6Q*5*&iLY{oe6g0Ymw~%lO0-JkFE9A%}%)S z={;`@`7dqf?G+vMPmdjVSWd&*2TxdU8Fa=cJ4H" + puts $ch "" + puts $ch " " + puts $ch " " + puts $ch "" + close $ch +} + +proc end_step { step } { + set endFile ".$step.end.rst" + set ch [open $endFile w] + close $ch +} + +proc step_failed { step } { + set endFile ".$step.error.rst" + set ch [open $endFile w] + close $ch +} + + +start_step write_bitstream +set ACTIVE_STEP write_bitstream +set rc [catch { + create_msg_db write_bitstream.pb + set_param xicom.use_bs_reader 1 + open_checkpoint midpoint_routed.dcp + set_property webtalk.parent_dir /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.cache/wt [current_project] + catch { write_mem_info -force midpoint.mmi } + write_bitstream -force midpoint.bit + catch {write_debug_probes -no_partial_ltxfile -quiet -force debug_nets} + catch {file copy -force debug_nets.ltx midpoint.ltx} + close_msg_db -file write_bitstream.pb +} RESULT] +if {$rc} { + step_failed write_bitstream + return -code error $RESULT +} else { + end_step write_bitstream + unset ACTIVE_STEP +} + diff --git a/sim/sim.runs/impl_1/midpoint.vdi b/sim/sim.runs/impl_1/midpoint.vdi new file mode 100644 index 0000000..57bd0a6 --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint.vdi @@ -0,0 +1,432 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:40:18 2017 +# Process ID: 5899 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1 +# Command line: vivado -log midpoint.vdi -applog -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.vdi +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace +Design is defaulting to srcset: sources_1 +Design is defaulting to constrset: constrs_1 +INFO: [Netlist 29-17] Analyzing 4 Unisim elements for replacement +INFO: [Netlist 29-28] Unisim Transformation completed in 0 CPU seconds +INFO: [Project 1-479] Netlist was created with Vivado 2017.2 +INFO: [Device 21-403] Loading part xc7z010clg400-1 +INFO: [Project 1-570] Preparing netlist for logic optimization +Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] +Finished Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +INFO: [Project 1-111] Unisim Transformation Summary: +No Unisim elements were transformed. + +Command: opt_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Running DRC as a precondition to command opt_design + +Starting DRC Task +Command: report_drc (run_mandatory_drcs) for: opt_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Project 1-461] DRC finished with 0 Errors +INFO: [Project 1-462] Please refer to the DRC report (report_drc) for more information. + +Time (s): cpu = 00:00:01 ; elapsed = 00:00:00.47 . Memory (MB): peak = 1378.207 ; gain = 45.016 ; free physical = 10319 ; free virtual = 20551 +INFO: [Timing 38-35] Done setting XDC timing constraints. + +Starting Logic Optimization Task + +Phase 1 Retarget +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +INFO: [Opt 31-49] Retargeted 0 cell(s). +Phase 1 Retarget | Checksum: c1ca5825 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase Retarget created 0 cells and removed 0 cells + +Phase 2 Constant propagation +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +Phase 2 Constant propagation | Checksum: c1ca5825 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase Constant propagation created 0 cells and removed 0 cells + +Phase 3 Sweep +Phase 3 Sweep | Checksum: 14fe552a6 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase Sweep created 6 cells and removed 0 cells + +Phase 4 BUFG optimization +Phase 4 BUFG optimization | Checksum: 14fe552a6 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase BUFG optimization created 0 cells and removed 0 cells + +Phase 5 Shift Register Optimization +Phase 5 Shift Register Optimization | Checksum: 14fe552a6 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase Shift Register Optimization created 0 cells and removed 0 cells + +Starting Connectivity Check Task + +Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +Ending Logic Optimization Task | Checksum: 14fe552a6 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 + +Starting Power Optimization Task +INFO: [Pwropt 34-132] Skipping clock gating for clocks with a period < 2.00 ns. +Ending Power Optimization Task | Checksum: 19d912689 + +Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +21 Infos, 0 Warnings, 0 Critical Warnings and 0 Errors encountered. +opt_design completed successfully +opt_design: Time (s): cpu = 00:00:08 ; elapsed = 00:00:07 . Memory (MB): peak = 1818.699 ; gain = 485.508 ; free physical = 9950 ; free virtual = 20182 +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.02 . Memory (MB): peak = 1842.711 ; gain = 0.000 ; free physical = 9948 ; free virtual = 20182 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_opt.dcp' has been generated. +Command: report_drc -file midpoint_drc_opted.rpt +INFO: [DRC 23-27] Running DRC with 4 threads +INFO: [Coretcl 2-168] The results of DRC are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_drc_opted.rpt. +report_drc completed successfully +INFO: [Chipscope 16-241] No debug cores found in the current design. +Before running the implement_debug_core command, either use the Set Up Debug wizard (GUI mode) +or use the create_debug_core and connect_debug_core Tcl commands to insert debug cores into the design. +Command: place_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Command: report_drc (run_mandatory_drcs) for: incr_eco_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. +Running DRC as a precondition to command place_design +Command: report_drc (run_mandatory_drcs) for: placer_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. + +Starting Placer Task +INFO: [Place 30-611] Multithreading enabled for place_design using a maximum of 4 CPUs + +Phase 1 Placer Initialization + +Phase 1.1 Placer Initialization Netlist Sorting +Netlist sorting complete. Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9935 ; free virtual = 20167 +Phase 1.1 Placer Initialization Netlist Sorting | Checksum: 14ca5cf03 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9935 ; free virtual = 20167 +INFO: [Timing 38-35] Done setting XDC timing constraints. +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +Netlist sorting complete. Time (s): cpu = 00:00:00 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9935 ; free virtual = 20167 + +Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device +INFO: [Timing 38-35] Done setting XDC timing constraints. +Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device | Checksum: e889b640 + +Time (s): cpu = 00:00:00.32 ; elapsed = 00:00:00.24 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9936 ; free virtual = 20168 + +Phase 1.3 Build Placer Netlist Model +Phase 1.3 Build Placer Netlist Model | Checksum: 1d803f5c8 + +Time (s): cpu = 00:00:00.33 ; elapsed = 00:00:00.24 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9936 ; free virtual = 20168 + +Phase 1.4 Constrain Clocks/Macros +Phase 1.4 Constrain Clocks/Macros | Checksum: 1d803f5c8 + +Time (s): cpu = 00:00:00.33 ; elapsed = 00:00:00.24 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9936 ; free virtual = 20168 +Phase 1 Placer Initialization | Checksum: 1d803f5c8 + +Time (s): cpu = 00:00:00.33 ; elapsed = 00:00:00.24 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9936 ; free virtual = 20168 + +Phase 2 Global Placement +WARNING: [Place 46-30] place_design is not in timing mode. Skip physical synthesis in placer +Phase 2 Global Placement | Checksum: 1b5704437 + +Time (s): cpu = 00:00:00.62 ; elapsed = 00:00:00.37 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3 Detail Placement + +Phase 3.1 Commit Multi Column Macros +Phase 3.1 Commit Multi Column Macros | Checksum: 1b5704437 + +Time (s): cpu = 00:00:00.63 ; elapsed = 00:00:00.37 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3.2 Commit Most Macros & LUTRAMs +Phase 3.2 Commit Most Macros & LUTRAMs | Checksum: 14ee8c1ba + +Time (s): cpu = 00:00:00.64 ; elapsed = 00:00:00.37 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3.3 Area Swap Optimization +Phase 3.3 Area Swap Optimization | Checksum: 15274315a + +Time (s): cpu = 00:00:00.65 ; elapsed = 00:00:00.38 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3.4 Pipeline Register Optimization +Phase 3.4 Pipeline Register Optimization | Checksum: 15274315a + +Time (s): cpu = 00:00:00.66 ; elapsed = 00:00:00.38 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3.5 Small Shape Detail Placement +Phase 3.5 Small Shape Detail Placement | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.42 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 + +Phase 3.6 Re-assign LUT pins +Phase 3.6 Re-assign LUT pins | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.42 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 + +Phase 3.7 Pipeline Register Optimization +Phase 3.7 Pipeline Register Optimization | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.42 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 +Phase 3 Detail Placement | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 + +Phase 4 Post Placement Optimization and Clean-Up + +Phase 4.1 Post Commit Optimization +Phase 4.1 Post Commit Optimization | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.73 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 + +Phase 4.2 Post Placement Cleanup +Phase 4.2 Post Placement Cleanup | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20162 + +Phase 4.3 Placer Reporting +Phase 4.3 Placer Reporting | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20162 + +Phase 4.4 Final Placement Cleanup +Phase 4.4 Final Placement Cleanup | Checksum: 147869b64 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20162 +Phase 4 Post Placement Optimization and Clean-Up | Checksum: 147869b64 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20162 +Ending Placer Task | Checksum: c4929310 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9932 ; free virtual = 20164 +36 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered. +place_design completed successfully +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1882.730 ; gain = 0.000 ; free physical = 9931 ; free virtual = 20165 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_placed.dcp' has been generated. +report_io: Time (s): cpu = 00:00:00.11 ; elapsed = 00:00:00.14 . Memory (MB): peak = 1882.730 ; gain = 0.000 ; free physical = 9923 ; free virtual = 20155 +report_utilization: Time (s): cpu = 00:00:00.08 ; elapsed = 00:00:00.10 . Memory (MB): peak = 1882.730 ; gain = 0.000 ; free physical = 9929 ; free virtual = 20161 +report_control_sets: Time (s): cpu = 00:00:00.05 ; elapsed = 00:00:00.08 . Memory (MB): peak = 1882.730 ; gain = 0.000 ; free physical = 9929 ; free virtual = 20161 +Command: route_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Running DRC as a precondition to command route_design +Command: report_drc (run_mandatory_drcs) for: router_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. + + +Starting Routing Task +INFO: [Route 35-254] Multithreading enabled for route_design using a maximum of 4 CPUs +Checksum: PlaceDB: a243f121 ConstDB: 0 ShapeSum: 224ea1ef RouteDB: 0 + +Phase 1 Build RT Design +Phase 1 Build RT Design | Checksum: 17af5ee1d + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1894.719 ; gain = 11.988 ; free physical = 9856 ; free virtual = 20088 + +Phase 2 Router Initialization +INFO: [Route 35-64] No timing constraints were detected. The router will operate in resource-optimization mode. + +Phase 2.1 Fix Topology Constraints +Phase 2.1 Fix Topology Constraints | Checksum: 17af5ee1d + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1908.719 ; gain = 25.988 ; free physical = 9841 ; free virtual = 20073 + +Phase 2.2 Pre Route Cleanup +Phase 2.2 Pre Route Cleanup | Checksum: 17af5ee1d + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1908.719 ; gain = 25.988 ; free physical = 9841 ; free virtual = 20073 + Number of Nodes with overlaps = 0 +Phase 2 Router Initialization | Checksum: 1a406675 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9834 ; free virtual = 20066 + +Phase 3 Initial Routing +Phase 3 Initial Routing | Checksum: 3ac3d490 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 4 Rip-up And Reroute + +Phase 4.1 Global Iteration 0 + Number of Nodes with overlaps = 0 +Phase 4.1 Global Iteration 0 | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 +Phase 4 Rip-up And Reroute | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 5 Delay and Skew Optimization +Phase 5 Delay and Skew Optimization | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 6 Post Hold Fix + +Phase 6.1 Hold Fix Iter +Phase 6.1 Hold Fix Iter | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 +Phase 6 Post Hold Fix | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 7 Route finalize + +Router Utilization Summary + Global Vertical Routing Utilization = 0.0318131 % + Global Horizontal Routing Utilization = 0.0078125 % + Routable Net Status* + *Does not include unroutable nets such as driverless and loadless. + Run report_route_status for detailed report. + Number of Failed Nets = 0 + Number of Unrouted Nets = 0 + Number of Partially Routed Nets = 0 + Number of Node Overlaps = 0 + +Congestion Report +North Dir 1x1 Area, Max Cong = 16.2162%, No Congested Regions. +South Dir 1x1 Area, Max Cong = 16.2162%, No Congested Regions. +East Dir 1x1 Area, Max Cong = 7.35294%, No Congested Regions. +West Dir 1x1 Area, Max Cong = 2.94118%, No Congested Regions. +Phase 7 Route finalize | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 8 Verifying routed nets + + Verification completed successfully +Phase 8 Verifying routed nets | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1919.719 ; gain = 36.988 ; free physical = 9836 ; free virtual = 20068 + +Phase 9 Depositing Routes +Phase 9 Depositing Routes | Checksum: 103b01834 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1919.719 ; gain = 36.988 ; free physical = 9836 ; free virtual = 20068 +INFO: [Route 35-16] Router Completed Successfully + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1919.719 ; gain = 36.988 ; free physical = 9852 ; free virtual = 20084 + +Routing Is Done. +44 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered. +route_design completed successfully +route_design: Time (s): cpu = 00:00:11 ; elapsed = 00:00:08 . Memory (MB): peak = 1945.750 ; gain = 63.020 ; free physical = 9852 ; free virtual = 20084 +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.02 . Memory (MB): peak = 1945.750 ; gain = 0.000 ; free physical = 9850 ; free virtual = 20084 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_routed.dcp' has been generated. +Command: report_drc -file midpoint_drc_routed.rpt -pb midpoint_drc_routed.pb -rpx midpoint_drc_routed.rpx +INFO: [DRC 23-27] Running DRC with 4 threads +INFO: [Coretcl 2-168] The results of DRC are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_drc_routed.rpt. +report_drc completed successfully +Command: report_methodology -file midpoint_methodology_drc_routed.rpt -rpx midpoint_methodology_drc_routed.rpx +INFO: [Timing 38-35] Done setting XDC timing constraints. +INFO: [DRC 23-133] Running Methodology with 4 threads +INFO: [Coretcl 2-1520] The results of Report Methodology are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_methodology_drc_routed.rpt. +report_methodology completed successfully +Command: report_power -file midpoint_power_routed.rpt -pb midpoint_power_summary_routed.pb -rpx midpoint_power_routed.rpx +WARNING: [Power 33-232] No user defined clocks were found in the design! +Resolution: Please specify clocks using create_clock/create_generated_clock for sequential elements. For pure combinatorial circuits, please specify a virtual clock, otherwise the vectorless estimation might be inaccurate +INFO: [Timing 38-35] Done setting XDC timing constraints. +Running Vector-less Activity Propagation... + +Finished Running Vector-less Activity Propagation +51 Infos, 2 Warnings, 0 Critical Warnings and 0 Errors encountered. +report_power completed successfully +INFO: [Timing 38-91] UpdateTimingParams: Speed grade: -1, Delay Type: min_max. +INFO: [Timing 38-191] Multithreading enabled for timing update using a maximum of 4 CPUs +WARNING: [Timing 38-313] There are no user specified timing constraints. Timing constraints are needed for proper timing analysis. +INFO: [Common 17-206] Exiting Vivado at Wed Oct 25 21:40:50 2017... +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:41:47 2017 +# Process ID: 8072 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1 +# Command line: vivado -log midpoint.vdi -applog -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.vdi +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace +Command: open_checkpoint midpoint_routed.dcp + +Starting open_checkpoint Task + +Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.03 . Memory (MB): peak = 1087.020 ; gain = 0.000 ; free physical = 10568 ; free virtual = 20807 +INFO: [Netlist 29-17] Analyzing 4 Unisim elements for replacement +INFO: [Netlist 29-28] Unisim Transformation completed in 0 CPU seconds +INFO: [Project 1-479] Netlist was created with Vivado 2017.2 +INFO: [Device 21-403] Loading part xc7z010clg400-1 +INFO: [Project 1-570] Preparing netlist for logic optimization +Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/.Xil/Vivado-8072-Kreyshawn/dcp3/midpoint.xdc] +Finished Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/.Xil/Vivado-8072-Kreyshawn/dcp3/midpoint.xdc] +Reading XDEF placement. +Reading placer database... +Reading XDEF routing. +Read XDEF File: Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1307.180 ; gain = 0.000 ; free physical = 10312 ; free virtual = 20552 +Restored from archive | CPU: 0.020000 secs | Memory: 0.051208 MB | +Finished XDEF File Restore: Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1307.180 ; gain = 0.000 ; free physical = 10312 ; free virtual = 20552 +INFO: [Project 1-111] Unisim Transformation Summary: +No Unisim elements were transformed. + +INFO: [Project 1-604] Checkpoint was created with Vivado v2017.2 (64-bit) build 1909853 +Command: write_bitstream -force midpoint.bit +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Running DRC as a precondition to command write_bitstream +Command: report_drc (run_mandatory_drcs) for: bitstream_checks +INFO: [DRC 23-27] Running DRC with 4 threads +WARNING: [DRC ZPS7-1] PS7 block required: The PS7 cell must be used in this Zynq design in order to enable correct default configuration. +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado 12-3199] DRC finished with 0 Errors, 1 Warnings +INFO: [Vivado 12-3200] Please refer to the DRC report (report_drc) for more information. +INFO: [Project 1-821] Please set project.enableDesignId to be 'true'. +INFO: [Designutils 20-2272] Running write_bitstream with 4 threads. +Loading data files... +Loading site data... +Loading route data... +Processing options... +Creating bitmap... +Creating bitstream... +Writing bitstream ./midpoint.bit... +INFO: [Vivado 12-1842] Bitgen Completed Successfully. +INFO: [Project 1-120] WebTalk data collection is mandatory when using a WebPACK part without a full Vivado license. To see the specific WebTalk data collected for your design, open the usage_statistics_webtalk.html or usage_statistics_webtalk.xml file in the implementation directory. +INFO: [Common 17-186] '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/usage_statistics_webtalk.xml' has been successfully sent to Xilinx on Wed Oct 25 21:42:09 2017. For additional details about this file, please refer to the WebTalk help file at /opt/Xilinx/Vivado/2017.2/doc/webtalk_introduction.html. +16 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered. +write_bitstream completed successfully +write_bitstream: Time (s): cpu = 00:00:08 ; elapsed = 00:00:10 . Memory (MB): peak = 1738.680 ; gain = 431.500 ; free physical = 10288 ; free virtual = 20526 +INFO: [Common 17-206] Exiting Vivado at Wed Oct 25 21:42:09 2017... diff --git a/sim/sim.runs/impl_1/midpoint_29201.backup.vdi b/sim/sim.runs/impl_1/midpoint_29201.backup.vdi new file mode 100644 index 0000000..d2e0834 --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint_29201.backup.vdi @@ -0,0 +1,372 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:33:23 2017 +# Process ID: 29201 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1 +# Command line: vivado -log midpoint.vdi -applog -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.vdi +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace +Design is defaulting to srcset: sources_1 +Design is defaulting to constrset: constrs_1 +INFO: [Netlist 29-17] Analyzing 2 Unisim elements for replacement +INFO: [Netlist 29-28] Unisim Transformation completed in 0 CPU seconds +INFO: [Project 1-479] Netlist was created with Vivado 2017.2 +INFO: [Device 21-403] Loading part xc7z010clg400-1 +INFO: [Project 1-570] Preparing netlist for logic optimization +Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] +Finished Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +INFO: [Project 1-111] Unisim Transformation Summary: +No Unisim elements were transformed. + +Command: opt_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Running DRC as a precondition to command opt_design + +Starting DRC Task +Command: report_drc (run_mandatory_drcs) for: opt_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Project 1-461] DRC finished with 0 Errors +INFO: [Project 1-462] Please refer to the DRC report (report_drc) for more information. + +Time (s): cpu = 00:00:01 ; elapsed = 00:00:00.48 . Memory (MB): peak = 1379.207 ; gain = 46.016 ; free physical = 11262 ; free virtual = 21450 +INFO: [Timing 38-35] Done setting XDC timing constraints. + +Starting Logic Optimization Task + +Phase 1 Retarget +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +INFO: [Opt 31-49] Retargeted 0 cell(s). +Phase 1 Retarget | Checksum: 1a4acf38d + +Time (s): cpu = 00:00:00 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1830.699 ; gain = 0.000 ; free physical = 10896 ; free virtual = 21084 +INFO: [Opt 31-389] Phase Retarget created 0 cells and removed 0 cells + +Phase 2 Constant propagation +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +Phase 2 Constant propagation | Checksum: 1a4acf38d + +Time (s): cpu = 00:00:00 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1830.699 ; gain = 0.000 ; free physical = 10896 ; free virtual = 21084 +INFO: [Opt 31-389] Phase Constant propagation created 0 cells and removed 0 cells + +Phase 3 Sweep +Phase 3 Sweep | Checksum: 16cf96f78 + +Time (s): cpu = 00:00:00 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1830.699 ; gain = 0.000 ; free physical = 10896 ; free virtual = 21084 +INFO: [Opt 31-389] Phase Sweep created 7 cells and removed 0 cells + +Phase 4 BUFG optimization +Phase 4 BUFG optimization | Checksum: 16cf96f78 + +Time (s): cpu = 00:00:00 ; elapsed = 00:00:00.02 . Memory (MB): peak = 1830.699 ; gain = 0.000 ; free physical = 10896 ; free virtual = 21084 +INFO: [Opt 31-389] Phase BUFG optimization created 0 cells and removed 0 cells + +Phase 5 Shift Register Optimization +Phase 5 Shift Register Optimization | Checksum: 16cf96f78 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.02 . Memory (MB): peak = 1830.699 ; gain = 0.000 ; free physical = 10896 ; free virtual = 21084 +INFO: [Opt 31-389] Phase Shift Register Optimization created 0 cells and removed 0 cells + +Starting Connectivity Check Task + +Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 1830.699 ; gain = 0.000 ; free physical = 10896 ; free virtual = 21084 +Ending Logic Optimization Task | Checksum: 16cf96f78 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.02 . Memory (MB): peak = 1830.699 ; gain = 0.000 ; free physical = 10896 ; free virtual = 21084 + +Starting Power Optimization Task +INFO: [Pwropt 34-132] Skipping clock gating for clocks with a period < 2.00 ns. +Ending Power Optimization Task | Checksum: 2959f42ce + +Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1830.699 ; gain = 0.000 ; free physical = 10896 ; free virtual = 21084 +21 Infos, 0 Warnings, 0 Critical Warnings and 0 Errors encountered. +opt_design completed successfully +opt_design: Time (s): cpu = 00:00:08 ; elapsed = 00:00:07 . Memory (MB): peak = 1830.699 ; gain = 497.508 ; free physical = 10896 ; free virtual = 21084 +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1854.711 ; gain = 0.000 ; free physical = 10895 ; free virtual = 21084 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_opt.dcp' has been generated. +Command: report_drc -file midpoint_drc_opted.rpt +INFO: [DRC 23-27] Running DRC with 4 threads +INFO: [Coretcl 2-168] The results of DRC are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_drc_opted.rpt. +report_drc completed successfully +INFO: [Chipscope 16-241] No debug cores found in the current design. +Before running the implement_debug_core command, either use the Set Up Debug wizard (GUI mode) +or use the create_debug_core and connect_debug_core Tcl commands to insert debug cores into the design. +Command: place_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Command: report_drc (run_mandatory_drcs) for: incr_eco_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. +Running DRC as a precondition to command place_design +Command: report_drc (run_mandatory_drcs) for: placer_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. + +Starting Placer Task +INFO: [Place 30-611] Multithreading enabled for place_design using a maximum of 4 CPUs + +Phase 1 Placer Initialization + +Phase 1.1 Placer Initialization Netlist Sorting +Netlist sorting complete. Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 1862.715 ; gain = 0.000 ; free physical = 10892 ; free virtual = 21080 +Phase 1.1 Placer Initialization Netlist Sorting | Checksum: 1bd56c8f9 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.02 . Memory (MB): peak = 1862.715 ; gain = 0.000 ; free physical = 10892 ; free virtual = 21080 +INFO: [Timing 38-35] Done setting XDC timing constraints. +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +Netlist sorting complete. Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 1862.715 ; gain = 0.000 ; free physical = 10892 ; free virtual = 21080 + +Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device +INFO: [Timing 38-35] Done setting XDC timing constraints. +Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device | Checksum: ef0970d3 + +Time (s): cpu = 00:00:00.41 ; elapsed = 00:00:00.26 . Memory (MB): peak = 1862.715 ; gain = 0.000 ; free physical = 10890 ; free virtual = 21080 + +Phase 1.3 Build Placer Netlist Model +Phase 1.3 Build Placer Netlist Model | Checksum: 12646a149 + +Time (s): cpu = 00:00:00.43 ; elapsed = 00:00:00.28 . Memory (MB): peak = 1862.715 ; gain = 0.000 ; free physical = 10890 ; free virtual = 21081 + +Phase 1.4 Constrain Clocks/Macros +Phase 1.4 Constrain Clocks/Macros | Checksum: 12646a149 + +Time (s): cpu = 00:00:00.43 ; elapsed = 00:00:00.28 . Memory (MB): peak = 1862.715 ; gain = 0.000 ; free physical = 10890 ; free virtual = 21081 +Phase 1 Placer Initialization | Checksum: 12646a149 + +Time (s): cpu = 00:00:00.43 ; elapsed = 00:00:00.28 . Memory (MB): peak = 1862.715 ; gain = 0.000 ; free physical = 10890 ; free virtual = 21081 + +Phase 2 Global Placement +WARNING: [Place 46-30] place_design is not in timing mode. Skip physical synthesis in placer +Phase 2 Global Placement | Checksum: 1d6a8340e + +Time (s): cpu = 00:00:00.69 ; elapsed = 00:00:00.38 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10884 ; free virtual = 21075 + +Phase 3 Detail Placement + +Phase 3.1 Commit Multi Column Macros +Phase 3.1 Commit Multi Column Macros | Checksum: 1d6a8340e + +Time (s): cpu = 00:00:00.70 ; elapsed = 00:00:00.38 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10884 ; free virtual = 21075 + +Phase 3.2 Commit Most Macros & LUTRAMs +Phase 3.2 Commit Most Macros & LUTRAMs | Checksum: 1c5abcf2c + +Time (s): cpu = 00:00:00.70 ; elapsed = 00:00:00.39 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10884 ; free virtual = 21075 + +Phase 3.3 Area Swap Optimization +Phase 3.3 Area Swap Optimization | Checksum: 11c270229 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.39 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10884 ; free virtual = 21076 + +Phase 3.4 Pipeline Register Optimization +Phase 3.4 Pipeline Register Optimization | Checksum: 11c270229 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.39 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10884 ; free virtual = 21076 + +Phase 3.5 Small Shape Detail Placement +Phase 3.5 Small Shape Detail Placement | Checksum: 1d1fed80c + +Time (s): cpu = 00:00:00.78 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 + +Phase 3.6 Re-assign LUT pins +Phase 3.6 Re-assign LUT pins | Checksum: 1d1fed80c + +Time (s): cpu = 00:00:00.78 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 + +Phase 3.7 Pipeline Register Optimization +Phase 3.7 Pipeline Register Optimization | Checksum: 1d1fed80c + +Time (s): cpu = 00:00:00.78 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 +Phase 3 Detail Placement | Checksum: 1d1fed80c + +Time (s): cpu = 00:00:00.78 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 + +Phase 4 Post Placement Optimization and Clean-Up + +Phase 4.1 Post Commit Optimization +Phase 4.1 Post Commit Optimization | Checksum: 1d1fed80c + +Time (s): cpu = 00:00:00.79 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 + +Phase 4.2 Post Placement Cleanup +Phase 4.2 Post Placement Cleanup | Checksum: 1d1fed80c + +Time (s): cpu = 00:00:00.80 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 + +Phase 4.3 Placer Reporting +Phase 4.3 Placer Reporting | Checksum: 1d1fed80c + +Time (s): cpu = 00:00:00.80 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 + +Phase 4.4 Final Placement Cleanup +Phase 4.4 Final Placement Cleanup | Checksum: 2495dc6b6 + +Time (s): cpu = 00:00:00.80 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 +Phase 4 Post Placement Optimization and Clean-Up | Checksum: 2495dc6b6 + +Time (s): cpu = 00:00:00.80 ; elapsed = 00:00:00.44 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10883 ; free virtual = 21075 +Ending Placer Task | Checksum: 162e9ec5b + +Time (s): cpu = 00:00:00.80 ; elapsed = 00:00:00.45 . Memory (MB): peak = 1886.727 ; gain = 24.012 ; free physical = 10886 ; free virtual = 21078 +36 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered. +place_design completed successfully +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1886.727 ; gain = 0.000 ; free physical = 10887 ; free virtual = 21080 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_placed.dcp' has been generated. +report_io: Time (s): cpu = 00:00:00.10 ; elapsed = 00:00:00.13 . Memory (MB): peak = 1886.727 ; gain = 0.000 ; free physical = 10878 ; free virtual = 21071 +report_utilization: Time (s): cpu = 00:00:00.09 ; elapsed = 00:00:00.10 . Memory (MB): peak = 1886.727 ; gain = 0.000 ; free physical = 10884 ; free virtual = 21077 +report_control_sets: Time (s): cpu = 00:00:00.05 ; elapsed = 00:00:00.08 . Memory (MB): peak = 1886.727 ; gain = 0.000 ; free physical = 10885 ; free virtual = 21077 +Command: route_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Running DRC as a precondition to command route_design +Command: report_drc (run_mandatory_drcs) for: router_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. + + +Starting Routing Task +INFO: [Route 35-254] Multithreading enabled for route_design using a maximum of 4 CPUs +Checksum: PlaceDB: b2818609 ConstDB: 0 ShapeSum: b0686652 RouteDB: 0 + +Phase 1 Build RT Design +Phase 1 Build RT Design | Checksum: cfedce98 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1894.719 ; gain = 7.992 ; free physical = 10805 ; free virtual = 20997 + +Phase 2 Router Initialization +INFO: [Route 35-64] No timing constraints were detected. The router will operate in resource-optimization mode. + +Phase 2.1 Fix Topology Constraints +Phase 2.1 Fix Topology Constraints | Checksum: cfedce98 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1909.719 ; gain = 22.992 ; free physical = 10790 ; free virtual = 20983 + +Phase 2.2 Pre Route Cleanup +Phase 2.2 Pre Route Cleanup | Checksum: cfedce98 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1909.719 ; gain = 22.992 ; free physical = 10790 ; free virtual = 20983 + Number of Nodes with overlaps = 0 +Phase 2 Router Initialization | Checksum: 1470ef40e + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1914.719 ; gain = 27.992 ; free physical = 10785 ; free virtual = 20978 + +Phase 3 Initial Routing +Phase 3 Initial Routing | Checksum: 106569aa6 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1914.719 ; gain = 27.992 ; free physical = 10786 ; free virtual = 20979 + +Phase 4 Rip-up And Reroute + +Phase 4.1 Global Iteration 0 + Number of Nodes with overlaps = 0 +Phase 4.1 Global Iteration 0 | Checksum: f664493f + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1914.719 ; gain = 27.992 ; free physical = 10786 ; free virtual = 20979 +Phase 4 Rip-up And Reroute | Checksum: f664493f + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1914.719 ; gain = 27.992 ; free physical = 10786 ; free virtual = 20979 + +Phase 5 Delay and Skew Optimization +Phase 5 Delay and Skew Optimization | Checksum: f664493f + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1914.719 ; gain = 27.992 ; free physical = 10786 ; free virtual = 20979 + +Phase 6 Post Hold Fix + +Phase 6.1 Hold Fix Iter +Phase 6.1 Hold Fix Iter | Checksum: f664493f + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1914.719 ; gain = 27.992 ; free physical = 10786 ; free virtual = 20979 +Phase 6 Post Hold Fix | Checksum: f664493f + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1914.719 ; gain = 27.992 ; free physical = 10786 ; free virtual = 20979 + +Phase 7 Route finalize + +Router Utilization Summary + Global Vertical Routing Utilization = 0.0192849 % + Global Horizontal Routing Utilization = 0.00758272 % + Routable Net Status* + *Does not include unroutable nets such as driverless and loadless. + Run report_route_status for detailed report. + Number of Failed Nets = 0 + Number of Unrouted Nets = 0 + Number of Partially Routed Nets = 0 + Number of Node Overlaps = 0 + +Congestion Report +North Dir 1x1 Area, Max Cong = 9.90991%, No Congested Regions. +South Dir 1x1 Area, Max Cong = 11.7117%, No Congested Regions. +East Dir 1x1 Area, Max Cong = 8.82353%, No Congested Regions. +West Dir 1x1 Area, Max Cong = 2.94118%, No Congested Regions. +Phase 7 Route finalize | Checksum: f664493f + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1914.719 ; gain = 27.992 ; free physical = 10786 ; free virtual = 20979 + +Phase 8 Verifying routed nets + + Verification completed successfully +Phase 8 Verifying routed nets | Checksum: f664493f + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1916.719 ; gain = 29.992 ; free physical = 10786 ; free virtual = 20979 + +Phase 9 Depositing Routes +Phase 9 Depositing Routes | Checksum: f664493f + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1916.719 ; gain = 29.992 ; free physical = 10786 ; free virtual = 20979 +INFO: [Route 35-16] Router Completed Successfully + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1916.719 ; gain = 29.992 ; free physical = 10801 ; free virtual = 20994 + +Routing Is Done. +44 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered. +route_design completed successfully +route_design: Time (s): cpu = 00:00:11 ; elapsed = 00:00:08 . Memory (MB): peak = 1942.750 ; gain = 56.023 ; free physical = 10801 ; free virtual = 20994 +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1942.750 ; gain = 0.000 ; free physical = 10801 ; free virtual = 20995 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_routed.dcp' has been generated. +Command: report_drc -file midpoint_drc_routed.rpt -pb midpoint_drc_routed.pb -rpx midpoint_drc_routed.rpx +INFO: [DRC 23-27] Running DRC with 4 threads +INFO: [Coretcl 2-168] The results of DRC are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_drc_routed.rpt. +report_drc completed successfully +Command: report_methodology -file midpoint_methodology_drc_routed.rpt -rpx midpoint_methodology_drc_routed.rpx +INFO: [Timing 38-35] Done setting XDC timing constraints. +INFO: [DRC 23-133] Running Methodology with 4 threads +INFO: [Coretcl 2-1520] The results of Report Methodology are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_methodology_drc_routed.rpt. +report_methodology completed successfully +Command: report_power -file midpoint_power_routed.rpt -pb midpoint_power_summary_routed.pb -rpx midpoint_power_routed.rpx +WARNING: [Power 33-232] No user defined clocks were found in the design! +Resolution: Please specify clocks using create_clock/create_generated_clock for sequential elements. For pure combinatorial circuits, please specify a virtual clock, otherwise the vectorless estimation might be inaccurate +INFO: [Timing 38-35] Done setting XDC timing constraints. +Running Vector-less Activity Propagation... + +Finished Running Vector-less Activity Propagation +51 Infos, 2 Warnings, 0 Critical Warnings and 0 Errors encountered. +report_power completed successfully +INFO: [Timing 38-91] UpdateTimingParams: Speed grade: -1, Delay Type: min_max. +INFO: [Timing 38-191] Multithreading enabled for timing update using a maximum of 4 CPUs +WARNING: [Timing 38-313] There are no user specified timing constraints. Timing constraints are needed for proper timing analysis. +INFO: [Common 17-206] Exiting Vivado at Wed Oct 25 21:33:55 2017... diff --git a/sim/sim.runs/impl_1/midpoint_5899.backup.vdi b/sim/sim.runs/impl_1/midpoint_5899.backup.vdi new file mode 100644 index 0000000..bfdb811 --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint_5899.backup.vdi @@ -0,0 +1,372 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:40:18 2017 +# Process ID: 5899 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1 +# Command line: vivado -log midpoint.vdi -applog -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.vdi +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace +Design is defaulting to srcset: sources_1 +Design is defaulting to constrset: constrs_1 +INFO: [Netlist 29-17] Analyzing 4 Unisim elements for replacement +INFO: [Netlist 29-28] Unisim Transformation completed in 0 CPU seconds +INFO: [Project 1-479] Netlist was created with Vivado 2017.2 +INFO: [Device 21-403] Loading part xc7z010clg400-1 +INFO: [Project 1-570] Preparing netlist for logic optimization +Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] +Finished Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +INFO: [Project 1-111] Unisim Transformation Summary: +No Unisim elements were transformed. + +Command: opt_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Running DRC as a precondition to command opt_design + +Starting DRC Task +Command: report_drc (run_mandatory_drcs) for: opt_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Project 1-461] DRC finished with 0 Errors +INFO: [Project 1-462] Please refer to the DRC report (report_drc) for more information. + +Time (s): cpu = 00:00:01 ; elapsed = 00:00:00.47 . Memory (MB): peak = 1378.207 ; gain = 45.016 ; free physical = 10319 ; free virtual = 20551 +INFO: [Timing 38-35] Done setting XDC timing constraints. + +Starting Logic Optimization Task + +Phase 1 Retarget +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +INFO: [Opt 31-49] Retargeted 0 cell(s). +Phase 1 Retarget | Checksum: c1ca5825 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase Retarget created 0 cells and removed 0 cells + +Phase 2 Constant propagation +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +Phase 2 Constant propagation | Checksum: c1ca5825 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase Constant propagation created 0 cells and removed 0 cells + +Phase 3 Sweep +Phase 3 Sweep | Checksum: 14fe552a6 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase Sweep created 6 cells and removed 0 cells + +Phase 4 BUFG optimization +Phase 4 BUFG optimization | Checksum: 14fe552a6 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase BUFG optimization created 0 cells and removed 0 cells + +Phase 5 Shift Register Optimization +Phase 5 Shift Register Optimization | Checksum: 14fe552a6 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +INFO: [Opt 31-389] Phase Shift Register Optimization created 0 cells and removed 0 cells + +Starting Connectivity Check Task + +Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +Ending Logic Optimization Task | Checksum: 14fe552a6 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 + +Starting Power Optimization Task +INFO: [Pwropt 34-132] Skipping clock gating for clocks with a period < 2.00 ns. +Ending Power Optimization Task | Checksum: 19d912689 + +Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1818.699 ; gain = 0.000 ; free physical = 9950 ; free virtual = 20182 +21 Infos, 0 Warnings, 0 Critical Warnings and 0 Errors encountered. +opt_design completed successfully +opt_design: Time (s): cpu = 00:00:08 ; elapsed = 00:00:07 . Memory (MB): peak = 1818.699 ; gain = 485.508 ; free physical = 9950 ; free virtual = 20182 +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.02 . Memory (MB): peak = 1842.711 ; gain = 0.000 ; free physical = 9948 ; free virtual = 20182 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_opt.dcp' has been generated. +Command: report_drc -file midpoint_drc_opted.rpt +INFO: [DRC 23-27] Running DRC with 4 threads +INFO: [Coretcl 2-168] The results of DRC are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_drc_opted.rpt. +report_drc completed successfully +INFO: [Chipscope 16-241] No debug cores found in the current design. +Before running the implement_debug_core command, either use the Set Up Debug wizard (GUI mode) +or use the create_debug_core and connect_debug_core Tcl commands to insert debug cores into the design. +Command: place_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Command: report_drc (run_mandatory_drcs) for: incr_eco_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. +Running DRC as a precondition to command place_design +Command: report_drc (run_mandatory_drcs) for: placer_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. + +Starting Placer Task +INFO: [Place 30-611] Multithreading enabled for place_design using a maximum of 4 CPUs + +Phase 1 Placer Initialization + +Phase 1.1 Placer Initialization Netlist Sorting +Netlist sorting complete. Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9935 ; free virtual = 20167 +Phase 1.1 Placer Initialization Netlist Sorting | Checksum: 14ca5cf03 + +Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9935 ; free virtual = 20167 +INFO: [Timing 38-35] Done setting XDC timing constraints. +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +Netlist sorting complete. Time (s): cpu = 00:00:00 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9935 ; free virtual = 20167 + +Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device +INFO: [Timing 38-35] Done setting XDC timing constraints. +Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device | Checksum: e889b640 + +Time (s): cpu = 00:00:00.32 ; elapsed = 00:00:00.24 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9936 ; free virtual = 20168 + +Phase 1.3 Build Placer Netlist Model +Phase 1.3 Build Placer Netlist Model | Checksum: 1d803f5c8 + +Time (s): cpu = 00:00:00.33 ; elapsed = 00:00:00.24 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9936 ; free virtual = 20168 + +Phase 1.4 Constrain Clocks/Macros +Phase 1.4 Constrain Clocks/Macros | Checksum: 1d803f5c8 + +Time (s): cpu = 00:00:00.33 ; elapsed = 00:00:00.24 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9936 ; free virtual = 20168 +Phase 1 Placer Initialization | Checksum: 1d803f5c8 + +Time (s): cpu = 00:00:00.33 ; elapsed = 00:00:00.24 . Memory (MB): peak = 1850.715 ; gain = 0.000 ; free physical = 9936 ; free virtual = 20168 + +Phase 2 Global Placement +WARNING: [Place 46-30] place_design is not in timing mode. Skip physical synthesis in placer +Phase 2 Global Placement | Checksum: 1b5704437 + +Time (s): cpu = 00:00:00.62 ; elapsed = 00:00:00.37 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3 Detail Placement + +Phase 3.1 Commit Multi Column Macros +Phase 3.1 Commit Multi Column Macros | Checksum: 1b5704437 + +Time (s): cpu = 00:00:00.63 ; elapsed = 00:00:00.37 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3.2 Commit Most Macros & LUTRAMs +Phase 3.2 Commit Most Macros & LUTRAMs | Checksum: 14ee8c1ba + +Time (s): cpu = 00:00:00.64 ; elapsed = 00:00:00.37 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3.3 Area Swap Optimization +Phase 3.3 Area Swap Optimization | Checksum: 15274315a + +Time (s): cpu = 00:00:00.65 ; elapsed = 00:00:00.38 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3.4 Pipeline Register Optimization +Phase 3.4 Pipeline Register Optimization | Checksum: 15274315a + +Time (s): cpu = 00:00:00.66 ; elapsed = 00:00:00.38 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9930 ; free virtual = 20162 + +Phase 3.5 Small Shape Detail Placement +Phase 3.5 Small Shape Detail Placement | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.42 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 + +Phase 3.6 Re-assign LUT pins +Phase 3.6 Re-assign LUT pins | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.42 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 + +Phase 3.7 Pipeline Register Optimization +Phase 3.7 Pipeline Register Optimization | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.42 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 +Phase 3 Detail Placement | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.72 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 + +Phase 4 Post Placement Optimization and Clean-Up + +Phase 4.1 Post Commit Optimization +Phase 4.1 Post Commit Optimization | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.73 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20161 + +Phase 4.2 Post Placement Cleanup +Phase 4.2 Post Placement Cleanup | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20162 + +Phase 4.3 Placer Reporting +Phase 4.3 Placer Reporting | Checksum: 19b131221 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20162 + +Phase 4.4 Final Placement Cleanup +Phase 4.4 Final Placement Cleanup | Checksum: 147869b64 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20162 +Phase 4 Post Placement Optimization and Clean-Up | Checksum: 147869b64 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9929 ; free virtual = 20162 +Ending Placer Task | Checksum: c4929310 + +Time (s): cpu = 00:00:00.74 ; elapsed = 00:00:00.43 . Memory (MB): peak = 1882.730 ; gain = 32.016 ; free physical = 9932 ; free virtual = 20164 +36 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered. +place_design completed successfully +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.01 . Memory (MB): peak = 1882.730 ; gain = 0.000 ; free physical = 9931 ; free virtual = 20165 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_placed.dcp' has been generated. +report_io: Time (s): cpu = 00:00:00.11 ; elapsed = 00:00:00.14 . Memory (MB): peak = 1882.730 ; gain = 0.000 ; free physical = 9923 ; free virtual = 20155 +report_utilization: Time (s): cpu = 00:00:00.08 ; elapsed = 00:00:00.10 . Memory (MB): peak = 1882.730 ; gain = 0.000 ; free physical = 9929 ; free virtual = 20161 +report_control_sets: Time (s): cpu = 00:00:00.05 ; elapsed = 00:00:00.08 . Memory (MB): peak = 1882.730 ; gain = 0.000 ; free physical = 9929 ; free virtual = 20161 +Command: route_design +Attempting to get a license for feature 'Implementation' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xc7z010-clg400' +Running DRC as a precondition to command route_design +Command: report_drc (run_mandatory_drcs) for: router_checks +INFO: [DRC 23-27] Running DRC with 4 threads +report_drc (run_mandatory_drcs) completed successfully +INFO: [Vivado_Tcl 4-198] DRC finished with 0 Errors +INFO: [Vivado_Tcl 4-199] Please refer to the DRC report (report_drc) for more information. + + +Starting Routing Task +INFO: [Route 35-254] Multithreading enabled for route_design using a maximum of 4 CPUs +Checksum: PlaceDB: a243f121 ConstDB: 0 ShapeSum: 224ea1ef RouteDB: 0 + +Phase 1 Build RT Design +Phase 1 Build RT Design | Checksum: 17af5ee1d + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1894.719 ; gain = 11.988 ; free physical = 9856 ; free virtual = 20088 + +Phase 2 Router Initialization +INFO: [Route 35-64] No timing constraints were detected. The router will operate in resource-optimization mode. + +Phase 2.1 Fix Topology Constraints +Phase 2.1 Fix Topology Constraints | Checksum: 17af5ee1d + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1908.719 ; gain = 25.988 ; free physical = 9841 ; free virtual = 20073 + +Phase 2.2 Pre Route Cleanup +Phase 2.2 Pre Route Cleanup | Checksum: 17af5ee1d + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1908.719 ; gain = 25.988 ; free physical = 9841 ; free virtual = 20073 + Number of Nodes with overlaps = 0 +Phase 2 Router Initialization | Checksum: 1a406675 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9834 ; free virtual = 20066 + +Phase 3 Initial Routing +Phase 3 Initial Routing | Checksum: 3ac3d490 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 4 Rip-up And Reroute + +Phase 4.1 Global Iteration 0 + Number of Nodes with overlaps = 0 +Phase 4.1 Global Iteration 0 | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 +Phase 4 Rip-up And Reroute | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 5 Delay and Skew Optimization +Phase 5 Delay and Skew Optimization | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 6 Post Hold Fix + +Phase 6.1 Hold Fix Iter +Phase 6.1 Hold Fix Iter | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 +Phase 6 Post Hold Fix | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 7 Route finalize + +Router Utilization Summary + Global Vertical Routing Utilization = 0.0318131 % + Global Horizontal Routing Utilization = 0.0078125 % + Routable Net Status* + *Does not include unroutable nets such as driverless and loadless. + Run report_route_status for detailed report. + Number of Failed Nets = 0 + Number of Unrouted Nets = 0 + Number of Partially Routed Nets = 0 + Number of Node Overlaps = 0 + +Congestion Report +North Dir 1x1 Area, Max Cong = 16.2162%, No Congested Regions. +South Dir 1x1 Area, Max Cong = 16.2162%, No Congested Regions. +East Dir 1x1 Area, Max Cong = 7.35294%, No Congested Regions. +West Dir 1x1 Area, Max Cong = 2.94118%, No Congested Regions. +Phase 7 Route finalize | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1917.719 ; gain = 34.988 ; free physical = 9837 ; free virtual = 20069 + +Phase 8 Verifying routed nets + + Verification completed successfully +Phase 8 Verifying routed nets | Checksum: 16dd6649b + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1919.719 ; gain = 36.988 ; free physical = 9836 ; free virtual = 20068 + +Phase 9 Depositing Routes +Phase 9 Depositing Routes | Checksum: 103b01834 + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1919.719 ; gain = 36.988 ; free physical = 9836 ; free virtual = 20068 +INFO: [Route 35-16] Router Completed Successfully + +Time (s): cpu = 00:00:09 ; elapsed = 00:00:07 . Memory (MB): peak = 1919.719 ; gain = 36.988 ; free physical = 9852 ; free virtual = 20084 + +Routing Is Done. +44 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered. +route_design completed successfully +route_design: Time (s): cpu = 00:00:11 ; elapsed = 00:00:08 . Memory (MB): peak = 1945.750 ; gain = 63.020 ; free physical = 9852 ; free virtual = 20084 +Writing placer database... +Writing XDEF routing. +Writing XDEF routing logical nets. +Writing XDEF routing special nets. +Write XDEF Complete: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.02 . Memory (MB): peak = 1945.750 ; gain = 0.000 ; free physical = 9850 ; free virtual = 20084 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_routed.dcp' has been generated. +Command: report_drc -file midpoint_drc_routed.rpt -pb midpoint_drc_routed.pb -rpx midpoint_drc_routed.rpx +INFO: [DRC 23-27] Running DRC with 4 threads +INFO: [Coretcl 2-168] The results of DRC are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_drc_routed.rpt. +report_drc completed successfully +Command: report_methodology -file midpoint_methodology_drc_routed.rpt -rpx midpoint_methodology_drc_routed.rpx +INFO: [Timing 38-35] Done setting XDC timing constraints. +INFO: [DRC 23-133] Running Methodology with 4 threads +INFO: [Coretcl 2-1520] The results of Report Methodology are in file /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint_methodology_drc_routed.rpt. +report_methodology completed successfully +Command: report_power -file midpoint_power_routed.rpt -pb midpoint_power_summary_routed.pb -rpx midpoint_power_routed.rpx +WARNING: [Power 33-232] No user defined clocks were found in the design! +Resolution: Please specify clocks using create_clock/create_generated_clock for sequential elements. For pure combinatorial circuits, please specify a virtual clock, otherwise the vectorless estimation might be inaccurate +INFO: [Timing 38-35] Done setting XDC timing constraints. +Running Vector-less Activity Propagation... + +Finished Running Vector-less Activity Propagation +51 Infos, 2 Warnings, 0 Critical Warnings and 0 Errors encountered. +report_power completed successfully +INFO: [Timing 38-91] UpdateTimingParams: Speed grade: -1, Delay Type: min_max. +INFO: [Timing 38-191] Multithreading enabled for timing update using a maximum of 4 CPUs +WARNING: [Timing 38-313] There are no user specified timing constraints. Timing constraints are needed for proper timing analysis. +INFO: [Common 17-206] Exiting Vivado at Wed Oct 25 21:40:50 2017... diff --git a/sim/sim.runs/impl_1/midpoint_clock_utilization_routed.rpt b/sim/sim.runs/impl_1/midpoint_clock_utilization_routed.rpt new file mode 100644 index 0000000..5955862 --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint_clock_utilization_routed.rpt @@ -0,0 +1,154 @@ +Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. +-------------------------------------------------------------------------------------- +| Tool Version : Vivado v.2017.2 (lin64) Build 1909853 Thu Jun 15 18:39:10 MDT 2017 +| Date : Wed Oct 25 21:40:50 2017 +| Host : Kreyshawn running 64-bit Ubuntu 14.04.5 LTS +| Command : report_clock_utilization -file midpoint_clock_utilization_routed.rpt +| Design : midpoint +| Device : 7z010-clg400 +| Speed File : -1 PRODUCTION 1.11 2014-09-11 +-------------------------------------------------------------------------------------- + +Clock Utilization Report + +Table of Contents +----------------- +1. Clock Primitive Utilization +2. Global Clock Resources +3. Global Clock Source Details +4. Clock Regions: Key Resource Utilization +5. Clock Regions : Global Clock Summary +6. Device Cell Placement Summary for Global Clock g0 +7. Clock Region Cell Placement per Global Clock: Region X1Y0 +8. Clock Region Cell Placement per Global Clock: Region X1Y1 + +1. Clock Primitive Utilization +------------------------------ + ++----------+------+-----------+-----+--------------+--------+ +| Type | Used | Available | LOC | Clock Region | Pblock | ++----------+------+-----------+-----+--------------+--------+ +| BUFGCTRL | 1 | 32 | 0 | 0 | 0 | +| BUFH | 0 | 48 | 0 | 0 | 0 | +| BUFIO | 0 | 8 | 0 | 0 | 0 | +| BUFMR | 0 | 4 | 0 | 0 | 0 | +| BUFR | 0 | 8 | 0 | 0 | 0 | +| MMCM | 0 | 2 | 0 | 0 | 0 | +| PLL | 0 | 2 | 0 | 0 | 0 | ++----------+------+-----------+-----+--------------+--------+ + + +2. Global Clock Resources +------------------------- + ++-----------+-----------+-----------------+------------+----------------+--------------+-------------------+-------------+-----------------+--------------+-------+----------------------+---------------+ +| Global Id | Source Id | Driver Type/Pin | Constraint | Site | Clock Region | Load Clock Region | Clock Loads | Non-Clock Loads | Clock Period | Clock | Driver Pin | Net | ++-----------+-----------+-----------------+------------+----------------+--------------+-------------------+-------------+-----------------+--------------+-------+----------------------+---------------+ +| g0 | src0 | BUFG/O | None | BUFGCTRL_X0Y16 | n/a | 2 | 28 | 0 | | | clk_IBUF_BUFG_inst/O | clk_IBUF_BUFG | ++-----------+-----------+-----------------+------------+----------------+--------------+-------------------+-------------+-----------------+--------------+-------+----------------------+---------------+ +* Clock Loads column represents the clock pin loads (pin count) +** Non-Clock Loads column represents the non-clock pin loads (pin count) + + +3. Global Clock Source Details +------------------------------ + ++-----------+-----------+-----------------+------------+-----------+--------------+-------------+-----------------+---------------------+--------------+-----------------+----------+ +| Source Id | Global Id | Driver Type/Pin | Constraint | Site | Clock Region | Clock Loads | Non-Clock Loads | Source Clock Period | Source Clock | Driver Pin | Net | ++-----------+-----------+-----------------+------------+-----------+--------------+-------------+-----------------+---------------------+--------------+-----------------+----------+ +| src0 | g0 | IBUF/O | IOB_X0Y78 | IOB_X0Y78 | X1Y1 | 1 | 0 | | | clk_IBUF_inst/O | clk_IBUF | ++-----------+-----------+-----------------+------------+-----------+--------------+-------------+-----------------+---------------------+--------------+-----------------+----------+ +* Clock Loads column represents the clock pin loads (pin count) +** Non-Clock Loads column represents the non-clock pin loads (pin count) + + +4. Clock Regions: Key Resource Utilization +------------------------------------------ + ++-------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ +| | Global Clock | BUFRs | BUFMRs | BUFIOs | MMCM | PLL | GT | PCI | ILOGIC | OLOGIC | FF | LUTM | RAMB18 | RAMB36 | DSP48E2 | ++-------------------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+ +| Clock Region Name | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | Used | Avail | ++-------------------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+ +| X0Y0 | 0 | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1100 | 0 | 400 | 0 | 20 | 0 | 10 | 0 | 20 | +| X1Y0 | 1 | 12 | 0 | 4 | 0 | 2 | 0 | 4 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 50 | 0 | 50 | 27 | 1100 | 14 | 350 | 0 | 40 | 0 | 20 | 0 | 20 | +| X0Y1 | 0 | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1100 | 0 | 400 | 0 | 20 | 0 | 10 | 0 | 20 | +| X1Y1 | 1 | 12 | 0 | 4 | 0 | 2 | 0 | 4 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 50 | 0 | 50 | 1 | 1100 | 1 | 350 | 0 | 40 | 0 | 20 | 0 | 20 | ++-------------------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+------+-------+ +* Global Clock column represents track count; while other columns represents cell counts + + +5. Clock Regions : Global Clock Summary +--------------------------------------- + ++----+----+----+ +| | X0 | X1 | ++----+----+----+ +| Y1 | 0 | 1 | +| Y0 | 0 | 1 | ++----+----+----+ + + +6. Device Cell Placement Summary for Global Clock g0 +---------------------------------------------------- + ++-----------+-----------------+-------------------+-------+-------------+---------------+-------------+----------+----------------+----------+---------------+ +| Global Id | Driver Type/Pin | Driver Region (D) | Clock | Period (ns) | Waveform (ns) | Slice Loads | IO Loads | Clocking Loads | GT Loads | Net | ++-----------+-----------------+-------------------+-------+-------------+---------------+-------------+----------+----------------+----------+---------------+ +| g0 | BUFG/O | n/a | | | | 28 | 0 | 0 | 0 | clk_IBUF_BUFG | ++-----------+-----------------+-------------------+-------+-------------+---------------+-------------+----------+----------------+----------+---------------+ +* Logic Loads column represents load cell count of all cell types other than IO, GT and clock resources +** IO Loads column represents load cell count of IO types +*** Clocking Loads column represents load cell count that are clock resources (global clock buffer, MMCM, PLL, etc) +**** GT Loads column represents load cell count of GT types + + ++----+----+-----+ +| | X0 | X1 | ++----+----+-----+ +| Y1 | 0 | 1 | +| Y0 | 0 | 27 | ++----+----+-----+ + + +7. Clock Region Cell Placement per Global Clock: Region X1Y0 +------------------------------------------------------------ + ++-----------+-------+-----------------+------------+-------------+-----------------+----+--------+------+-----+----+------+-----+---------+---------------+ +| Global Id | Track | Driver Type/Pin | Constraint | Clock Loads | Non-Clock Loads | FF | LUTRAM | RAMB | DSP | GT | MMCM | PLL | Hard IP | Net | ++-----------+-------+-----------------+------------+-------------+-----------------+----+--------+------+-----+----+------+-----+---------+---------------+ +| g0 | n/a | BUFG/O | None | 27 | 0 | 27 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | clk_IBUF_BUFG | ++-----------+-------+-----------------+------------+-------------+-----------------+----+--------+------+-----+----+------+-----+---------+---------------+ +* Clock Loads column represents the clock pin loads (pin count) +** Non-Clock Loads column represents the non-clock pin loads (pin count) +*** Columns FF, LUTRAM, RAMB through 'Hard IP' represents load cell counts + + +8. Clock Region Cell Placement per Global Clock: Region X1Y1 +------------------------------------------------------------ + ++-----------+-------+-----------------+------------+-------------+-----------------+----+--------+------+-----+----+------+-----+---------+---------------+ +| Global Id | Track | Driver Type/Pin | Constraint | Clock Loads | Non-Clock Loads | FF | LUTRAM | RAMB | DSP | GT | MMCM | PLL | Hard IP | Net | ++-----------+-------+-----------------+------------+-------------+-----------------+----+--------+------+-----+----+------+-----+---------+---------------+ +| g0 | n/a | BUFG/O | None | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | clk_IBUF_BUFG | ++-----------+-------+-----------------+------------+-------------+-----------------+----+--------+------+-----+----+------+-----+---------+---------------+ +* Clock Loads column represents the clock pin loads (pin count) +** Non-Clock Loads column represents the non-clock pin loads (pin count) +*** Columns FF, LUTRAM, RAMB through 'Hard IP' represents load cell counts + + + +# Location of BUFG Primitives +set_property LOC BUFGCTRL_X0Y16 [get_cells clk_IBUF_BUFG_inst] + +# Location of IO Primitives which is load of clock spine + +# Location of clock ports +set_property LOC IOB_X0Y78 [get_ports clk] + +# Clock net "clk_IBUF_BUFG" driven by instance "clk_IBUF_BUFG_inst" located at site "BUFGCTRL_X0Y16" +#startgroup +create_pblock {CLKAG_clk_IBUF_BUFG} +add_cells_to_pblock [get_pblocks {CLKAG_clk_IBUF_BUFG}] [get_cells -filter { PRIMITIVE_GROUP != I/O && IS_PRIMITIVE==1 && PRIMITIVE_LEVEL !=INTERNAL } -of_object [get_pins -filter {DIRECTION==IN} -of_objects [get_nets -hierarchical -filter {PARENT=="clk_IBUF_BUFG"}]]] +resize_pblock [get_pblocks {CLKAG_clk_IBUF_BUFG}] -add {CLOCKREGION_X1Y0:CLOCKREGION_X1Y0 CLOCKREGION_X1Y1:CLOCKREGION_X1Y1} +#endgroup diff --git a/sim/sim.runs/impl_1/midpoint_control_sets_placed.rpt b/sim/sim.runs/impl_1/midpoint_control_sets_placed.rpt new file mode 100644 index 0000000..a7826de --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint_control_sets_placed.rpt @@ -0,0 +1,63 @@ +Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. +------------------------------------------------------------------------------------- +| Tool Version : Vivado v.2017.2 (lin64) Build 1909853 Thu Jun 15 18:39:10 MDT 2017 +| Date : Wed Oct 25 21:40:39 2017 +| Host : Kreyshawn running 64-bit Ubuntu 14.04.5 LTS +| Command : report_control_sets -verbose -file midpoint_control_sets_placed.rpt +| Design : midpoint +| Device : xc7z010 +------------------------------------------------------------------------------------- + +Control Set Information + +Table of Contents +----------------- +1. Summary +2. Flip-Flop Distribution +3. Detailed Control Set Information + +1. Summary +---------- + ++----------------------------------------------------------+-------+ +| Status | Count | ++----------------------------------------------------------+-------+ +| Number of unique control sets | 2 | +| Unused register locations in slices containing registers | 4 | ++----------------------------------------------------------+-------+ + + +2. Flip-Flop Distribution +------------------------- + ++--------------+-----------------------+------------------------+-----------------+--------------+ +| Clock Enable | Synchronous Set/Reset | Asynchronous Set/Reset | Total Registers | Total Slices | ++--------------+-----------------------+------------------------+-----------------+--------------+ +| No | No | No | 15 | 6 | +| No | No | Yes | 0 | 0 | +| No | Yes | No | 0 | 0 | +| Yes | No | No | 0 | 0 | +| Yes | No | Yes | 0 | 0 | +| Yes | Yes | No | 13 | 3 | ++--------------+-----------------------+------------------------+-----------------+--------------+ + + +3. Detailed Control Set Information +----------------------------------- + ++----------------+----------------+------------------+------------------+----------------+ +| Clock Signal | Enable Signal | Set/Reset Signal | Slice Load Count | Bel Load Count | ++----------------+----------------+------------------+------------------+----------------+ +| clk_IBUF_BUFG | i1/data_reg[7] | i1/neg_edg | 3 | 13 | +| clk_IBUF_BUFG | | | 6 | 15 | ++----------------+----------------+------------------+------------------+----------------+ + + ++--------+-----------------------+ +| Fanout | Number of ControlSets | ++--------+-----------------------+ +| 13 | 1 | +| 15 | 1 | ++--------+-----------------------+ + + diff --git a/sim/sim.runs/impl_1/midpoint_drc_opted.rpt b/sim/sim.runs/impl_1/midpoint_drc_opted.rpt new file mode 100644 index 0000000..634d3df --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint_drc_opted.rpt @@ -0,0 +1,41 @@ +Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. +------------------------------------------------------------------------------------ +| Tool Version : Vivado v.2017.2 (lin64) Build 1909853 Thu Jun 15 18:39:10 MDT 2017 +| Date : Wed Oct 25 21:40:38 2017 +| Host : Kreyshawn running 64-bit Ubuntu 14.04.5 LTS +| Command : report_drc -file midpoint_drc_opted.rpt +| Design : midpoint +| Device : xc7z010clg400-1 +| Speed File : -1 +| Design State : Synthesized +------------------------------------------------------------------------------------ + +Report DRC + +Table of Contents +----------------- +1. REPORT SUMMARY +2. REPORT DETAILS + +1. REPORT SUMMARY +----------------- + Netlist: netlist + Floorplan: design_1 + Design limits: + Ruledeck: default + Max violations: + Violations found: 1 ++--------+----------+--------------------+------------+ +| Rule | Severity | Description | Violations | ++--------+----------+--------------------+------------+ +| ZPS7-1 | Warning | PS7 block required | 1 | ++--------+----------+--------------------+------------+ + +2. REPORT DETAILS +----------------- +ZPS7-1#1 Warning +PS7 block required +The PS7 cell must be used in this Zynq design in order to enable correct default configuration. +Related violations: + + diff --git a/sim/sim.runs/impl_1/midpoint_drc_routed.pb b/sim/sim.runs/impl_1/midpoint_drc_routed.pb new file mode 100644 index 0000000000000000000000000000000000000000..70698d16a043af0b5d745495ba43bfe143354a40 GIT binary patch literal 37 scmd;LGcqtV(KDRH% + Ruledeck: default + Max violations: + Violations found: 1 ++--------+----------+--------------------+------------+ +| Rule | Severity | Description | Violations | ++--------+----------+--------------------+------------+ +| ZPS7-1 | Warning | PS7 block required | 1 | ++--------+----------+--------------------+------------+ + +2. REPORT DETAILS +----------------- +ZPS7-1#1 Warning +PS7 block required +The PS7 cell must be used in this Zynq design in order to enable correct default configuration. +Related violations: + + diff --git a/sim/sim.runs/impl_1/midpoint_drc_routed.rpx b/sim/sim.runs/impl_1/midpoint_drc_routed.rpx new file mode 100644 index 0000000000000000000000000000000000000000..6be47600c586275974a14c8f69de365fe04a3767 GIT binary patch literal 351 zcmcJKK}!QM5QP&KYO#o=P?UNZ>P>KQS5U83Po7E@g + Max violations: + Violations found: 28 ++-----------+----------+-----------------------------+------------+ +| Rule | Severity | Description | Violations | ++-----------+----------+-----------------------------+------------+ +| TIMING-17 | Warning | Non-clocked sequential cell | 28 | ++-----------+----------+-----------------------------+------------+ + +2. REPORT DETAILS +----------------- +TIMING-17#1 Warning +Non-clocked sequential cell +The clock pin i1/conditioned_reg/C is not reached by a timing clock +Related violations: + +TIMING-17#2 Warning +Non-clocked sequential cell +The clock pin i1/negativeedge_reg/C is not reached by a timing clock +Related violations: + +TIMING-17#3 Warning +Non-clocked sequential cell +The clock pin i1/prev_vals_reg[0]/C is not reached by a timing clock +Related violations: + +TIMING-17#4 Warning +Non-clocked sequential cell +The clock pin i1/prev_vals_reg[1]/C is not reached by a timing clock +Related violations: + +TIMING-17#5 Warning +Non-clocked sequential cell +The clock pin i1/prev_vals_reg[2]/C is not reached by a timing clock +Related violations: + +TIMING-17#6 Warning +Non-clocked sequential cell +The clock pin i2/conditioned_reg/C is not reached by a timing clock +Related violations: + +TIMING-17#7 Warning +Non-clocked sequential cell +The clock pin i2/prev_vals_reg[0]/C is not reached by a timing clock +Related violations: + +TIMING-17#8 Warning +Non-clocked sequential cell +The clock pin i2/prev_vals_reg[1]/C is not reached by a timing clock +Related violations: + +TIMING-17#9 Warning +Non-clocked sequential cell +The clock pin i2/prev_vals_reg[2]/C is not reached by a timing clock +Related violations: + +TIMING-17#10 Warning +Non-clocked sequential cell +The clock pin i3/conditioned_reg/C is not reached by a timing clock +Related violations: + +TIMING-17#11 Warning +Non-clocked sequential cell +The clock pin i3/positiveedge_reg/C is not reached by a timing clock +Related violations: + +TIMING-17#12 Warning +Non-clocked sequential cell +The clock pin i3/prev_vals_reg[0]/C is not reached by a timing clock +Related violations: + +TIMING-17#13 Warning +Non-clocked sequential cell +The clock pin i3/prev_vals_reg[1]/C is not reached by a timing clock +Related violations: + +TIMING-17#14 Warning +Non-clocked sequential cell +The clock pin i3/prev_vals_reg[2]/C is not reached by a timing clock +Related violations: + +TIMING-17#15 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[0]/C is not reached by a timing clock +Related violations: + +TIMING-17#16 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[1]/C is not reached by a timing clock +Related violations: + +TIMING-17#17 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[1]_lopt_replica/C is not reached by a timing clock +Related violations: + +TIMING-17#18 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[2]/C is not reached by a timing clock +Related violations: + +TIMING-17#19 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[2]_lopt_replica/C is not reached by a timing clock +Related violations: + +TIMING-17#20 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[3]/C is not reached by a timing clock +Related violations: + +TIMING-17#21 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[3]_lopt_replica/C is not reached by a timing clock +Related violations: + +TIMING-17#22 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[4]/C is not reached by a timing clock +Related violations: + +TIMING-17#23 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[4]_lopt_replica/C is not reached by a timing clock +Related violations: + +TIMING-17#24 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[5]/C is not reached by a timing clock +Related violations: + +TIMING-17#25 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[5]_lopt_replica/C is not reached by a timing clock +Related violations: + +TIMING-17#26 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[6]/C is not reached by a timing clock +Related violations: + +TIMING-17#27 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[6]_lopt_replica/C is not reached by a timing clock +Related violations: + +TIMING-17#28 Warning +Non-clocked sequential cell +The clock pin shft/data_reg[7]/C is not reached by a timing clock +Related violations: + + diff --git a/sim/sim.runs/impl_1/midpoint_methodology_drc_routed.rpx b/sim/sim.runs/impl_1/midpoint_methodology_drc_routed.rpx new file mode 100644 index 0000000000000000000000000000000000000000..f9f35f79aeb5609eab11f55b183bad8418cf0a5b GIT binary patch literal 7049 zcmb`KUr*Ce7>75e0|v-MopYN>1My}FY;E@k)EgOUm@)|=pklMs_P8~awr+*MotIu3 zKcsgW-51cF7O>}R>CXCgw_ATb&w2Wu{hE)(Vl$a^CYKb-d~Ho!UfA7iA86(t>YwU% z|AX^&D#5P_ODiXuYMGj0w@;AWHC0nLI~Q%Wr?h+Ksg2aNo^_u6>wFfw1uJ$Q`x1|R zjTgSfW8V|Go&Q&GjV@A-``l&zPkj4$I+2?`lzWC|be3oLw|BN%FIV|`G2b$cRYf~|68{+6>egVXquVj8MuYo>wJb`Nz*4NmKG zhG}y>Br9Df@#6(2bGCNk+||3X8AZq-SxDt(lIf{jyupdZMQRzpG4K=+Sa5*1hJX#! zk!|e^A+>{8i6coFBp;^oSICuOnqG*@oB%S5BblupI%}WFdLIKHl_eI-!^|O42xg&} zrXyVD8$jj?12Z29GgAt|%+t)g=B|k zz`}$O2iVim2iP>0ApO8Iy$FTIJ?t6zj?wRa zvP-IL%M+Asc*G!?O=Yg$F7}FZz6H3XX(%afUxCYHd!XSF1nI7il$RFbj?>#vQe3-Q zK~8z8t(%tZ__cIRky#2@#Ce0{qtwck?So?W+BUT`SN#%nLvSYx^u{!hO?U*M{*6z) z;Hkd@CB;oFP?Zp|`pNSM^@l$7RFtd!E^tEx+|mNQiA*n<@CZVE%coxS)Zc@W;&v9O zUW{1%>X{-4^*cWG6;J(rC@HRMf$A#}tDiiNQ2)-S zo{DnSXQ3N{t6ZS^DqKBN1fl-5Pkq%>{{Tvg`&*#;YQ*X%&m+{o_o=6%T=hBVhK#Lw zHMn}F2txfUpZc1oJ`W`wTk~oWtDiiNP=Dl8Per-v3(yT2Tl4C0^-K|j`le5PUHS(P CCD-Nv literal 0 HcmV?d00001 diff --git a/sim/sim.runs/impl_1/midpoint_opt.dcp b/sim/sim.runs/impl_1/midpoint_opt.dcp new file mode 100644 index 0000000000000000000000000000000000000000..c369fdfa376dcd98d5184eaa5f4b03805d2ee82f GIT binary patch literal 214554 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 z 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

TlUhM;iV>S{V_m%MVYX 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 I/Os" view | +| Internal nodes activity | Medium | User specified less than 25% of internal nodes | Provide missing internal nodes activity with simulation results or by editing the "By Resource Type" views | +| Device models | High | Device models are Production | | +| | | | | +| Overall confidence level | Low | | | ++-----------------------------+------------+--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+ + + +2. Settings +----------- + +2.1 Environment +--------------- + ++-----------------------+------------------------+ +| Ambient Temp (C) | 25.0 | +| ThetaJA (C/W) | 11.5 | +| Airflow (LFM) | 250 | +| Heat Sink | none | +| ThetaSA (C/W) | 0.0 | +| Board Selection | medium (10"x10") | +| # of Board Layers | 8to11 (8 to 11 Layers) | +| Board Temperature (C) | 25.0 | ++-----------------------+------------------------+ + + +2.2 Clock Constraints +--------------------- + ++-------+--------+-----------------+ +| Clock | Domain | Constraint (ns) | ++-------+--------+-----------------+ + + +3. Detailed Reports +------------------- + +3.1 By Hierarchy +---------------- + ++----------+-----------+ +| Name | Power (W) | ++----------+-----------+ +| midpoint | 1.087 | +| i1 | 0.013 | +| i2 | 0.008 | +| i3 | 0.010 | +| shft | 0.009 | ++----------+-----------+ + + diff --git a/sim/sim.runs/impl_1/midpoint_power_routed.rpx b/sim/sim.runs/impl_1/midpoint_power_routed.rpx new file mode 100644 index 0000000000000000000000000000000000000000..b7044edf3e633a37da3c4579e398648e4fcf430f GIT binary patch literal 17138 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 literal 0 HcmV?d00001 diff --git a/sim/sim.runs/impl_1/midpoint_power_summary_routed.pb b/sim/sim.runs/impl_1/midpoint_power_summary_routed.pb new file mode 100644 index 0000000000000000000000000000000000000000..1fb9b2da834c942f3a1577ee64f1dccf821f11d2 GIT binary patch literal 722 zcmZ|NO=#3W6bJAbDtizGQF;)Cj)(SQS#()-wXOTXS}Izopi~cvA(`EdCNpa$*>x+@ zQVAj+goOw~4^jwt6U3bK;zFPx^ia%2FIvdSo4DsXZ&suibNKOR<|U8t-u_(S)agRL z*c(}15FP3ggBx~NGD#Y)aL8q+WmAW8k6MIN&t}rgld9>lHuJi~qAqKz8(nG&E_mzC@!)WnluPykbHRGKw@&J0Qjk!o@t za(Dr9rd0J)U~&-*%V1Uq<4a&L3#QuOiq6{T8svdCS%e(k1hd;@X=AZxVmc zM@_u~{VzB-Pc7y|T#{H)TC5OUnwy(gRC$1h;eilCgQW5Tc?JLr1Pt2% literal 0 HcmV?d00001 diff --git a/sim/sim.runs/impl_1/midpoint_route_status.rpt b/sim/sim.runs/impl_1/midpoint_route_status.rpt new file mode 100644 index 0000000..63629c3 --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint_route_status.rpt @@ -0,0 +1,11 @@ +Design Route Status + : # nets : + ------------------------------------------- : ----------- : + # of logical nets.......................... : 54 : + # of nets not needing routing.......... : 19 : + # of internally routed nets........ : 19 : + # of routable nets..................... : 35 : + # of fully routed nets............. : 35 : + # of nets with routing errors.......... : 0 : + ------------------------------------------- : ----------- : + diff --git a/sim/sim.runs/impl_1/midpoint_routed.dcp b/sim/sim.runs/impl_1/midpoint_routed.dcp new file mode 100644 index 0000000000000000000000000000000000000000..e5c5516afa087ef300f1982112873fae608db41a GIT binary patch literal 225597 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

  • xy{~Jv_7&f>w{%pYxZDeo1RgM;y^DhwR zn_ZXr=Lms0!K1+U=pT#m^4P1MUi}YxX7boThQEPfx{5*Xy&C@sgC4DWI#VA?@meOs z9nc9NAAMlzOU?KD#u}n0!;Zs1fx<-@YvVLo_Ny!Or;@r{M9Sz+;B6Kkq}hIAdlqmleSNv` z
    p;N{san}V_Uym9a{r0pi{au~5JdVO&s=znc+bER31SO5};RB)uexzb`g5Qx9= zFVPlCWAZG~K1)UNMkGJds535^crxxiH>Q-((*bt!9*GOdZ5oX5aQza`|5uV7&+s_d zuZQfct-g>Iu6i>`{Ns~;rfwdpo!5<7Jk^&T^3DkF*|^nj!f#Cc*3LzuFEOkFx8+p# zDDp{9V@K{>%Kbq1&pkwGQ}+&BU~c{7lx(~xsKiO@&zcw-k)>o#_q~wtS%eIh>o=! zcj2h25>I$EgKV#oiF)*@XD<(=~83*-=0m%ONJKJ)mK;GN#0Sn zbFcvW*!hv-E0iA@Nzme2E})~0yz6{ITBgr+@n+9U1;dyp?|^L?DQ@vR*_g%Vh1*t* zo_bp=g3vXwX*YtQHsG^as~P8c?{ma;YK9A+$f~tR|L}Hl?lg-$sD~C(4oi(sstTbL zfAsGsP&hi$jFTv-%yL17Wc}X5n@1^PW}9hGJYI`MBkc<9aRO2b9D|An;^hfkVEJ+g zWo5H$V27bhKQFWU(k5|ye{1uA^AT~8aQ%?A&iF`KNxojnvs%__sJ8h)Nmou`X}|FU z5(VvJ)@q588r?{Ajg(fUhY2Oy+U7@HFnp>fWlClLd4Rr7!2rk#lKDMQc;j^+A=9@!iiH!f z{dDY|tv5dnLpYR*&*ER^G&&r8qG*!xdsiy*(8c{!wnEY@ku8R_QOYmzcMV*&!qMF> zhajmb%+`X@9rv;uv9-nWk%FgjLep2!(xtrc)UkI(|LBiDvA_BNq8o9Tx*n^SJXz8X zll3Z>jG2Ds`Uy$3Z{(3KX>U86dhLrMKf~&lLp;j*w!_M(wo*nYYOJ4CCeJ6xcIxjV z`H$f$N zIBCx&lzg2uAQl7>{Db>u!$a4ju#&ynH2wnC%k9|MVr+2{2aA8?VEC#_xEQ7!>h2LB z4V9+SBd=XBT+b4;Y=biuM=75jd0yed_t`34r3-wa5k&C)6nh?MzwTx~%&VNxtXug^ zsq{YYDrOOvL}<#d3t1roHXcl^oOzf~_Q-WN;+A`aDS}c>Ps?KMRev8jFJ>9qF0LL~ z#ancz-VW#1hn~_TVepSSmS(U>XJA?GfAsif-22Iourh)z_I!#OIX9;+Ad+gc#pp4Q zDNVsbrOHEN0kr)M!()qiFNC`r>F$IcrT5_KF_#reI`(Qk!#f4tcNUTQNavt?fbT$^ zGa&umD?$Koc#Y0mgtCS1$Ts#KGRj(s85w2$4jFnKf(*UJi!!c3*IRFj2Cg|J0k$_W zHbfYj0sQeDYwA;?*lF@+2h3%zFJ(6?h1+%Wu5BN)UuxlyjaJiwp&$}0u#n`Ux)b!{ z8Ss!`o{nwxAF;1AAm{@Q=xkb!p{!CmMYH`zA(UX*pdisKkHSW-3!#mEc;{cADyGc% zyC27zw+v4SZ8GLLYA)RpR|}&biW^y;{eXN?B_(jM3%UoHnOI?zd0!s+Gy?qea4P
    L_YV3~5Z7=`KEZ2E6d|-60*P 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

    Device Usage Page (usage_statistics_webtalk.html)

    This HTML page displays the device usage statistics that will be sent to Xilinx.
    To see the actual file transmitted to Xilinx, please click
    here.


    + + + + + + + + + + + + + + + + + +
    software_version_and_target_device
    betaFALSEbuild_version1909853
    date_generatedWed Oct 25 21:42:06 2017os_platformLIN64
    product_versionVivado v2017.2 (64-bit)project_idb8afe97cabab4552a300a6cd285ea8d7
    project_iteration2random_id9645f00e3026595abd5d9ced78dfe930
    registration_id9645f00e3026595abd5d9ced78dfe930route_designTRUE
    target_devicexc7z010target_familyzynq
    target_packageclg400target_speed-1
    tool_flowVivado

    + + + + + + + + +
    user_environment
    cpu_nameIntel(R) Core(TM) i7-5600U CPU @ 2.60GHzcpu_speed3100.804 MHz
    os_nameUbuntuos_releaseUbuntu 14.04.5 LTS
    system_ram16.000 GBtotal_processors1

    + + +
    vivado_usage
    + + + + + + + + + + + + + +
    java_command_handlers
    addsources=3autoconnecttarget=1launchprogramfpga=1newproject=1
    openhardwaremanager=2programdevice=1runbitgen=2runimplementation=4
    runsynthesis=6showview=2viewtaskimplementation=2viewtaskprojectmanager=1
    + + + +
    other_data
    guimode=1
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    project_data
    constraintsetcount=1core_container=falsecurrentimplrun=impl_1currentsynthesisrun=synth_1
    default_library=xil_defaultlibdesignmode=RTLexport_simulation_activehdl=0export_simulation_ies=0
    export_simulation_modelsim=0export_simulation_questa=0export_simulation_riviera=0export_simulation_vcs=0
    export_simulation_xsim=0implstrategy=Vivado Implementation Defaultslaunch_simulation_activehdl=0launch_simulation_ies=0
    launch_simulation_modelsim=0launch_simulation_questa=0launch_simulation_riviera=0launch_simulation_vcs=0
    launch_simulation_xsim=0simulator_language=Mixedsrcsetcount=1synthesisstrategy=Vivado Synthesis Defaults
    target_language=Verilogtarget_simulator=XSimtotalimplruns=1totalsynthesisruns=1
    +
    + + + + +
    unisim_transformation
    + + + + + + + + + + + +
    post_unisim_transformation
    bufg=1fdre=22gnd=4ibuf=4
    lut2=1lut4=4lut5=2obuf=8
    vcc=4
    +
    + + + + + + + + + + + +
    pre_unisim_transformation
    bufg=1fdre=22gnd=4ibuf=4
    lut2=1lut4=4lut5=2obuf=8
    vcc=4
    +

    + + + + +
    report_drc
    + + + + + + + + + + + + + +
    command_line_options
    -append=default::[not_specified]-checks=default::[not_specified]-fail_on=default::[not_specified]-force=default::[not_specified]
    -format=default::[not_specified]-messages=default::[not_specified]-name=default::[not_specified]-return_string=default::[not_specified]
    -ruledecks=default::[not_specified]-upgrade_cw=default::[not_specified]-waived=default::[not_specified]
    +
    + + + +
    results
    zps7-1=1
    +

    + + + + + + + + + +
    report_utilization
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    clocking
    bufgctrl_available=32bufgctrl_fixed=0bufgctrl_used=1bufgctrl_util_percentage=3.13
    bufhce_available=48bufhce_fixed=0bufhce_used=0bufhce_util_percentage=0.00
    bufio_available=8bufio_fixed=0bufio_used=0bufio_util_percentage=0.00
    bufmrce_available=4bufmrce_fixed=0bufmrce_used=0bufmrce_util_percentage=0.00
    bufr_available=8bufr_fixed=0bufr_used=0bufr_util_percentage=0.00
    mmcme2_adv_available=2mmcme2_adv_fixed=0mmcme2_adv_used=0mmcme2_adv_util_percentage=0.00
    plle2_adv_available=2plle2_adv_fixed=0plle2_adv_used=0plle2_adv_util_percentage=0.00
    +
    + + + + + + +
    dsp
    dsps_available=80dsps_fixed=0dsps_used=0dsps_util_percentage=0.00
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    io_standard
    blvds_25=0diff_hstl_i=0diff_hstl_i_18=0diff_hstl_ii=0
    diff_hstl_ii_18=0diff_hsul_12=0diff_mobile_ddr=0diff_sstl135=0
    diff_sstl135_r=0diff_sstl15=0diff_sstl15_r=0diff_sstl18_i=0
    diff_sstl18_ii=0hstl_i=0hstl_i_18=0hstl_ii=0
    hstl_ii_18=0hsul_12=0lvcmos12=0lvcmos15=0
    lvcmos18=0lvcmos25=0lvcmos33=1lvds_25=0
    lvttl=0mini_lvds_25=0mobile_ddr=0pci33_3=0
    ppds_25=0rsds_25=0sstl135=0sstl135_r=0
    sstl15=0sstl15_r=0sstl18_i=0sstl18_ii=0
    tmds_33=0
    +
    + + + + + + + + + + + + + + +
    memory
    block_ram_tile_available=60block_ram_tile_fixed=0block_ram_tile_used=0block_ram_tile_util_percentage=0.00
    ramb18_available=120ramb18_fixed=0ramb18_used=0ramb18_util_percentage=0.00
    ramb36_fifo_available=60ramb36_fifo_fixed=0ramb36_fifo_used=0ramb36_fifo_util_percentage=0.00
    +
    + + + + + + + + + + + + + + + + +
    primitives
    bufg_functional_category=Clockbufg_used=1fdre_functional_category=Flop & Latchfdre_used=28
    ibuf_functional_category=IOibuf_used=4lut2_functional_category=LUTlut2_used=1
    lut4_functional_category=LUTlut4_used=4lut5_functional_category=LUTlut5_used=2
    obuf_functional_category=IOobuf_used=8
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    slice_logic
    f7_muxes_available=8800f7_muxes_fixed=0f7_muxes_used=0f7_muxes_util_percentage=0.00
    f8_muxes_available=4400f8_muxes_fixed=0f8_muxes_used=0f8_muxes_util_percentage=0.00
    lut_as_logic_available=17600lut_as_logic_fixed=0lut_as_logic_used=5lut_as_logic_util_percentage=0.03
    lut_as_memory_available=6000lut_as_memory_fixed=0lut_as_memory_used=0lut_as_memory_util_percentage=0.00
    register_as_flip_flop_available=35200register_as_flip_flop_fixed=0register_as_flip_flop_used=28register_as_flip_flop_util_percentage=0.08
    register_as_latch_available=35200register_as_latch_fixed=0register_as_latch_used=0register_as_latch_util_percentage=0.00
    slice_luts_available=17600slice_luts_fixed=0slice_luts_used=5slice_luts_util_percentage=0.03
    slice_registers_available=35200slice_registers_fixed=0slice_registers_used=28slice_registers_util_percentage=0.08
    fully_used_lut_ff_pairs_fixed=0.08fully_used_lut_ff_pairs_used=2lut_as_distributed_ram_fixed=0lut_as_distributed_ram_used=0
    lut_as_logic_available=17600lut_as_logic_fixed=0lut_as_logic_used=5lut_as_logic_util_percentage=0.03
    lut_as_memory_available=6000lut_as_memory_fixed=0lut_as_memory_used=0lut_as_memory_util_percentage=0.00
    lut_as_shift_register_fixed=0lut_as_shift_register_used=0lut_ff_pairs_with_one_unused_flip_flop_fixed=0lut_ff_pairs_with_one_unused_flip_flop_used=2
    lut_ff_pairs_with_one_unused_lut_output_fixed=2lut_ff_pairs_with_one_unused_lut_output_used=2lut_flip_flop_pairs_available=17600lut_flip_flop_pairs_fixed=0
    lut_flip_flop_pairs_used=4lut_flip_flop_pairs_util_percentage=0.02slice_available=4400slice_fixed=0
    slice_used=9slice_util_percentage=0.20slicel_fixed=0slicel_used=3
    slicem_fixed=0slicem_used=6unique_control_sets_used=2using_o5_and_o6_fixed=2
    using_o5_and_o6_used=2using_o5_output_only_fixed=2using_o5_output_only_used=0using_o6_output_only_fixed=0
    using_o6_output_only_used=3
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    specific_feature
    bscane2_available=4bscane2_fixed=0bscane2_used=0bscane2_util_percentage=0.00
    capturee2_available=1capturee2_fixed=0capturee2_used=0capturee2_util_percentage=0.00
    dna_port_available=1dna_port_fixed=0dna_port_used=0dna_port_util_percentage=0.00
    efuse_usr_available=1efuse_usr_fixed=0efuse_usr_used=0efuse_usr_util_percentage=0.00
    frame_ecce2_available=1frame_ecce2_fixed=0frame_ecce2_used=0frame_ecce2_util_percentage=0.00
    icape2_available=2icape2_fixed=0icape2_used=0icape2_util_percentage=0.00
    startupe2_available=1startupe2_fixed=0startupe2_used=0startupe2_util_percentage=0.00
    xadc_available=1xadc_fixed=0xadc_used=0xadc_util_percentage=0.00
    +

    + + + +
    router
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    usage
    actual_expansions=120390bogomips=5188bram18=0bram36=0
    bufg=0bufr=0ctrls=2dsp=0
    effort=2estimated_expansions=31824ff=28global_clocks=1
    high_fanout_nets=0iob=12lut=5movable_instances=56
    nets=60pins=209pll=0router_runtime=0.000000
    router_timing_driven=1threads=4timing_constraints_exist=1
    +

    + + + + +
    synthesis
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    command_line_options
    -assert=default::[not_specified]-bufg=default::12-cascade_dsp=default::auto-constrset=default::[not_specified]
    -control_set_opt_threshold=default::auto-directive=default::default-fanout_limit=default::10000-flatten_hierarchy=default::rebuilt
    -fsm_extraction=default::auto-gated_clock_conversion=default::off-generic=default::[not_specified]-include_dirs=default::[not_specified]
    -keep_equivalent_registers=default::[not_specified]-max_bram=default::-1-max_bram_cascade_height=default::-1-max_dsp=default::-1
    -max_uram=default::-1-max_uram_cascade_height=default::-1-mode=default::default-name=default::[not_specified]
    -no_lc=default::[not_specified]-no_srlextract=default::[not_specified]-no_timing_driven=default::[not_specified]-part=xc7z010clg400-1
    -resource_sharing=default::auto-retiming=default::[not_specified]-rtl=default::[not_specified]-rtl_skip_constraints=default::[not_specified]
    -rtl_skip_ip=default::[not_specified]-seu_protect=default::none-sfcu=default::[not_specified]-shreg_min_size=default::3
    -top=midpoint-verilog_define=default::[not_specified]
    +
    + + + + + + +
    usage
    elapsed=00:00:18shls_ip=0memory_gain=405.352MBmemory_peak=1494.387MB
    +

    + + diff --git a/sim/sim.runs/impl_1/usage_statistics_webtalk.xml b/sim/sim.runs/impl_1/usage_statistics_webtalk.xml new file mode 100644 index 0000000..f27c44f --- /dev/null +++ b/sim/sim.runs/impl_1/usage_statistics_webtalk.xml @@ -0,0 +1,404 @@ + + +
    +
    + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    +
    + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    +
    +
    +
    + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    diff --git a/sim/sim.runs/impl_1/vivado.jou b/sim/sim.runs/impl_1/vivado.jou new file mode 100644 index 0000000..abbf37c --- /dev/null +++ b/sim/sim.runs/impl_1/vivado.jou @@ -0,0 +1,12 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:41:47 2017 +# Process ID: 8072 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1 +# Command line: vivado -log midpoint.vdi -applog -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.vdi +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace diff --git a/sim/sim.runs/impl_1/vivado.pb b/sim/sim.runs/impl_1/vivado.pb new file mode 100644 index 0000000000000000000000000000000000000000..762643646d1a4b4c093aa2a733bd60c0f41e7f7f GIT binary patch literal 149 zcmd;TVB`{Ut;j6N%u82LEmlY@0g`%pdRzjmQp`pMW?F2?`MJ6Ic}7xPY+;#Yi7EL; z>?x^fiKRIuRxpN<4wpoDYKnq?a*2YGse+NAm5Gs+fu(|xfuT93>L@ltb6udx84Lxi b6|55&83dTP__(-S^HLOoQj_zGQUn+QiS;JM literal 0 HcmV?d00001 diff --git a/sim/sim.runs/impl_1/vivado_29201.backup.jou b/sim/sim.runs/impl_1/vivado_29201.backup.jou new file mode 100644 index 0000000..5e42c18 --- /dev/null +++ b/sim/sim.runs/impl_1/vivado_29201.backup.jou @@ -0,0 +1,12 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:33:23 2017 +# Process ID: 29201 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1 +# Command line: vivado -log midpoint.vdi -applog -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.vdi +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace diff --git a/sim/sim.runs/impl_1/vivado_5899.backup.jou b/sim/sim.runs/impl_1/vivado_5899.backup.jou new file mode 100644 index 0000000..a38d241 --- /dev/null +++ b/sim/sim.runs/impl_1/vivado_5899.backup.jou @@ -0,0 +1,12 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:40:18 2017 +# Process ID: 5899 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1 +# Command line: vivado -log midpoint.vdi -applog -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.vdi +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace diff --git a/sim/sim.runs/impl_1/write_bitstream.pb b/sim/sim.runs/impl_1/write_bitstream.pb new file mode 100644 index 0000000000000000000000000000000000000000..46ed19d565f28f04bb606ee8e6a793ca924bf607 GIT binary patch literal 6204 zcmds5TW{RP753^{kBvmV*i989o;DS1ZN0nX?1fylX=+P$U^q@yONk8?&4NqLYH4%H zH7~jtMxToIH9%jAqOX0)59vc+`Zo&n2jn&18FDF7OVzs;?%SJ+hb`t!eH+QQ|S-vv9zB}1J{rF#C6nl zbefJm6|0UMS&0{K&3+uL>Y^dcUT=J1x^%MiMeV}c0{fhOhwa5y7`y%<4Dx*|dPY_k zb*){$WCwl}hZamk;(hk^IkOceR&=w0nMDhKtFa}fwo+d2uQm2XZQq?pelyzK;`TJ* zA8<|EQvaHo;6LTkv!;=BO5<(bDy?VuLf1?KvouUQgu^tascG~$ z3Z>-J@oD7RmZ!e#_RQJ%ksHQ|8Wx(V8S`5zZbh=jZQt@vUu41h)ORCy0ypJEB1C)? zgglhUl&uEX+Vc8>Zq!$O8GCLNiz}?wnYVDTEcy-IfT87+$zm}84b*Y@tGJd#M0gIa+#VV10EudpV}qO}wD-Y2Pt{Md@P9ZHKV9J}$D zY-~hWc~SKB`sy?co=Q6w>ulvS_sDXB`St0Y&~&3I=HDGG>y3`lFWUZ$z5Q`uITX+- zsxULAca8drBad8LQr(@{#tTi?Z11q6X$`$%;T3_ERo&$=e84t$kqj%OwX+PU40*w! zYx7_lyA$_?3M++fvEAwC8ze`&hE{YGWqftl3L{$W$<8*v=X#R=dL#NxdRmNr{gNXi z_s~yb*NepOYRqqqgNbZCjZmRsYeybQFPKuHwD#fJdMWIvERZGZ?|UWzIo! zW{2FdVrytcve{ItEa^Q>l$Tkh=$d^|T;~IJb+*ov9k@c648LZM808fxKSHC^pYP>g z3oP7-&O;+kVi6JXSPg{gy9@%=@ALR~Hh2bpgwL1P7dxg_UjfEU0$==?tYRWlll4&uCZ_FZOv%vW(8V_AFySG;}xdy3RI(4;0(R?4T z8it^RT|T*-qU~R5%y=ZDI0$hbMqx1FR%nmiBgtP9z!DJ?$VPZfnMaL0yu)9n{M^&a zRUxn?I4wXwRa;8mc6AWW{H_jEMfF9eSP);m5e1>KYdLDgIh7JRWE!i;KbQwgA^SOz{jtVwY@cbpDvBN^ zuIFUj**2g7W<>oH_WhJT_)$vA{ARDy7`pN1ylL?+Th;qo-|V*MUlJqsG^)znukoBz zUFf#!7mt)Mh;5IA>T&4CasYdfkT>80c(SR z*k7Kjqg{5bxbvCBjmN0YnS}1t7h&erV!hoEC9(eZ z8cTNf3_kP%`x*5A^TY*_Z1MfEAf)vr=C~{&3DNti88>9Y0^f-b=M==0>DE zP@c`lht%N#W;6(HR!&w@Hhj+3!FOkkMwHmLjG|HEd8bqg3j&33cF5c8`fJiPZ}?!T z)992m(}-Q6N*v8pX_gog=1ah&Zn5-kvhQj9ZWsn(bc^f!u@zD!SLL7TudVk>wePY! zyPkxoL#9S)xML)Wtf%`x$>rszN{yr0l*musg+a-sZuJUosqVTB&M!jbuUIQH76Gm@ zP;RE_-BEeJ?@+=~7&qcDkvEz|B^`7>GXy8xHARUJT(&u@;d4hYZ`rbX&KxzmT1j)h zsO7KUD0Sp`AYd)?xR|2exdTOtA*C{AS%#}d0?K!r@GN6jCuHgYf8y{aX;dP#--jD2?-Frf$t z;4`tN`FsIztk^||@|MebgIz7oPZ=>=qGr@D=75Idp*2bY7_fI9gGtHt{3{@HHhBTk z<7_r@R`aYg#P<~ka2Xbq%E-OD$FART<3s6lYD?2QhP}ek&uXcMM(T_P(omb~EaxTj zMsdLhjKEcZ>z{DM5Q*pa;Gg9Fcpu;ovcazz z+o*?aI+Jv%I2$F|NnfSx1Rl48#E&8Sq4gDYnnmio$`TXn6a`wrA9oxZ?0&>RTHn?>QzyvTMMIYHhYz~7U-lp mZN1s8?Elrhg)pmZruP=2qA05FE#6}6F6!+OgnQ_$)xHKzm?*IT literal 0 HcmV?d00001 diff --git a/sim/sim.runs/synth_1/.Vivado_Synthesis.queue.rst b/sim/sim.runs/synth_1/.Vivado_Synthesis.queue.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/synth_1/.Xil/midpoint_propImpl.xdc b/sim/sim.runs/synth_1/.Xil/midpoint_propImpl.xdc new file mode 100644 index 0000000..b66ff90 --- /dev/null +++ b/sim/sim.runs/synth_1/.Xil/midpoint_propImpl.xdc @@ -0,0 +1,25 @@ +set_property SRC_FILE_INFO {cfile:/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc rfile:../../../../ZYBO_Master.xdc id:1} [current_design] +set_property src_info {type:XDC file:1 line:8 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L11P_T1_SRCC_35 Sch=sysclk +set_property src_info {type:XDC file:1 line:13 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN G15 IOSTANDARD LVCMOS33 } [get_ports { sw[0] }]; #IO_L19N_T3_VREF_35 Sch=SW0 +set_property src_info {type:XDC file:1 line:14 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { sw[1] }]; #IO_L24P_T3_34 Sch=SW1 +set_property src_info {type:XDC file:1 line:20 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN R18 IOSTANDARD LVCMOS33 } [get_ports { btn }]; #IO_L20N_T3_34 Sch=BTN0 +set_property src_info {type:XDC file:1 line:114 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN V12 IOSTANDARD LVCMOS33 } [get_ports { je[0] }]; #IO_L4P_T0_34 Sch=JE1 +set_property src_info {type:XDC file:1 line:115 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN W16 IOSTANDARD LVCMOS33 } [get_ports { je[1] }]; #IO_L18N_T2_34 Sch=JE2 +set_property src_info {type:XDC file:1 line:116 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports { je[2] }]; #IO_25_35 Sch=JE3 +set_property src_info {type:XDC file:1 line:117 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { je[3] }]; #IO_L19P_T3_35 Sch=JE4 +set_property src_info {type:XDC file:1 line:118 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN V13 IOSTANDARD LVCMOS33 } [get_ports { je[4] }]; #IO_L3N_T0_DQS_34 Sch=JE7 +set_property src_info {type:XDC file:1 line:119 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN U17 IOSTANDARD LVCMOS33 } [get_ports { je[5] }]; #IO_L9N_T1_DQS_34 Sch=JE8 +set_property src_info {type:XDC file:1 line:120 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN T17 IOSTANDARD LVCMOS33 } [get_ports { je[6] }]; #IO_L20P_T3_34 Sch=JE9 +set_property src_info {type:XDC file:1 line:121 export:INPUT save:INPUT read:READ} [current_design] +set_property -dict { PACKAGE_PIN Y17 IOSTANDARD LVCMOS33 } [get_ports { je[7] }]; #IO_L7N_T1_34 Sch=JE10 diff --git a/sim/sim.runs/synth_1/.vivado.begin.rst b/sim/sim.runs/synth_1/.vivado.begin.rst new file mode 100644 index 0000000..34b284d --- /dev/null +++ b/sim/sim.runs/synth_1/.vivado.begin.rst @@ -0,0 +1,5 @@ + + + + + diff --git a/sim/sim.runs/synth_1/.vivado.end.rst b/sim/sim.runs/synth_1/.vivado.end.rst new file mode 100644 index 0000000..e69de29 diff --git a/sim/sim.runs/synth_1/ISEWrap.js b/sim/sim.runs/synth_1/ISEWrap.js new file mode 100755 index 0000000..8284d2d --- /dev/null +++ b/sim/sim.runs/synth_1/ISEWrap.js @@ -0,0 +1,244 @@ +// +// Vivado(TM) +// ISEWrap.js: Vivado Runs Script for WSH 5.1/5.6 +// Copyright 1986-1999, 2001-2013,2015 Xilinx, Inc. All Rights Reserved. +// + +// GLOBAL VARIABLES +var ISEShell = new ActiveXObject( "WScript.Shell" ); +var ISEFileSys = new ActiveXObject( "Scripting.FileSystemObject" ); +var ISERunDir = ""; +var ISELogFile = "runme.log"; +var ISELogFileStr = null; +var ISELogEcho = true; +var ISEOldVersionWSH = false; + + + +// BOOTSTRAP +ISEInit(); + + + +// +// ISE FUNCTIONS +// +function ISEInit() { + + // 1. RUN DIR setup + var ISEScrFP = WScript.ScriptFullName; + var ISEScrN = WScript.ScriptName; + ISERunDir = + ISEScrFP.substr( 0, ISEScrFP.length - ISEScrN.length - 1 ); + + // 2. LOG file setup + ISELogFileStr = ISEOpenFile( ISELogFile ); + + // 3. LOG echo? + var ISEScriptArgs = WScript.Arguments; + for ( var loopi=0; loopi> " + ISELogFile + " 2>&1"; + ISEExitCode = ISEShell.Run( ISECmdLine, 0, true ); + ISELogFileStr = ISEOpenFile( ISELogFile ); + + } else { // WSH 5.6 + + // LAUNCH! + ISEShell.CurrentDirectory = ISERunDir; + + // Redirect STDERR to STDOUT + ISECmdLine = "%comspec% /c " + ISECmdLine + " 2>&1"; + var ISEProcess = ISEShell.Exec( ISECmdLine ); + + // BEGIN file creation + var ISENetwork = WScript.CreateObject( "WScript.Network" ); + var ISEHost = ISENetwork.ComputerName; + var ISEUser = ISENetwork.UserName; + var ISEPid = ISEProcess.ProcessID; + var ISEBeginFile = ISEOpenFile( "." + ISEStep + ".begin.rst" ); + ISEBeginFile.WriteLine( "" ); + ISEBeginFile.WriteLine( "" ); + ISEBeginFile.WriteLine( " " ); + ISEBeginFile.WriteLine( " " ); + ISEBeginFile.WriteLine( "" ); + ISEBeginFile.Close(); + + var ISEOutStr = ISEProcess.StdOut; + var ISEErrStr = ISEProcess.StdErr; + + // WAIT for ISEStep to finish + while ( ISEProcess.Status == 0 ) { + + // dump stdout then stderr - feels a little arbitrary + while ( !ISEOutStr.AtEndOfStream ) { + ISEStdOut( ISEOutStr.ReadLine() ); + } + + WScript.Sleep( 100 ); + } + + ISEExitCode = ISEProcess.ExitCode; + } + + ISELogFileStr.Close(); + + // END/ERROR file creation + if ( ISEExitCode != 0 ) { + ISETouchFile( ISEStep, "error" ); + + } else { + ISETouchFile( ISEStep, "end" ); + } + + return ISEExitCode; +} + + +// +// UTILITIES +// +function ISEStdOut( ISELine ) { + + ISELogFileStr.WriteLine( ISELine ); + + if ( ISELogEcho ) { + WScript.StdOut.WriteLine( ISELine ); + } +} + +function ISEStdErr( ISELine ) { + + ISELogFileStr.WriteLine( ISELine ); + + if ( ISELogEcho ) { + WScript.StdErr.WriteLine( ISELine ); + } +} + +function ISETouchFile( ISERoot, ISEStatus ) { + + var ISETFile = + ISEOpenFile( "." + ISERoot + "." + ISEStatus + ".rst" ); + ISETFile.Close(); +} + +function ISEOpenFile( ISEFilename ) { + + // This function has been updated to deal with a problem seen in CR #870871. + // In that case the user runs a script that runs impl_1, and then turns around + // and runs impl_1 -to_step write_bitstream. That second run takes place in + // the same directory, which means we may hit some of the same files, and in + // particular, we will open the runme.log file. Even though this script closes + // the file (now), we see cases where a subsequent attempt to open the file + // fails. Perhaps the OS is slow to release the lock, or the disk comes into + // play? In any case, we try to work around this by first waiting if the file + // is already there for an arbitrary 5 seconds. Then we use a try-catch block + // and try to open the file 10 times with a one second delay after each attempt. + // Again, 10 is arbitrary. But these seem to stop the hang in CR #870871. + // If there is an unrecognized exception when trying to open the file, we output + // an error message and write details to an exception.log file. + var ISEFullPath = ISERunDir + "/" + ISEFilename; + if (ISEFileSys.FileExists(ISEFullPath)) { + // File is already there. This could be a problem. Wait in case it is still in use. + WScript.Sleep(5000); + } + var i; + for (i = 0; i < 10; ++i) { + try { + return ISEFileSys.OpenTextFile(ISEFullPath, 8, true); + } catch (exception) { + var error_code = exception.number & 0xFFFF; // The other bits are a facility code. + if (error_code == 52) { // 52 is bad file name or number. + // Wait a second and try again. + WScript.Sleep(1000); + continue; + } else { + WScript.StdErr.WriteLine("ERROR: Exception caught trying to open file " + ISEFullPath); + var exceptionFilePath = ISERunDir + "/exception.log"; + if (!ISEFileSys.FileExists(exceptionFilePath)) { + WScript.StdErr.WriteLine("See file " + exceptionFilePath + " for details."); + var exceptionFile = ISEFileSys.OpenTextFile(exceptionFilePath, 8, true); + exceptionFile.WriteLine("ERROR: Exception caught trying to open file " + ISEFullPath); + exceptionFile.WriteLine("\tException name: " + exception.name); + exceptionFile.WriteLine("\tException error code: " + error_code); + exceptionFile.WriteLine("\tException message: " + exception.message); + exceptionFile.Close(); + } + throw exception; + } + } + } + // If we reached this point, we failed to open the file after 10 attempts. + // We need to error out. + WScript.StdErr.WriteLine("ERROR: Failed to open file " + ISEFullPath); + WScript.Quit(1); +} diff --git a/sim/sim.runs/synth_1/ISEWrap.sh b/sim/sim.runs/synth_1/ISEWrap.sh new file mode 100755 index 0000000..e1a8f5d --- /dev/null +++ b/sim/sim.runs/synth_1/ISEWrap.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +# +# Vivado(TM) +# ISEWrap.sh: Vivado Runs Script for UNIX +# Copyright 1986-1999, 2001-2013 Xilinx, Inc. All Rights Reserved. +# + +HD_LOG=$1 +shift + +# CHECK for a STOP FILE +if [ -f .stop.rst ] +then +echo "" >> $HD_LOG +echo "*** Halting run - EA reset detected ***" >> $HD_LOG +echo "" >> $HD_LOG +exit 1 +fi + +ISE_STEP=$1 +shift + +# WRITE STEP HEADER to LOG +echo "" >> $HD_LOG +echo "*** Running $ISE_STEP" >> $HD_LOG +echo " with args $@" >> $HD_LOG +echo "" >> $HD_LOG + +# LAUNCH! +$ISE_STEP "$@" >> $HD_LOG 2>&1 & + +# BEGIN file creation +ISE_PID=$! +if [ X != X$HOSTNAME ] +then +ISE_HOST=$HOSTNAME #bash +else +ISE_HOST=$HOST #csh +fi +ISE_USER=$USER +ISE_BEGINFILE=.$ISE_STEP.begin.rst +/bin/touch $ISE_BEGINFILE +echo "" >> $ISE_BEGINFILE +echo "" >> $ISE_BEGINFILE +echo " " >> $ISE_BEGINFILE +echo " " >> $ISE_BEGINFILE +echo "" >> $ISE_BEGINFILE + +# WAIT for ISEStep to finish +wait $ISE_PID + +# END/ERROR file creation +RETVAL=$? +if [ $RETVAL -eq 0 ] +then + /bin/touch .$ISE_STEP.end.rst +else + /bin/touch .$ISE_STEP.error.rst +fi + +exit $RETVAL + diff --git a/sim/sim.runs/synth_1/gen_run.xml b/sim/sim.runs/synth_1/gen_run.xml new file mode 100644 index 0000000..e9e4d9a --- /dev/null +++ b/sim/sim.runs/synth_1/gen_run.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vivado Synthesis Defaults + + + + diff --git a/sim/sim.runs/synth_1/htr.txt b/sim/sim.runs/synth_1/htr.txt new file mode 100644 index 0000000..8cf3c97 --- /dev/null +++ b/sim/sim.runs/synth_1/htr.txt @@ -0,0 +1,9 @@ +# +# Vivado(TM) +# htr.txt: a Vivado-generated description of how-to-repeat the +# the basic steps of a run. Note that runme.bat/sh needs +# to be invoked for Vivado to track run status. +# Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. +# + +vivado -log midpoint.vds -m64 -product Vivado -mode batch -messageDb vivado.pb -notrace -source midpoint.tcl diff --git a/sim/sim.runs/synth_1/midpoint.dcp b/sim/sim.runs/synth_1/midpoint.dcp new file mode 100644 index 0000000000000000000000000000000000000000..b511e83d99499f51534138e7b3edae76e318e369 GIT binary patch literal 12260 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 literal 0 HcmV?d00001 diff --git a/sim/sim.runs/synth_1/midpoint.tcl b/sim/sim.runs/synth_1/midpoint.tcl new file mode 100644 index 0000000..29d6969 --- /dev/null +++ b/sim/sim.runs/synth_1/midpoint.tcl @@ -0,0 +1,35 @@ +# +# Synthesis run script generated by Vivado +# + +set_param xicom.use_bs_reader 1 +create_project -in_memory -part xc7z010clg400-1 + +set_param project.singleFileAddWarning.threshold 0 +set_param project.compositeFile.enableAutoGeneration 0 +set_param synth.vivado.isSynthRun true +set_property webtalk.parent_dir /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.cache/wt [current_project] +set_property parent.project_path /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.xpr [current_project] +set_property default_lib xil_defaultlib [current_project] +set_property target_language Verilog [current_project] +set_property ip_output_repo /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.cache/ip [current_project] +set_property ip_cache_permissions {read write} [current_project] +read_verilog -library xil_defaultlib /home/jspear/Development/School/Comp_Arc/Lab2/midpoint.v +# Mark all dcp files as not used in implementation to prevent them from being +# stitched into the results of this synthesis run. Any black boxes in the +# design are intentionally left as such for best results. Dcp files will be +# stitched into the design at a later time, either when this synthesis run is +# opened, or when it is stitched into a dependent implementation run. +foreach dcp [get_files -quiet -all -filter file_type=="Design\ Checkpoint"] { + set_property used_in_implementation false $dcp +} +read_xdc /home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc +set_property used_in_implementation false [get_files /home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] + + +synth_design -top midpoint -part xc7z010clg400-1 + + +write_checkpoint -force -noxdef midpoint.dcp + +catch { report_utilization -file midpoint_utilization_synth.rpt -pb midpoint_utilization_synth.pb } diff --git a/sim/sim.runs/synth_1/midpoint.vds b/sim/sim.runs/synth_1/midpoint.vds new file mode 100644 index 0000000..663d67f --- /dev/null +++ b/sim/sim.runs/synth_1/midpoint.vds @@ -0,0 +1,289 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:39:45 2017 +# Process ID: 5002 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1 +# Command line: vivado -log midpoint.vds -product Vivado -mode batch -messageDb vivado.pb -notrace -source midpoint.tcl +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/midpoint.vds +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace +Command: synth_design -top midpoint -part xc7z010clg400-1 +Starting synth_design +Attempting to get a license for feature 'Synthesis' and/or device 'xc7z010-clg400' +INFO: [Common 17-349] Got license for feature 'Synthesis' and/or device 'xc7z010-clg400' +INFO: Launching helper process for spawning children vivado processes +INFO: Helper process launched with PID 5151 +WARNING: [Synth 8-2292] literal value truncated to fit in 2 bits [/home/jspear/Development/School/Comp_Arc/Lab2/midpoint.v:18] +--------------------------------------------------------------------------------- +Starting RTL Elaboration : Time (s): cpu = 00:00:03 ; elapsed = 00:00:03 . Memory (MB): peak = 1147.863 ; gain = 46.246 ; free physical = 10484 ; free virtual = 20716 +--------------------------------------------------------------------------------- +INFO: [Synth 8-638] synthesizing module 'midpoint' [/home/jspear/Development/School/Comp_Arc/Lab2/midpoint.v:6] +INFO: [Synth 8-638] synthesizing module 'inputconditioner' [/home/jspear/Development/School/Comp_Arc/Lab2/inputconditioner.v:8] + Parameter wait_time bound to: 3 - type: integer +INFO: [Synth 8-256] done synthesizing module 'inputconditioner' (1#1) [/home/jspear/Development/School/Comp_Arc/Lab2/inputconditioner.v:8] +INFO: [Synth 8-638] synthesizing module 'shiftregister' [/home/jspear/Development/School/Comp_Arc/Lab2/shiftregister.v:9] + Parameter width bound to: 8 - type: integer +INFO: [Synth 8-256] done synthesizing module 'shiftregister' (2#1) [/home/jspear/Development/School/Comp_Arc/Lab2/shiftregister.v:9] +INFO: [Synth 8-256] done synthesizing module 'midpoint' (3#1) [/home/jspear/Development/School/Comp_Arc/Lab2/midpoint.v:6] +--------------------------------------------------------------------------------- +Finished RTL Elaboration : Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 1172.121 ; gain = 70.504 ; free physical = 10501 ; free virtual = 20733 +--------------------------------------------------------------------------------- + +Report Check Netlist: ++------+------------------+-------+---------+-------+------------------+ +| |Item |Errors |Warnings |Status |Description | ++------+------------------+-------+---------+-------+------------------+ +|1 |multi_driven_nets | 0| 0|Passed |Multi driven nets | ++------+------------------+-------+---------+-------+------------------+ +--------------------------------------------------------------------------------- +Finished RTL Optimization Phase 1 : Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 1172.121 ; gain = 70.504 ; free physical = 10501 ; free virtual = 20733 +--------------------------------------------------------------------------------- +INFO: [Device 21-403] Loading part xc7z010clg400-1 +INFO: [Project 1-570] Preparing netlist for logic optimization + +Processing XDC Constraints +Initializing timing engine +Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] +Finished Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc] +INFO: [Project 1-236] Implementation specific constraints were found while reading constraint file [/home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc]. These constraints will be ignored for synthesis but will be used in implementation. Impacted constraints are listed in the file [.Xil/midpoint_propImpl.xdc]. +Resolution: To avoid this warning, move constraints listed in [.Xil/midpoint_propImpl.xdc] to another XDC file and exclude this new file from synthesis with the used_in_synthesis property (File Properties dialog in GUI) and re-run elaboration/synthesis. +Completed Processing XDC Constraints + +INFO: [Project 1-111] Unisim Transformation Summary: +No Unisim elements were transformed. + +Constraint Validation Runtime : Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 1486.371 ; gain = 0.000 ; free physical = 10264 ; free virtual = 20497 +--------------------------------------------------------------------------------- +Finished Constraint Validation : Time (s): cpu = 00:00:12 ; elapsed = 00:00:12 . Memory (MB): peak = 1486.375 ; gain = 384.758 ; free physical = 10337 ; free virtual = 20569 +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Loading Part and Timing Information +--------------------------------------------------------------------------------- +Loading part: xc7z010clg400-1 +--------------------------------------------------------------------------------- +Finished Loading Part and Timing Information : Time (s): cpu = 00:00:12 ; elapsed = 00:00:12 . Memory (MB): peak = 1486.375 ; gain = 384.758 ; free physical = 10337 ; free virtual = 20569 +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Applying 'set_property' XDC Constraints +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished applying 'set_property' XDC Constraints : Time (s): cpu = 00:00:12 ; elapsed = 00:00:12 . Memory (MB): peak = 1486.375 ; gain = 384.758 ; free physical = 10338 ; free virtual = 20571 +--------------------------------------------------------------------------------- +INFO: [Synth 8-5544] ROM "positiveedge" won't be mapped to Block RAM because address size (3) smaller than threshold (5) +INFO: [Synth 8-5544] ROM "conditioned" won't be mapped to Block RAM because address size (3) smaller than threshold (5) +--------------------------------------------------------------------------------- +Finished RTL Optimization Phase 2 : Time (s): cpu = 00:00:12 ; elapsed = 00:00:12 . Memory (MB): peak = 1486.375 ; gain = 384.758 ; free physical = 10331 ; free virtual = 20564 +--------------------------------------------------------------------------------- + +Report RTL Partitions: ++-+--------------+------------+----------+ +| |RTL Partition |Replication |Instances | ++-+--------------+------------+----------+ ++-+--------------+------------+----------+ +--------------------------------------------------------------------------------- +Start RTL Component Statistics +--------------------------------------------------------------------------------- +Detailed RTL Component Info : ++---Registers : + 8 Bit Registers := 1 + 3 Bit Registers := 3 + 1 Bit Registers := 9 ++---Muxes : + 2 Input 8 Bit Muxes := 1 + 2 Input 1 Bit Muxes := 16 +--------------------------------------------------------------------------------- +Finished RTL Component Statistics +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start RTL Hierarchical Component Statistics +--------------------------------------------------------------------------------- +Hierarchical RTL Component report +Module inputconditioner +Detailed RTL Component Info : ++---Registers : + 3 Bit Registers := 1 + 1 Bit Registers := 3 ++---Muxes : + 2 Input 1 Bit Muxes := 5 +Module shiftregister +Detailed RTL Component Info : ++---Registers : + 8 Bit Registers := 1 ++---Muxes : + 2 Input 8 Bit Muxes := 1 + 2 Input 1 Bit Muxes := 1 +--------------------------------------------------------------------------------- +Finished RTL Hierarchical Component Statistics +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Part Resource Summary +--------------------------------------------------------------------------------- +Part Resources: +DSPs: 80 (col length:40) +BRAMs: 120 (col length: RAMB18 40 RAMB36 20) +--------------------------------------------------------------------------------- +Finished Part Resource Summary +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Cross Boundary and Area Optimization +--------------------------------------------------------------------------------- +WARNING: [Synth 8-6014] Unused sequential element i1/positiveedge_reg was removed. [/home/jspear/Development/School/Comp_Arc/Lab2/inputconditioner.v:24] +WARNING: [Synth 8-6014] Unused sequential element i2/positiveedge_reg was removed. [/home/jspear/Development/School/Comp_Arc/Lab2/inputconditioner.v:24] +WARNING: [Synth 8-6014] Unused sequential element i2/negativeedge_reg was removed. [/home/jspear/Development/School/Comp_Arc/Lab2/inputconditioner.v:34] +WARNING: [Synth 8-6014] Unused sequential element i3/negativeedge_reg was removed. [/home/jspear/Development/School/Comp_Arc/Lab2/inputconditioner.v:34] +--------------------------------------------------------------------------------- +Finished Cross Boundary and Area Optimization : Time (s): cpu = 00:00:12 ; elapsed = 00:00:12 . Memory (MB): peak = 1486.375 ; gain = 384.758 ; free physical = 10321 ; free virtual = 20554 +--------------------------------------------------------------------------------- + +Report RTL Partitions: ++-+--------------+------------+----------+ +| |RTL Partition |Replication |Instances | ++-+--------------+------------+----------+ ++-+--------------+------------+----------+ +--------------------------------------------------------------------------------- +Start Applying XDC Timing Constraints +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Applying XDC Timing Constraints : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1486.375 ; gain = 384.758 ; free physical = 10195 ; free virtual = 20426 +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Timing Optimization +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Timing Optimization : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1486.375 ; gain = 384.758 ; free physical = 10195 ; free virtual = 20426 +--------------------------------------------------------------------------------- + +Report RTL Partitions: ++-+--------------+------------+----------+ +| |RTL Partition |Replication |Instances | ++-+--------------+------------+----------+ ++-+--------------+------------+----------+ +--------------------------------------------------------------------------------- +Start Technology Mapping +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Technology Mapping : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.379 ; gain = 392.762 ; free physical = 10194 ; free virtual = 20424 +--------------------------------------------------------------------------------- + +Report RTL Partitions: ++-+--------------+------------+----------+ +| |RTL Partition |Replication |Instances | ++-+--------------+------------+----------+ ++-+--------------+------------+----------+ +--------------------------------------------------------------------------------- +Start IO Insertion +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Flattening Before IO Insertion +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Flattening Before IO Insertion +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Final Netlist Cleanup +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Final Netlist Cleanup +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished IO Insertion : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.379 ; gain = 392.762 ; free physical = 10194 ; free virtual = 20424 +--------------------------------------------------------------------------------- + +Report Check Netlist: ++------+------------------+-------+---------+-------+------------------+ +| |Item |Errors |Warnings |Status |Description | ++------+------------------+-------+---------+-------+------------------+ +|1 |multi_driven_nets | 0| 0|Passed |Multi driven nets | ++------+------------------+-------+---------+-------+------------------+ +--------------------------------------------------------------------------------- +Start Renaming Generated Instances +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Renaming Generated Instances : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.379 ; gain = 392.762 ; free physical = 10194 ; free virtual = 20424 +--------------------------------------------------------------------------------- + +Report RTL Partitions: ++-+--------------+------------+----------+ +| |RTL Partition |Replication |Instances | ++-+--------------+------------+----------+ ++-+--------------+------------+----------+ +--------------------------------------------------------------------------------- +Start Rebuilding User Hierarchy +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Rebuilding User Hierarchy : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.379 ; gain = 392.762 ; free physical = 10194 ; free virtual = 20424 +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Renaming Generated Ports +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Renaming Generated Ports : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.379 ; gain = 392.762 ; free physical = 10194 ; free virtual = 20424 +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Handling Custom Attributes +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Handling Custom Attributes : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.379 ; gain = 392.762 ; free physical = 10194 ; free virtual = 20424 +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Renaming Generated Nets +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Finished Renaming Generated Nets : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.379 ; gain = 392.762 ; free physical = 10194 ; free virtual = 20424 +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +Start Writing Synthesis Report +--------------------------------------------------------------------------------- + +Report BlackBoxes: ++-+--------------+----------+ +| |BlackBox name |Instances | ++-+--------------+----------+ ++-+--------------+----------+ + +Report Cell Usage: ++------+-----+------+ +| |Cell |Count | ++------+-----+------+ +|1 |BUFG | 1| +|2 |LUT2 | 1| +|3 |LUT4 | 4| +|4 |LUT5 | 2| +|5 |FDRE | 22| +|6 |IBUF | 4| +|7 |OBUF | 8| ++------+-----+------+ + +Report Instance Areas: ++------+---------+-------------------+------+ +| |Instance |Module |Cells | ++------+---------+-------------------+------+ +|1 |top | | 42| +|2 | i1 |inputconditioner | 8| +|3 | i2 |inputconditioner_0 | 5| +|4 | i3 |inputconditioner_1 | 7| +|5 | shft |shiftregister | 9| ++------+---------+-------------------+------+ +--------------------------------------------------------------------------------- +Finished Writing Synthesis Report : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.379 ; gain = 392.762 ; free physical = 10194 ; free virtual = 20424 +--------------------------------------------------------------------------------- +Synthesis finished with 0 errors, 0 critical warnings and 4 warnings. +Synthesis Optimization Runtime : Time (s): cpu = 00:00:14 ; elapsed = 00:00:14 . Memory (MB): peak = 1494.379 ; gain = 78.512 ; free physical = 10254 ; free virtual = 20484 +Synthesis Optimization Complete : Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1494.387 ; gain = 392.762 ; free physical = 10254 ; free virtual = 20484 +INFO: [Project 1-571] Translating synthesized netlist +INFO: [Netlist 29-17] Analyzing 4 Unisim elements for replacement +INFO: [Netlist 29-28] Unisim Transformation completed in 0 CPU seconds +INFO: [Project 1-570] Preparing netlist for logic optimization +INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s). +INFO: [Project 1-111] Unisim Transformation Summary: +No Unisim elements were transformed. + +19 Infos, 5 Warnings, 0 Critical Warnings and 0 Errors encountered. +synth_design completed successfully +synth_design: Time (s): cpu = 00:00:19 ; elapsed = 00:00:19 . Memory (MB): peak = 1494.387 ; gain = 405.352 ; free physical = 10222 ; free virtual = 20453 +INFO: [Common 17-1381] The checkpoint '/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/midpoint.dcp' has been generated. +report_utilization: Time (s): cpu = 00:00:00.07 ; elapsed = 00:00:00.10 . Memory (MB): peak = 1518.395 ; gain = 0.000 ; free physical = 10223 ; free virtual = 20454 +INFO: [Common 17-206] Exiting Vivado at Wed Oct 25 21:40:12 2017... diff --git a/sim/sim.runs/synth_1/midpoint_utilization_synth.pb b/sim/sim.runs/synth_1/midpoint_utilization_synth.pb new file mode 100644 index 0000000000000000000000000000000000000000..216973de586158f113e3743fba21ff8ac1436389 GIT binary patch literal 224 zcmd;LGcqtV*E5>LtPxzAo10ivsgR$hP+F3ilUbEml9`_e;%28-Dioy_=a&{Grxxp- z6K&vg1eFo4ZB^JN`csG zvDaDv&A0yxBpIBJ uS~4(rI83tQa0+#EcMb{iIco<}GS?nRI6MWB3~yaP> $HD_LOG 2>&1 + if [ $? -ne 0 ] + then + exit + fi +} + +EAStep vivado -log midpoint.vds -m64 -product Vivado -mode batch -messageDb vivado.pb -notrace -source midpoint.tcl diff --git a/sim/sim.runs/synth_1/vivado.jou b/sim/sim.runs/synth_1/vivado.jou new file mode 100644 index 0000000..205b130 --- /dev/null +++ b/sim/sim.runs/synth_1/vivado.jou @@ -0,0 +1,12 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:39:45 2017 +# Process ID: 5002 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1 +# Command line: vivado -log midpoint.vds -product Vivado -mode batch -messageDb vivado.pb -notrace -source midpoint.tcl +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/midpoint.vds +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/vivado.jou +#----------------------------------------------------------- +source midpoint.tcl -notrace diff --git a/sim/sim.runs/synth_1/vivado.pb b/sim/sim.runs/synth_1/vivado.pb new file mode 100644 index 0000000000000000000000000000000000000000..b66af097e01deb639cd2f831ca5f0e95578d23f8 GIT binary patch literal 31606 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 BwT1uy literal 0 HcmV?d00001 diff --git a/sim/sim.xpr b/sim/sim.xpr new file mode 100644 index 0000000..4afcc59 --- /dev/null +++ b/sim/sim.xpr @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vivado Synthesis Defaults + + + + + + + + + + + Default settings for Implementation. + + + + + + + + + + + + + + + + + diff --git a/vivado.jou b/vivado.jou new file mode 100644 index 0000000..dc883d7 --- /dev/null +++ b/vivado.jou @@ -0,0 +1,57 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:01:35 2017 +# Process ID: 4769 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2 +# Command line: vivado +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/vivado.log +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/vivado.jou +#----------------------------------------------------------- +start_gui +create_project sim /home/jspear/Development/School/Comp_Arc/Lab2/sim -part xc7z010clg400-1 +add_files -fileset constrs_1 -norecurse /home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc +add_files -norecurse /home/jspear/Development/School/Comp_Arc/Lab2/midpoint.v +update_compile_order -fileset sources_1 +launch_runs synth_1 -jobs 2 +wait_on_run synth_1 +launch_runs impl_1 -jobs 2 +wait_on_run impl_1 +reset_run synth_1 +launch_runs synth_1 -jobs 2 +wait_on_run synth_1 +launch_runs impl_1 -jobs 2 +wait_on_run impl_1 +reset_run synth_1 +launch_runs synth_1 -jobs 2 +wait_on_run synth_1 +launch_runs impl_1 -jobs 2 +wait_on_run impl_1 +open_run impl_1 +launch_runs impl_1 -to_step write_bitstream -jobs 2 +wait_on_run impl_1 +open_hw +connect_hw_server +open_hw_target +set_property PROGRAM.FILE {/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.bit} [get_hw_devices xc7z010_1] +current_hw_device [get_hw_devices xc7z010_1] +refresh_hw_device -update_hw_probes false [lindex [get_hw_devices xc7z010_1] 0] +set_property PROBES.FILE {} [get_hw_devices xc7z010_1] +set_property FULL_PROBES.FILE {} [get_hw_devices xc7z010_1] +set_property PROGRAM.FILE {/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.bit} [get_hw_devices xc7z010_1] +program_hw_devices [get_hw_devices xc7z010_1] +refresh_hw_device [lindex [get_hw_devices xc7z010_1] 0] +reset_run synth_1 +launch_runs synth_1 -jobs 2 +wait_on_run synth_1 +launch_runs impl_1 -jobs 2 +wait_on_run impl_1 +refresh_design +launch_runs impl_1 -to_step write_bitstream -jobs 2 +wait_on_run impl_1 +set_property PROBES.FILE {} [get_hw_devices xc7z010_1] +set_property FULL_PROBES.FILE {} [get_hw_devices xc7z010_1] +set_property PROGRAM.FILE {/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.bit} [get_hw_devices xc7z010_1] +program_hw_devices [get_hw_devices xc7z010_1] +refresh_hw_device [lindex [get_hw_devices xc7z010_1] 0] diff --git a/vivado.log b/vivado.log new file mode 100644 index 0000000..1b510e0 --- /dev/null +++ b/vivado.log @@ -0,0 +1,144 @@ +#----------------------------------------------------------- +# Vivado v2017.2 (64-bit) +# SW Build 1909853 on Thu Jun 15 18:39:10 MDT 2017 +# IP Build 1909766 on Thu Jun 15 19:58:00 MDT 2017 +# Start of session at: Wed Oct 25 21:01:35 2017 +# Process ID: 4769 +# Current directory: /home/jspear/Development/School/Comp_Arc/Lab2 +# Command line: vivado +# Log file: /home/jspear/Development/School/Comp_Arc/Lab2/vivado.log +# Journal file: /home/jspear/Development/School/Comp_Arc/Lab2/vivado.jou +#----------------------------------------------------------- +start_gui +create_project sim /home/jspear/Development/School/Comp_Arc/Lab2/sim -part xc7z010clg400-1 +INFO: [IP_Flow 19-234] Refreshing IP repositories +INFO: [IP_Flow 19-1704] No user IP repositories specified +INFO: [IP_Flow 19-2313] Loaded Vivado IP repository '/opt/Xilinx/Vivado/2017.2/data/ip'. +add_files -fileset constrs_1 -norecurse /home/jspear/Development/School/Comp_Arc/Lab2/ZYBO_Master.xdc +add_files -norecurse /home/jspear/Development/School/Comp_Arc/Lab2/midpoint.v +update_compile_order -fileset sources_1 +launch_runs synth_1 -jobs 2 +[Wed Oct 25 21:26:20 2017] Launched synth_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/runme.log +launch_runs impl_1 -jobs 2 +[Wed Oct 25 21:27:06 2017] Launched impl_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/runme.log +reset_run synth_1 +launch_runs synth_1 -jobs 2 +[Wed Oct 25 21:30:59 2017] Launched synth_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/runme.log +launch_runs impl_1 -jobs 2 +[Wed Oct 25 21:31:45 2017] Launched impl_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/runme.log +reset_run synth_1 +launch_runs synth_1 -jobs 2 +[Wed Oct 25 21:32:38 2017] Launched synth_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/runme.log +launch_runs impl_1 -jobs 2 +[Wed Oct 25 21:33:23 2017] Launched impl_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/runme.log +open_run impl_1 +INFO: [Netlist 29-17] Analyzing 2 Unisim elements for replacement +INFO: [Netlist 29-28] Unisim Transformation completed in 0 CPU seconds +INFO: [Project 1-479] Netlist was created with Vivado 2017.2 +INFO: [Device 21-403] Loading part xc7z010clg400-1 +INFO: [Project 1-570] Preparing netlist for logic optimization +Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/.Xil/Vivado-4769-Kreyshawn/dcp13/midpoint.xdc] +Finished Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/.Xil/Vivado-4769-Kreyshawn/dcp13/midpoint.xdc] +Reading XDEF placement. +Reading placer database... +Reading XDEF routing. +Read XDEF File: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.01 . Memory (MB): peak = 6292.703 ; gain = 0.000 ; free physical = 11413 ; free virtual = 21611 +Restored from archive | CPU: 0.020000 secs | Memory: 0.043633 MB | +Finished XDEF File Restore: Time (s): cpu = 00:00:00.02 ; elapsed = 00:00:00.01 . Memory (MB): peak = 6292.703 ; gain = 0.000 ; free physical = 11413 ; free virtual = 21611 +INFO: [Project 1-111] Unisim Transformation Summary: +No Unisim elements were transformed. + +open_run: Time (s): cpu = 00:00:12 ; elapsed = 00:00:07 . Memory (MB): peak = 6439.301 ; gain = 331.160 ; free physical = 11332 ; free virtual = 21531 +WARNING: [Timing 38-313] There are no user specified timing constraints. Timing constraints are needed for proper timing analysis. +launch_runs impl_1 -to_step write_bitstream -jobs 2 +[Wed Oct 25 21:34:19 2017] Launched impl_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/runme.log +open_hw +connect_hw_server +INFO: [Labtools 27-2285] Connecting to hw_server url TCP:localhost:3121 +INFO: [Labtools 27-2222] Launching hw_server... +INFO: [Labtools 27-2221] Launch Output: + +****** Xilinx hw_server v2017.2 + **** Build date : Jun 15 2017-18:45:18 + ** Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. + + +open_hw_target +INFO: [Labtoolstcl 44-466] Opening hw_target localhost:3121/xilinx_tcf/Digilent/210279651540A +set_property PROGRAM.FILE {/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.bit} [get_hw_devices xc7z010_1] +current_hw_device [get_hw_devices xc7z010_1] +refresh_hw_device -update_hw_probes false [lindex [get_hw_devices xc7z010_1] 0] +INFO: [Labtools 27-1434] Device xc7z010 (JTAG device index = 1) is programmed with a design that has no supported debug core(s) in it. +WARNING: [Labtools 27-3361] The debug hub core was not detected. +Resolution: +1. Make sure the clock connected to the debug hub (dbg_hub) core is a free running clock and is active. +2. Make sure the BSCAN_SWITCH_USER_MASK device property in Vivado Hardware Manager reflects the user scan chain setting in the design and refresh the device. To determine the user scan chain setting in the design, open the implemented design and use 'get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub]'. +For more details on setting the scan chain property, consult the Vivado Debug and Programming User Guide (UG908). +ERROR: [Labtoolstcl 44-513] HW Target shutdown. Closing target: localhost:3121/xilinx_tcf/Digilent/210279651540A +INFO: [Labtoolstcl 44-466] Opening hw_target localhost:3121/xilinx_tcf/Digilent/210279651540A +WARNING: [Labtoolstcl 44-129] No matching hw_ila_data was found. +INFO: [Labtools 27-1434] Device xc7z010 (JTAG device index = 1) is programmed with a design that has no supported debug core(s) in it. +WARNING: [Labtools 27-3361] The debug hub core was not detected. +Resolution: +1. Make sure the clock connected to the debug hub (dbg_hub) core is a free running clock and is active. +2. Make sure the BSCAN_SWITCH_USER_MASK device property in Vivado Hardware Manager reflects the user scan chain setting in the design and refresh the device. To determine the user scan chain setting in the design, open the implemented design and use 'get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub]'. +For more details on setting the scan chain property, consult the Vivado Debug and Programming User Guide (UG908). +WARNING: [Labtoolstcl 44-129] No matching hw_ila_data was found. +set_property PROBES.FILE {} [get_hw_devices xc7z010_1] +set_property FULL_PROBES.FILE {} [get_hw_devices xc7z010_1] +set_property PROGRAM.FILE {/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.bit} [get_hw_devices xc7z010_1] +program_hw_devices [get_hw_devices xc7z010_1] +INFO: [Labtools 27-3164] End of startup status: HIGH +refresh_hw_device [lindex [get_hw_devices xc7z010_1] 0] +INFO: [Labtools 27-1434] Device xc7z010 (JTAG device index = 1) is programmed with a design that has no supported debug core(s) in it. +WARNING: [Labtools 27-3361] The debug hub core was not detected. +Resolution: +1. Make sure the clock connected to the debug hub (dbg_hub) core is a free running clock and is active. +2. Make sure the BSCAN_SWITCH_USER_MASK device property in Vivado Hardware Manager reflects the user scan chain setting in the design and refresh the device. To determine the user scan chain setting in the design, open the implemented design and use 'get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub]'. +For more details on setting the scan chain property, consult the Vivado Debug and Programming User Guide (UG908). +reset_run synth_1 +launch_runs synth_1 -jobs 2 +[Wed Oct 25 21:39:45 2017] Launched synth_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/synth_1/runme.log +launch_runs impl_1 -jobs 2 +[Wed Oct 25 21:40:17 2017] Launched impl_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/runme.log +refresh_design +INFO: [Netlist 29-17] Analyzing 4 Unisim elements for replacement +INFO: [Netlist 29-28] Unisim Transformation completed in 0 CPU seconds +INFO: [Project 1-479] Netlist was created with Vivado 2017.2 +INFO: [Project 1-570] Preparing netlist for logic optimization +Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/.Xil/Vivado-4769-Kreyshawn/dcp19/midpoint.xdc] +Finished Parsing XDC File [/home/jspear/Development/School/Comp_Arc/Lab2/.Xil/Vivado-4769-Kreyshawn/dcp19/midpoint.xdc] +Reading XDEF placement. +Reading placer database... +Reading XDEF routing. +Read XDEF File: Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 6960.090 ; gain = 0.000 ; free physical = 10718 ; free virtual = 20958 +Restored from archive | CPU: 0.010000 secs | Memory: 0.048988 MB | +Finished XDEF File Restore: Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 6960.090 ; gain = 0.000 ; free physical = 10718 ; free virtual = 20958 +WARNING: [Timing 38-313] There are no user specified timing constraints. Timing constraints are needed for proper timing analysis. +launch_runs impl_1 -to_step write_bitstream -jobs 2 +[Wed Oct 25 21:41:47 2017] Launched impl_1... +Run output will be captured here: /home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/runme.log +set_property PROBES.FILE {} [get_hw_devices xc7z010_1] +set_property FULL_PROBES.FILE {} [get_hw_devices xc7z010_1] +set_property PROGRAM.FILE {/home/jspear/Development/School/Comp_Arc/Lab2/sim/sim.runs/impl_1/midpoint.bit} [get_hw_devices xc7z010_1] +program_hw_devices [get_hw_devices xc7z010_1] +INFO: [Labtools 27-3164] End of startup status: HIGH +refresh_hw_device [lindex [get_hw_devices xc7z010_1] 0] +INFO: [Labtools 27-1434] Device xc7z010 (JTAG device index = 1) is programmed with a design that has no supported debug core(s) in it. +WARNING: [Labtools 27-3361] The debug hub core was not detected. +Resolution: +1. Make sure the clock connected to the debug hub (dbg_hub) core is a free running clock and is active. +2. Make sure the BSCAN_SWITCH_USER_MASK device property in Vivado Hardware Manager reflects the user scan chain setting in the design and refresh the device. To determine the user scan chain setting in the design, open the implemented design and use 'get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub]'. +For more details on setting the scan chain property, consult the Vivado Debug and Programming User Guide (UG908). +ERROR: [Labtoolstcl 44-513] HW Target shutdown. Closing target: localhost:3121/xilinx_tcf/Digilent/210279651540A +exit +INFO: [Common 17-206] Exiting Vivado at Thu Oct 26 09:36:40 2017... From bf267609a9d1cc7825ee289a995a857ce3a8022a Mon Sep 17 00:00:00 2001 From: dpapp Date: Sat, 28 Oct 2017 12:20:58 -0400 Subject: [PATCH 22/50] dff --- dff.v | 34 +++++++++++----------------------- spimemory.v | 9 +++++++-- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/dff.v b/dff.v index f0515c6..640e4a4 100644 --- a/dff.v +++ b/dff.v @@ -1,25 +1,13 @@ -// Design -// D flip-flop -module dff (clk, reset, - d, q, qb); - input clk; - input reset; - input d; - output q; - output qb; - - reg q; - - assign qb = ~q; - - always @(posedge clk or posedge reset) - begin - if (reset) begin - // Asynchronous reset when reset goes high - q <= 1'b0; - end else begin - // Assign D to Q on positive clock edge - q <= d; +module dff #( parameter W = 1 ) +( + input trigger, + input enable, + input [W-1:0] d, + output reg [W-1:0] q +); + always @(posedge trigger) begin + if(enable) begin + q <= d; + end end - end endmodule \ No newline at end of file diff --git a/spimemory.v b/spimemory.v index ad010cc..87084f4 100644 --- a/spimemory.v +++ b/spimemory.v @@ -19,10 +19,15 @@ module spiMemory inputcondition condition1(clk, sclk_pin, , positiveEdge, negativeEdge); inputcondition condition1(clk, cs_pin, conditionedInput2, , ); - wire parallelOut, serialOut; - shiftregister shiftRegister(clk, positiveEdge, sr_we, parallelDataIn, conditionedInput1, parallelOut, serialOut); + wire parallelOut[7:0], serialOut; + shiftregister shiftRegister(clk, positiveEdge, SR_WE, parallelDataIn, conditionedInput1, parallelOut, serialOut); wire q; dff dFF(clk, serialOut, negativeEdge, q, ); + + wire parallelIn[7:0], address[7:0] + datamemory dataMemory(clk, parallelIn, address[6:0], DM_WE, parallelOut); + + endmodule From f72307624a6b95e852e6f32f26495bc6636eb8a0 Mon Sep 17 00:00:00 2001 From: dpapp Date: Sun, 29 Oct 2017 18:34:01 -0400 Subject: [PATCH 23/50] spi --- datamemory.v | 2 +- spimemory.v | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/datamemory.v b/datamemory.v index 0d82131..02225af 100644 --- a/datamemory.v +++ b/datamemory.v @@ -17,7 +17,7 @@ module datamemory input [addresswidth-1:0] address, input writeEnable, input [width-1:0] dataIn -) +); reg [width-1:0] memory [depth-1:0]; diff --git a/spimemory.v b/spimemory.v index 87084f4..4b41c23 100644 --- a/spimemory.v +++ b/spimemory.v @@ -3,6 +3,8 @@ //------------------------------------------------------------------------ `include "inputconditioner.v" `include "shiftregister.v" +`include "dff.v" +`include "datamemory.v" module spiMemory ( @@ -12,21 +14,23 @@ module spiMemory output miso_pin, // SPI master in slave out input mosi_pin, // SPI master out slave in output [3:0] leds // LEDs for debugging -) +); + reg MISO_BUFE, DM_WE, ADDR_WE, SR_WE; wire conditionedInput1, conditionedInput2; wire positiveEdge, negativeEdge; - inputcondition condition1(clk, miso_pin, conditioned, ,); - inputcondition condition1(clk, sclk_pin, , positiveEdge, negativeEdge); - inputcondition condition1(clk, cs_pin, conditionedInput2, , ); + inputconditioner condition1(clk, miso_pin, conditioned, ,); + inputconditioner condition2(clk, sclk_pin, , positiveEdge, negativeEdge); + inputconditioner condition3(clk, cs_pin, conditionedInput2, , ); - wire parallelOut[7:0], serialOut; - shiftregister shiftRegister(clk, positiveEdge, SR_WE, parallelDataIn, conditionedInput1, parallelOut, serialOut); + wire shiftRegOutP[7:0], serialOut; + wire dataMemoryOut[7:0], address[7:0]; + shiftregister shiftRegister(clk, positiveEdge, SR_WE, dataMemoryOut, conditionedInput1, shiftRegOutP, serialOut); + /*dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); wire q; - dff dFF(clk, serialOut, negativeEdge, q, ); + dff #(1) dff2(clk, negativeEdge, serialOut, q); - wire parallelIn[7:0], address[7:0] - datamemory dataMemory(clk, parallelIn, address[6:0], DM_WE, parallelOut); + datamemory dataMemory(clk, shiftRegOutP, address, DM_WE, dataMemoryOut);*/ endmodule From 59881dc07dd470c45ddae6a853b576215770eb52 Mon Sep 17 00:00:00 2001 From: dpapp Date: Sun, 29 Oct 2017 18:37:11 -0400 Subject: [PATCH 24/50] fsm --- fsm.v | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 fsm.v diff --git a/fsm.v b/fsm.v new file mode 100644 index 0000000..0c66134 --- /dev/null +++ b/fsm.v @@ -0,0 +1,52 @@ +`timescale 1 ns / 1 ps + +//Example of a Finite State Machine where the traffic light state dictates the driving. + +module finiteStateMachine( + input [1:0] trafficlight, + input clk, + output reg driving, + output reg stopped, + output reg braking); + +reg [1:0] state; +localparam Green = 2'b00; +localparam Yellow = 2'b01; +localparam Red = 2'b10; + +//change states on the clk cycles +always @(posedge clk) begin + + //normally you'll have an input of strings that'll dictate which states you go to (like the AddressIn) + //but here, i'll just manually set it + //this'll normally be much more confusing and fun. which state should you be in to start? and then generally states lead to other states. + if (trafficlight == Green) begin + state <= Green; + end + if (trafficlight == Yellow) begin + state <= Yellow; + end + if (trafficlight == Red) begin + state <= Red; + end + + case (state) + //driving - follow traffic laws + Green: begin + driving = 1; + braking = 0; + stopped <= 0; + end + Yellow: begin + driving = 0; + braking = 1; + stopped <= 0; + end + Red: begin + driving = 0; + braking = 0; + stopped <= 1; + end + endcase +end +endmodule \ No newline at end of file From 6198d0f4516c2e738fb5c3d9e0fd9ac07fe6d39e Mon Sep 17 00:00:00 2001 From: dpapp Date: Sun, 29 Oct 2017 18:46:24 -0400 Subject: [PATCH 25/50] fsm --- fsm.v | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/fsm.v b/fsm.v index 0c66134..58cc731 100644 --- a/fsm.v +++ b/fsm.v @@ -3,11 +3,14 @@ //Example of a Finite State Machine where the traffic light state dictates the driving. module finiteStateMachine( - input [1:0] trafficlight, + input [1:0], input clk, - output reg driving, - output reg stopped, - output reg braking); + output reg MISO_BUFE, + output reg DM_WE, + output reg ADDR_WE, + output reg SR_WE +); + reg [1:0] state; localparam Green = 2'b00; From 66c865cf6d52e5d03e7ed9c3e406b11b7776fde1 Mon Sep 17 00:00:00 2001 From: dpapp Date: Sun, 29 Oct 2017 19:05:25 -0400 Subject: [PATCH 26/50] ad --- fsm.v | 63 +++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/fsm.v b/fsm.v index 58cc731..9ddb2ed 100644 --- a/fsm.v +++ b/fsm.v @@ -3,7 +3,7 @@ //Example of a Finite State Machine where the traffic light state dictates the driving. module finiteStateMachine( - input [1:0], + input [2:0], input clk, output reg MISO_BUFE, output reg DM_WE, @@ -12,13 +12,19 @@ module finiteStateMachine( ); -reg [1:0] state; -localparam Green = 2'b00; -localparam Yellow = 2'b01; -localparam Red = 2'b10; +reg [7:0] state; +localparam CSLow = 2'b00; +localparam addressLoad = 2'b00; +localparam CS_Low = 2'b00; +localparam CS_Low = 2'b00; +localparam CSHigh = 2'b00; +integer counter = 0; //change states on the clk cycles always @(posedge clk) begin + + // commands: CS_Low, done address load, parallelDataLoad, serialDataLoad + // CS_high //normally you'll have an input of strings that'll dictate which states you go to (like the AddressIn) //but here, i'll just manually set it @@ -33,22 +39,45 @@ always @(posedge clk) begin state <= Red; end + case (state) //driving - follow traffic laws - Green: begin - driving = 1; - braking = 0; - stopped <= 0; + CSLow: begin + MISO_BUFE = 0; + DM_WE = 0; + ADDR_WE = 0; + SR_WE = 0; + end + addressLoad: begin + MISO_BUFE = 0; + DM_WE = 0; + ADDR_WE = 1; + SR_WE = 0; + counter = counter + 1; + end + CSLow: begin + MISO_BUFE = 0; + DM_WE = 0; + ADDR_WE = 0; + SR_WE = 0; + end + CSLow: begin + MISO_BUFE = 0; + DM_WE = 0; + ADDR_WE = 0; + SR_WE = 0; end - Yellow: begin - driving = 0; - braking = 1; - stopped <= 0; + CSLow: begin + MISO_BUFE = 0; + DM_WE = 0; + ADDR_WE = 0; + SR_WE = 0; end - Red: begin - driving = 0; - braking = 0; - stopped <= 1; + CSLow: begin + MISO_BUFE = 0; + DM_WE = 0; + ADDR_WE = 0; + SR_WE = 0; end endcase end From cface2bfa30e1c0e01285390818be68e89f67441 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sun, 29 Oct 2017 19:05:31 -0400 Subject: [PATCH 27/50] fixed sr module instantiating --- spimemory.v | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/spimemory.v b/spimemory.v index 4b41c23..882953a 100644 --- a/spimemory.v +++ b/spimemory.v @@ -11,8 +11,8 @@ module spiMemory input clk, // FPGA clock input sclk_pin, // SPI clock input cs_pin, // SPI chip select - output miso_pin, // SPI master in slave out input mosi_pin, // SPI master out slave in + output miso_pin, // SPI master in slave out output [3:0] leds // LEDs for debugging ); reg MISO_BUFE, DM_WE, ADDR_WE, SR_WE; @@ -22,16 +22,22 @@ module spiMemory inputconditioner condition2(clk, sclk_pin, , positiveEdge, negativeEdge); inputconditioner condition3(clk, cs_pin, conditionedInput2, , ); - wire shiftRegOutP[7:0], serialOut; - wire dataMemoryOut[7:0], address[7:0]; - shiftregister shiftRegister(clk, positiveEdge, SR_WE, dataMemoryOut, conditionedInput1, shiftRegOutP, serialOut); + wire[7:0] shiftRegOutP, dataMemoryOut; + wire serialOut, address; + + shiftregister #(8) sr(.clk(clk), + .peripheralClkEdge(positiveEdge), + .parallelLoad(SR_WE), + .parallelDataIn(dataMemoryOut), + .serialDataIn(conditionedInput1), + .parallelDataOut(shiftRegOutP), + .serialDataOut(serialOut)); - /*dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); - wire q; - dff #(1) dff2(clk, negativeEdge, serialOut, q); + // dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); + // wire q; + // dff #(1) dff2(clk, negativeEdge, serialOut, q); - datamemory dataMemory(clk, shiftRegOutP, address, DM_WE, dataMemoryOut);*/ + // datamemory dataMemory(clk, shiftRegOutP, address, DM_WE, dataMemoryOut); endmodule - From 225adc79125666b464b7ac1fa2b025364d01604c Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sun, 29 Oct 2017 19:10:49 -0400 Subject: [PATCH 28/50] fixed compilation bugs --- spimemory.v | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/spimemory.v b/spimemory.v index 882953a..0aebae6 100644 --- a/spimemory.v +++ b/spimemory.v @@ -23,7 +23,7 @@ module spiMemory inputconditioner condition3(clk, cs_pin, conditionedInput2, , ); wire[7:0] shiftRegOutP, dataMemoryOut; - wire serialOut, address; + wire serialOut; shiftregister #(8) sr(.clk(clk), .peripheralClkEdge(positiveEdge), @@ -33,9 +33,10 @@ module spiMemory .parallelDataOut(shiftRegOutP), .serialDataOut(serialOut)); - // dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); - // wire q; - // dff #(1) dff2(clk, negativeEdge, serialOut, q); + wire[7:0] address; + dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); + wire q; + dff #(1) dff2(clk, negativeEdge, serialOut, q); // datamemory dataMemory(clk, shiftRegOutP, address, DM_WE, dataMemoryOut); From 2e47eeafcdfdcc5b6dc1889bb649424917e2ac6a Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sun, 29 Oct 2017 19:12:36 -0400 Subject: [PATCH 29/50] fixed address bits --- spimemory.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spimemory.v b/spimemory.v index 0aebae6..31c5c6d 100644 --- a/spimemory.v +++ b/spimemory.v @@ -38,7 +38,7 @@ module spiMemory wire q; dff #(1) dff2(clk, negativeEdge, serialOut, q); - // datamemory dataMemory(clk, shiftRegOutP, address, DM_WE, dataMemoryOut); + datamemory dataMemory(clk, shiftRegOutP, address[7:1], DM_WE, dataMemoryOut); endmodule From f41a92a2f66e04e69076be1de90d07fd41b1a388 Mon Sep 17 00:00:00 2001 From: dpapp Date: Sun, 29 Oct 2017 19:12:50 -0400 Subject: [PATCH 30/50] fsm work --- fsm.v | 37 +++++++++++++------------------------ spimemory.v | 12 ++++++------ 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/fsm.v b/fsm.v index 9ddb2ed..ab28308 100644 --- a/fsm.v +++ b/fsm.v @@ -15,10 +15,8 @@ module finiteStateMachine( reg [7:0] state; localparam CSLow = 2'b00; localparam addressLoad = 2'b00; -localparam CS_Low = 2'b00; -localparam CS_Low = 2'b00; - localparam CSHigh = 2'b00; + integer counter = 0; //change states on the clk cycles always @(posedge clk) begin @@ -39,13 +37,22 @@ always @(posedge clk) begin state <= Red; end + if (addressLoad == ) begin + if (counter == 8) begin + counter = 0; + end + else begin + counter = counter + 1; + end + end + case (state) //driving - follow traffic laws CSLow: begin MISO_BUFE = 0; DM_WE = 0; - ADDR_WE = 0; + ADDR_WE = 1 SR_WE = 0; end addressLoad: begin @@ -53,27 +60,9 @@ always @(posedge clk) begin DM_WE = 0; ADDR_WE = 1; SR_WE = 0; - counter = counter + 1; - end - CSLow: begin - MISO_BUFE = 0; - DM_WE = 0; - ADDR_WE = 0; - SR_WE = 0; - end - CSLow: begin - MISO_BUFE = 0; - DM_WE = 0; - ADDR_WE = 0; - SR_WE = 0; end - CSLow: begin - MISO_BUFE = 0; - DM_WE = 0; - ADDR_WE = 0; - SR_WE = 0; - end - CSLow: begin + + CSHigh: begin MISO_BUFE = 0; DM_WE = 0; ADDR_WE = 0; diff --git a/spimemory.v b/spimemory.v index 882953a..c4a778a 100644 --- a/spimemory.v +++ b/spimemory.v @@ -23,9 +23,9 @@ module spiMemory inputconditioner condition3(clk, cs_pin, conditionedInput2, , ); wire[7:0] shiftRegOutP, dataMemoryOut; - wire serialOut, address; + wire serialOut, address; - shiftregister #(8) sr(.clk(clk), + shiftregister #(8) sr(.clk(clk), .peripheralClkEdge(positiveEdge), .parallelLoad(SR_WE), .parallelDataIn(dataMemoryOut), @@ -33,11 +33,11 @@ module spiMemory .parallelDataOut(shiftRegOutP), .serialDataOut(serialOut)); - // dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); - // wire q; - // dff #(1) dff2(clk, negativeEdge, serialOut, q); + dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); + wire q; + dff #(1) dff2(clk, negativeEdge, serialOut, q); - // datamemory dataMemory(clk, shiftRegOutP, address, DM_WE, dataMemoryOut); + datamemory dataMemory(clk, shiftRegOutP, address, DM_WE, dataMemoryOut); endmodule From 22ad47234b25bf912c54c5a89113198f219aead0 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sun, 29 Oct 2017 19:25:43 -0400 Subject: [PATCH 31/50] change initialization style to explicit --- spimemory.v | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/spimemory.v b/spimemory.v index 78aadd9..12f6afe 100644 --- a/spimemory.v +++ b/spimemory.v @@ -16,24 +16,32 @@ module spiMemory output [3:0] leds // LEDs for debugging ); reg MISO_BUFE, DM_WE, ADDR_WE, SR_WE; + wire conditionedInput1, conditionedInput2; wire positiveEdge, negativeEdge; - inputconditioner condition1(clk, miso_pin, conditioned, ,); - inputconditioner condition2(clk, sclk_pin, , positiveEdge, negativeEdge); - inputconditioner condition3(clk, cs_pin, conditionedInput2, , ); + inputconditioner c1(.clk(clk), + .noisysignal(miso_pin), + .conditioned(conditioned)); + inputconditioner c2(.clk(clk), + .noisysignal(sclk_pin), + .positiveedge(positiveEdge), + .negativeedge(negativeEdge)); + inputconditioner c3(.clk(clk), + .noisysignal(cs_pin), + .conditioned(conditionedInput2)); wire[7:0] shiftRegOutP, dataMemoryOut; - wire serialOut; + wire serialOut; - shiftregister #(8) sr(.clk(clk), - .peripheralClkEdge(positiveEdge), - .parallelLoad(SR_WE), - .parallelDataIn(dataMemoryOut), - .serialDataIn(conditionedInput1), - .parallelDataOut(shiftRegOutP), - .serialDataOut(serialOut)); + shiftregister #(8) sr(.clk(clk), + .peripheralClkEdge(positiveEdge), + .parallelLoad(SR_WE), + .parallelDataIn(dataMemoryOut), + .serialDataIn(conditionedInput1), + .parallelDataOut(shiftRegOutP), + .serialDataOut(serialOut)); - wire[7:0] address; + wire[7:0] address; dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); wire q; dff #(1) dff2(clk, negativeEdge, serialOut, q); From aaaa09fbdc6f082bc8c662eae5c3db9c2d57c925 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sun, 29 Oct 2017 19:34:24 -0400 Subject: [PATCH 32/50] add fsm to spi memory --- fsm.v | 18 +++++++++--------- spimemory.v | 21 ++++++++++++--------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/fsm.v b/fsm.v index ab28308..f72782a 100644 --- a/fsm.v +++ b/fsm.v @@ -3,14 +3,14 @@ //Example of a Finite State Machine where the traffic light state dictates the driving. module finiteStateMachine( - input [2:0], - input clk, + input chip_select, + input r_w, output reg MISO_BUFE, output reg DM_WE, output reg ADDR_WE, output reg SR_WE ); - + reg [7:0] state; localparam CSLow = 2'b00; @@ -20,13 +20,13 @@ localparam CSHigh = 2'b00; integer counter = 0; //change states on the clk cycles always @(posedge clk) begin - + // commands: CS_Low, done address load, parallelDataLoad, serialDataLoad // CS_high //normally you'll have an input of strings that'll dictate which states you go to (like the AddressIn) //but here, i'll just manually set it - //this'll normally be much more confusing and fun. which state should you be in to start? and then generally states lead to other states. + //this'll normally be much more confusing and fun. which state should you be in to start? and then generally states lead to other states. if (trafficlight == Green) begin state <= Green; end @@ -37,7 +37,7 @@ always @(posedge clk) begin state <= Red; end - if (addressLoad == ) begin + if (addressLoad == ) begin if (counter == 8) begin counter = 0; end @@ -46,7 +46,7 @@ always @(posedge clk) begin end end - + case (state) //driving - follow traffic laws CSLow: begin @@ -61,7 +61,7 @@ always @(posedge clk) begin ADDR_WE = 1; SR_WE = 0; end - + CSHigh: begin MISO_BUFE = 0; DM_WE = 0; @@ -70,4 +70,4 @@ always @(posedge clk) begin end endcase end -endmodule \ No newline at end of file +endmodule diff --git a/spimemory.v b/spimemory.v index 12f6afe..1a67abc 100644 --- a/spimemory.v +++ b/spimemory.v @@ -5,6 +5,7 @@ `include "shiftregister.v" `include "dff.v" `include "datamemory.v" +`include "fsm.v" module spiMemory ( @@ -16,37 +17,39 @@ module spiMemory output [3:0] leds // LEDs for debugging ); reg MISO_BUFE, DM_WE, ADDR_WE, SR_WE; - - wire conditionedInput1, conditionedInput2; - wire positiveEdge, negativeEdge; + + wire mosi, chip_select; + wire sclk_pos, sclk_neg; inputconditioner c1(.clk(clk), .noisysignal(miso_pin), .conditioned(conditioned)); inputconditioner c2(.clk(clk), .noisysignal(sclk_pin), - .positiveedge(positiveEdge), - .negativeedge(negativeEdge)); + .positiveedge(sclk_pos), + .negativeedge(sclk_neg)); inputconditioner c3(.clk(clk), .noisysignal(cs_pin), - .conditioned(conditionedInput2)); + .conditioned(chip_select)); wire[7:0] shiftRegOutP, dataMemoryOut; wire serialOut; shiftregister #(8) sr(.clk(clk), - .peripheralClkEdge(positiveEdge), + .peripheralClkEdge(sclk_pos), .parallelLoad(SR_WE), .parallelDataIn(dataMemoryOut), - .serialDataIn(conditionedInput1), + .serialDataIn(mosi), .parallelDataOut(shiftRegOutP), .serialDataOut(serialOut)); wire[7:0] address; dff #(8) dff1(clk, ADDR_WE, shiftRegOutP, address); wire q; - dff #(1) dff2(clk, negativeEdge, serialOut, q); + dff #(1) dff2(clk, sclk_neg, serialOut, q); datamemory dataMemory(clk, shiftRegOutP, address[7:1], DM_WE, dataMemoryOut); + finiteStateMachine fsm() + endmodule From 1cf97dfec34ce47f6784ddebde1758564c148b6b Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sun, 29 Oct 2017 19:38:19 -0400 Subject: [PATCH 33/50] add sclk pos --- fsm.v | 1 + spimemory.v | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/fsm.v b/fsm.v index f72782a..2a9814d 100644 --- a/fsm.v +++ b/fsm.v @@ -3,6 +3,7 @@ //Example of a Finite State Machine where the traffic light state dictates the driving. module finiteStateMachine( + input sclk_pos, input chip_select, input r_w, output reg MISO_BUFE, diff --git a/spimemory.v b/spimemory.v index 1a67abc..a07e7f3 100644 --- a/spimemory.v +++ b/spimemory.v @@ -49,7 +49,7 @@ module spiMemory datamemory dataMemory(clk, shiftRegOutP, address[7:1], DM_WE, dataMemoryOut); - finiteStateMachine fsm() + finiteStateMachine fsm(chip_select) endmodule From 3db847e113748b1ea0e5e54826bb3e391d7d2547 Mon Sep 17 00:00:00 2001 From: dpapp Date: Sun, 29 Oct 2017 19:38:24 -0400 Subject: [PATCH 34/50] fsm twerk --- fsm.v | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/fsm.v b/fsm.v index ab28308..877078d 100644 --- a/fsm.v +++ b/fsm.v @@ -24,19 +24,6 @@ always @(posedge clk) begin // commands: CS_Low, done address load, parallelDataLoad, serialDataLoad // CS_high - //normally you'll have an input of strings that'll dictate which states you go to (like the AddressIn) - //but here, i'll just manually set it - //this'll normally be much more confusing and fun. which state should you be in to start? and then generally states lead to other states. - if (trafficlight == Green) begin - state <= Green; - end - if (trafficlight == Yellow) begin - state <= Yellow; - end - if (trafficlight == Red) begin - state <= Red; - end - if (addressLoad == ) begin if (counter == 8) begin counter = 0; @@ -48,7 +35,6 @@ always @(posedge clk) begin case (state) - //driving - follow traffic laws CSLow: begin MISO_BUFE = 0; DM_WE = 0; From 33774b2836c34939acff0965908d9faa241de63f Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sun, 29 Oct 2017 19:49:02 -0400 Subject: [PATCH 35/50] Add tri-state buffer --- spimemory.v | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spimemory.v b/spimemory.v index a07e7f3..5f1961c 100644 --- a/spimemory.v +++ b/spimemory.v @@ -21,7 +21,7 @@ module spiMemory wire mosi, chip_select; wire sclk_pos, sclk_neg; inputconditioner c1(.clk(clk), - .noisysignal(miso_pin), + .noisysignal(mosi_pin), .conditioned(conditioned)); inputconditioner c2(.clk(clk), .noisysignal(sclk_pin), @@ -47,9 +47,12 @@ module spiMemory wire q; dff #(1) dff2(clk, sclk_neg, serialOut, q); + // Tri-state buffer + assign miso_pin = (MISO_BUFE) ? q : 1'bz; + datamemory dataMemory(clk, shiftRegOutP, address[7:1], DM_WE, dataMemoryOut); - finiteStateMachine fsm(chip_select) + finiteStateMachine fsm(sclk_pos, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); endmodule From 057331f9882a0ca28b181d04f48af9f6eaf0f419 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Sun, 29 Oct 2017 21:01:07 -0400 Subject: [PATCH 36/50] make stuff build --- fsm.v | 153 +++++++++++++++++++++++++------------------------- spimemory.t.v | 134 +++++++++++++++++++++++++++++++++++++++++++ spimemory.v | 4 +- 3 files changed, 211 insertions(+), 80 deletions(-) create mode 100644 spimemory.t.v diff --git a/fsm.v b/fsm.v index 2eb7386..0b52cce 100644 --- a/fsm.v +++ b/fsm.v @@ -3,7 +3,7 @@ //Example of a Finite State Machine where the traffic light state dictates the driving. module finiteStateMachine( - input sclk_pos, + input sclk, input chip_select, input r_w, output reg MISO_BUFE, @@ -12,91 +12,88 @@ module finiteStateMachine( output reg SR_WE ); + reg[7:0] state; + reg[7:0] prev_state; + localparam addressLoad = 1; + localparam branch = 2; + localparam write = 3; + localparam read = 4; + localparam reset = 0; -reg [7:0] state; -localparam addressLoad; -localparam branch; -localparam write; -localparam read; -localparam reset; -//localparam CSHigh = 2'b00; + integer counter = 0; + //change states on the clk cycles + always @(posedge sclk) begin -integer counter = 0; -//change states on the clk cycles -always @(posedge clk) begin + // commands: CS_Low, done address load, parallelDataLoad, serialDataLoad + // CS_high - // commands: CS_Low, done address load, parallelDataLoad, serialDataLoad - // CS_high - - reg [7:0] prev_state = state; - if (chip_select == 0) begin - state <= addressLoad; - end - else if (prev_state == addressLoad) begin - if (counter == 8) begin - counter = 0; - state <= branch; + prev_state <= state; + if (chip_select == 0) begin + state <= addressLoad; end - else begin - counter = counter + 1; + else if (prev_state == addressLoad) begin + if (counter == 8) begin + counter <= 0; + state <= branch; + end + else begin + counter <= counter + 1; + end end - end - else if (state == branch) begin - if (r_w == 0) begin // write - state <= write; - end - else begin // read - state <= read; - end - end - else if (state == write || state == write) begin - if (counter == 8) begin - counter = 0; - state <= reset; + else if (state == branch) begin + if (r_w == 0) begin // write + state <= write; + end + else begin // read + state <= read; + end end - else begin - counter = counter + 1; + else if (state == write || state == write) begin + if (counter == 8) begin + counter <= 0; + state <= reset; + end + else begin + counter <= counter + 1; + end end - end - - else if (state <= reset) begin - state <= reset; - end - - - case (state) - addressLoad: begin - MISO_BUFE = 0; - DM_WE = 0; - ADDR_WE = 1; - SR_WE = 0; - end - branch: begin - MISO_BUFE = 0; - DM_WE = 0; - ADDR_WE = 0; - SR_WE = 0; - end - write: begin - MISO_BUFE = 0; - DM_WE = 1; - ADDR_WE = 0; - SR_WE = 0; - end - read: begin - MISO_BUFE = 1; - DM_WE = 0; - ADDR_WE = 0; - SR_WE = 1; + else if (state <= reset) begin + state <= reset; end - reset: begin - MISO_BUFE = 0; - DM_WE = 0; - ADDR_WE = 0; - SR_WE = 0; - end - endcase -end + case (state) + addressLoad: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 1; + SR_WE <= 0; + end + branch: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 0; + end + write: begin + MISO_BUFE <= 0; + DM_WE <= 1; + ADDR_WE <= 0; + SR_WE <= 0; + end + read: begin + MISO_BUFE <= 1; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 1; + end + + reset: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 0; + end + endcase + end endmodule diff --git a/spimemory.t.v b/spimemory.t.v new file mode 100644 index 0000000..c4fc3c7 --- /dev/null +++ b/spimemory.t.v @@ -0,0 +1,134 @@ +//------------------------------------------------------------------------ +// SPI Memory Test Bench +//------------------------------------------------------------------------ +`include "spimemory.v" + +module testSPIMemory(); + + reg clk; // FPGA Clock + reg sclk_pin; // SPI Clock + reg cs_pin; // SPI Chip Select (enables SPI) + reg mosi_pin; // SPI master out slave in + wire miso_pin; // SPI master in slave out + + spiMemory spi(clk, sclk_pin, cs_pin, mosi_pin, miso_pin, ); + + initial clk = 0; + + initial begin + + cs_pin = 1; + // Test parallel loads + parallelLoad = 1; + parallelDataIn = 8'b00000000; + clk = 1; #10 clk = 0; #10 + if (parallelDataOut == 8'b00000000) begin + $display("Test Case 1 Passed"); + end + else begin + $display("Test Case 1 Failed!"); + end + + // parallelDataIn = 8'b00001111; + // clk = 1; #10 clk = 0; #10; + // if (parallelDataOut == 8'b00001111) begin + // $display("Test Case 2 Passed"); + // end + // else begin + // $display("Test Case 2 Failed!"); + // end + + // parallelDataIn = 8'b11111111; + // clk = 1; #10 clk = 0; #10 + // if (parallelDataOut == 8'b11111111) begin + // $display("Test Case 3 Passed"); + // end + // else begin + // $display("Test Case 3 Failed!"); + // end + // if (serialDataOut == 1) begin + // $display("Test Case 10 serialDataOut Passed"); + // end + // else begin + // $display("Test Case 10 serialDataOut Failed!"); + // $display("%8b", serialDataOut); + // end + + + // parallelLoad = 0; + // parallelDataIn = 8'b00000000; + // clk = 1; #10 clk = 0; #10 + // if (parallelDataOut == 8'b00000000) begin + // $display("Test Case 4 Failed!"); + // end + // else begin + // $display("Test Case 4 Passed"); + // end + + + // // serial tests + // clk = 0; #10 + // parallelLoad = 1; + // parallelDataIn = 8'b00000000; + // clk = 1; #10 clk = 0; #10 + + // parallelLoad = 0; + // serialDataIn = 1; + // peripheralClkEdge = 1; + + // clk = 1; #5 clk = 0; #5 + // if (parallelDataOut == 8'b00000001) begin + // $display("Test Case 6 Passed"); + // end + // else begin + // $display("Test Case 6 Failed!"); + // $display("%8b", parallelDataOut); + // end + // if (serialDataOut == 0) begin + // $display("Test Case 7 Passed"); + // end + // else begin + // $display("Test Case 7 Failed!"); + // $display("%8b", serialDataOut); + // end + + // clk = 1; #5 clk = 0; #5 + + // if (parallelDataOut == 8'b00000011) begin + // $display("passed serial test 2"); + // end + // else begin + // $display("failed serial test 2"); + // $display("%8b", parallelDataOut); + // end + + // clk = 1; #5 clk = 0; #5 + // if (parallelDataOut == 8'b00000111) begin + // $display("passed serial test 3"); + // end + // else begin + // $display("failed serial test 3"); + // $display("%8b", parallelDataOut); + // end + + // serialDataIn = 0; + // clk = 1; #5 clk = 0; #5 + // if (parallelDataOut == 8'b00001110) begin + // $display("passed serial test 4"); + // end + // else begin + // $display("failed serial test 4"); + // $display("%8b", parallelDataOut); + // end + // if (serialDataOut == 0) begin + // $display("passed serialOut test 2"); + // end + // else begin + // $display("failed serialOut test 2"); + // $display("%8b", serialDataOut); + // end + + // // test serialDataOut + // end + +endmodule diff --git a/spimemory.v b/spimemory.v index 5f1961c..8c72c49 100644 --- a/spimemory.v +++ b/spimemory.v @@ -16,7 +16,7 @@ module spiMemory output miso_pin, // SPI master in slave out output [3:0] leds // LEDs for debugging ); - reg MISO_BUFE, DM_WE, ADDR_WE, SR_WE; + wire MISO_BUFE, DM_WE, ADDR_WE, SR_WE; wire mosi, chip_select; wire sclk_pos, sclk_neg; @@ -52,7 +52,7 @@ module spiMemory datamemory dataMemory(clk, shiftRegOutP, address[7:1], DM_WE, dataMemoryOut); - finiteStateMachine fsm(sclk_pos, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); + finiteStateMachine fsm(sclk, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); endmodule From 1d1cf1fcf7ed28d3514b90a24b083edb3d76c639 Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 1 Nov 2017 15:01:46 -0400 Subject: [PATCH 37/50] first test --- spimemory.t.v | 156 ++++++++++++++------------------------------------ 1 file changed, 43 insertions(+), 113 deletions(-) diff --git a/spimemory.t.v b/spimemory.t.v index c4fc3c7..94907fe 100644 --- a/spimemory.t.v +++ b/spimemory.t.v @@ -14,121 +14,51 @@ module testSPIMemory(); spiMemory spi(clk, sclk_pin, cs_pin, mosi_pin, miso_pin, ); initial clk = 0; + initial cs_pin = 1; + reg [7:0] testOut = 8'bxxxxxxxx; // last bit is 1 for read initial begin - cs_pin = 1; - // Test parallel loads - parallelLoad = 1; - parallelDataIn = 8'b00000000; - clk = 1; #10 clk = 0; #10 - if (parallelDataOut == 8'b00000000) begin - $display("Test Case 1 Passed"); - end - else begin - $display("Test Case 1 Failed!"); - end - - // parallelDataIn = 8'b00001111; - // clk = 1; #10 clk = 0; #10; - // if (parallelDataOut == 8'b00001111) begin - // $display("Test Case 2 Passed"); - // end - // else begin - // $display("Test Case 2 Failed!"); - // end - - // parallelDataIn = 8'b11111111; - // clk = 1; #10 clk = 0; #10 - // if (parallelDataOut == 8'b11111111) begin - // $display("Test Case 3 Passed"); - // end - // else begin - // $display("Test Case 3 Failed!"); - // end - // if (serialDataOut == 1) begin - // $display("Test Case 10 serialDataOut Passed"); - // end - // else begin - // $display("Test Case 10 serialDataOut Failed!"); - // $display("%8b", serialDataOut); - // end - - - // parallelLoad = 0; - // parallelDataIn = 8'b00000000; - // clk = 1; #10 clk = 0; #10 - // if (parallelDataOut == 8'b00000000) begin - // $display("Test Case 4 Failed!"); - // end - // else begin - // $display("Test Case 4 Passed"); - // end - - - // // serial tests - // clk = 0; #10 - // parallelLoad = 1; - // parallelDataIn = 8'b00000000; - // clk = 1; #10 clk = 0; #10 - - // parallelLoad = 0; - // serialDataIn = 1; - // peripheralClkEdge = 1; - - // clk = 1; #5 clk = 0; #5 - // if (parallelDataOut == 8'b00000001) begin - // $display("Test Case 6 Passed"); - // end - // else begin - // $display("Test Case 6 Failed!"); - // $display("%8b", parallelDataOut); - // end - // if (serialDataOut == 0) begin - // $display("Test Case 7 Passed"); - // end - // else begin - // $display("Test Case 7 Failed!"); - // $display("%8b", serialDataOut); - // end - - // clk = 1; #5 clk = 0; #5 - - // if (parallelDataOut == 8'b00000011) begin - // $display("passed serial test 2"); - // end - // else begin - // $display("failed serial test 2"); - // $display("%8b", parallelDataOut); - // end - - // clk = 1; #5 clk = 0; #5 - // if (parallelDataOut == 8'b00000111) begin - // $display("passed serial test 3"); - // end - // else begin - // $display("failed serial test 3"); - // $display("%8b", parallelDataOut); - // end - - // serialDataIn = 0; - // clk = 1; #5 clk = 0; #5 - // if (parallelDataOut == 8'b00001110) begin - // $display("passed serial test 4"); - // end - // else begin - // $display("failed serial test 4"); - // $display("%8b", parallelDataOut); - // end - // if (serialDataOut == 0) begin - // $display("passed serialOut test 2"); - // end - // else begin - // $display("failed serialOut test 2"); - // $display("%8b", serialDataOut); - // end - - // // test serialDataOut - // end + + + // Push input + cs_pin = 0; + mosi_pin = 0; + clk = 0; #10 clk = 1; #10; // 1 + mosi_pin = 0; + clk = 0; #10 clk = 1; #10; // 2 + mosi_pin = 0; + clk = 0; #10 clk = 1; #10; // 3 + mosi_pin = 0; + clk = 0; #10 clk = 1; #10; // 4 + mosi_pin = 0; + clk = 0; #10 clk = 1; #10; // 5 + mosi_pin = 0; + clk = 0; #10 clk = 1; #10; // 6 + mosi_pin = 0; + clk = 0; #10 clk = 1; #10; // 7 + mosi_pin = 1; + clk = 0; #10 clk = 1; #10; // 8 + + mosi_pin = 1'bx; + // Read output + clk = 0; #10 clk = 1; #10; // 1 + testOut[0] = miso_pin; + clk = 0; #10 clk = 1; #10; // 2 + testOut[1] = miso_pin; + clk = 0; #10 clk = 1; #10; // 3 + testOut[2] = miso_pin; + clk = 0; #10 clk = 1; #10; // 4 + testOut[3] = miso_pin; + clk = 0; #10 clk = 1; #10; // 5 + testOut[4] = miso_pin; + clk = 0; #10 clk = 1; #10; // 6 + testOut[5] = miso_pin; + clk = 0; #10 clk = 1; #10; // 7 + testOut[6] = miso_pin; + clk = 0; #10 clk = 1; #10; // 8 + + $display("%8b", testOut); + end endmodule From d1ca4e5b2b96ed4f7a201efc9343b5c43b5c41ab Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 1 Nov 2017 15:22:36 -0400 Subject: [PATCH 38/50] fsm work --- fsm.v | 11 +- spimemory.t.v | 38 +- spimemory.v | 2 +- spimemory.vcd | 1510 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1536 insertions(+), 25 deletions(-) create mode 100644 spimemory.vcd diff --git a/fsm.v b/fsm.v index 0b52cce..3e46fe5 100644 --- a/fsm.v +++ b/fsm.v @@ -12,26 +12,25 @@ module finiteStateMachine( output reg SR_WE ); - reg[7:0] state; - reg[7:0] prev_state; localparam addressLoad = 1; localparam branch = 2; localparam write = 3; localparam read = 4; localparam reset = 0; + reg[7:0] state = reset; + integer counter = 0; //change states on the clk cycles + always @(posedge sclk) begin - // commands: CS_Low, done address load, parallelDataLoad, serialDataLoad // CS_high - prev_state <= state; - if (chip_select == 0) begin + if ((state == reset) && (chip_select == 0)) begin state <= addressLoad; end - else if (prev_state == addressLoad) begin + else if (state == addressLoad) begin if (counter == 8) begin counter <= 0; state <= branch; diff --git a/spimemory.t.v b/spimemory.t.v index 94907fe..357c190 100644 --- a/spimemory.t.v +++ b/spimemory.t.v @@ -16,49 +16,51 @@ module testSPIMemory(); initial clk = 0; initial cs_pin = 1; reg [7:0] testOut = 8'bxxxxxxxx; // last bit is 1 for read + always #1 clk=!clk; initial begin - - + $dumpfile("spimemory.vcd"); + $dumpvars; // Push input cs_pin = 0; mosi_pin = 0; - clk = 0; #10 clk = 1; #10; // 1 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 1 mosi_pin = 0; - clk = 0; #10 clk = 1; #10; // 2 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 2 mosi_pin = 0; - clk = 0; #10 clk = 1; #10; // 3 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 3 mosi_pin = 0; - clk = 0; #10 clk = 1; #10; // 4 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 4 mosi_pin = 0; - clk = 0; #10 clk = 1; #10; // 5 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 5 mosi_pin = 0; - clk = 0; #10 clk = 1; #10; // 6 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 6 mosi_pin = 0; - clk = 0; #10 clk = 1; #10; // 7 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 7 mosi_pin = 1; - clk = 0; #10 clk = 1; #10; // 8 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 mosi_pin = 1'bx; // Read output - clk = 0; #10 clk = 1; #10; // 1 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 1 testOut[0] = miso_pin; - clk = 0; #10 clk = 1; #10; // 2 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 2 testOut[1] = miso_pin; - clk = 0; #10 clk = 1; #10; // 3 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 3 testOut[2] = miso_pin; - clk = 0; #10 clk = 1; #10; // 4 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 4 testOut[3] = miso_pin; - clk = 0; #10 clk = 1; #10; // 5 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 5 testOut[4] = miso_pin; - clk = 0; #10 clk = 1; #10; // 6 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 6 testOut[5] = miso_pin; - clk = 0; #10 clk = 1; #10; // 7 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 7 testOut[6] = miso_pin; - clk = 0; #10 clk = 1; #10; // 8 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 $display("%8b", testOut); + $finish; end endmodule diff --git a/spimemory.v b/spimemory.v index 8c72c49..5be6891 100644 --- a/spimemory.v +++ b/spimemory.v @@ -52,7 +52,7 @@ module spiMemory datamemory dataMemory(clk, shiftRegOutP, address[7:1], DM_WE, dataMemoryOut); - finiteStateMachine fsm(sclk, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); + finiteStateMachine fsm(sclk_pin, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); endmodule diff --git a/spimemory.vcd b/spimemory.vcd new file mode 100644 index 0000000..feb5dbd --- /dev/null +++ b/spimemory.vcd @@ -0,0 +1,1510 @@ +$date + Wed Nov 1 15:22:16 2017 +$end +$version + Icarus Verilog +$end +$timescale + 1ps +$end +$scope module testSPIMemory $end +$var wire 1 ! miso_pin $end +$var reg 1 " clk $end +$var reg 1 # cs_pin $end +$var reg 1 $ mosi_pin $end +$var reg 1 % sclk_pin $end +$var reg 8 & testOut [7:0] $end +$scope module spi $end +$var wire 1 ' ADDR_WE $end +$var wire 1 ( DM_WE $end +$var wire 1 ) MISO_BUFE $end +$var wire 1 * SR_WE $end +$var wire 8 + address [7:0] $end +$var wire 1 , chip_select $end +$var wire 1 - clk $end +$var wire 1 . conditioned $end +$var wire 1 / cs_pin $end +$var wire 8 0 dataMemoryOut [7:0] $end +$var wire 4 1 leds [3:0] $end +$var wire 1 ! miso_pin $end +$var wire 1 2 mosi $end +$var wire 1 3 mosi_pin $end +$var wire 1 4 q $end +$var wire 1 5 sclk_neg $end +$var wire 1 6 sclk_pin $end +$var wire 1 7 sclk_pos $end +$var wire 1 8 serialOut $end +$var wire 1 9 shiftRegOut $end +$var wire 8 : shiftRegOutP [7:0] $end +$scope module c1 $end +$var wire 1 - clk $end +$var wire 1 3 noisysignal $end +$var reg 1 ; conditioned $end +$var reg 1 < negativeedge $end +$var reg 1 = positiveedge $end +$var reg 3 > prev_vals [2:0] $end +$upscope $end +$scope module c2 $end +$var wire 1 - clk $end +$var wire 1 6 noisysignal $end +$var reg 1 ? conditioned $end +$var reg 1 @ negativeedge $end +$var reg 1 A positiveedge $end +$var reg 3 B prev_vals [2:0] $end +$upscope $end +$scope module c3 $end +$var wire 1 - clk $end +$var wire 1 / noisysignal $end +$var reg 1 C conditioned $end +$var reg 1 D negativeedge $end +$var reg 1 E positiveedge $end +$var reg 3 F prev_vals [2:0] $end +$upscope $end +$scope module sr $end +$var wire 1 - clk $end +$var wire 8 G parallelDataIn [7:0] $end +$var wire 8 H parallelDataOut [7:0] $end +$var wire 1 * parallelLoad $end +$var wire 1 7 peripheralClkEdge $end +$var wire 1 2 serialDataIn $end +$var wire 1 8 serialDataOut $end +$var reg 8 I data [7:0] $end +$upscope $end +$scope module dff1 $end +$var wire 8 J d [7:0] $end +$var wire 1 ' enable $end +$var wire 1 - trigger $end +$var reg 8 K q [7:0] $end +$upscope $end +$scope module dff2 $end +$var wire 1 8 d $end +$var wire 1 5 enable $end +$var wire 1 - trigger $end +$var reg 1 L q $end +$upscope $end +$scope module dataMemory $end +$var wire 7 M address [6:0] $end +$var wire 1 - clk $end +$var wire 8 N dataIn [7:0] $end +$var wire 1 ( writeEnable $end +$var reg 8 O dataOut [7:0] $end +$upscope $end +$scope module fsm $end +$var wire 1 , chip_select $end +$var wire 1 9 r_w $end +$var wire 1 6 sclk $end +$var reg 1 P ADDR_WE $end +$var reg 1 Q DM_WE $end +$var reg 1 R MISO_BUFE $end +$var reg 1 S SR_WE $end +$var integer 32 T counter [31:0] $end +$var reg 8 U state [7:0] $end +$upscope $end +$upscope $end +$upscope $end +$enddefinitions $end +#0 +$dumpvars +b0 U +b0 T +xS +xR +xQ +xP +bx O +bz N +bx M +xL +bx K +bx J +bx I +bx H +bz G +bx F +xE +xD +xC +bx B +xA +x@ +x? +bx > +x= +x< +x; +bx : +z9 +x8 +x7 +06 +x5 +x4 +03 +z2 +bz 1 +bz 0 +0/ +x. +0- +x, +bx + +x* +x) +x( +x' +bx & +0% +0$ +0# +0" +x! +$end +#1000 +bx0 > +bx0 B +bx0 F +1" +1- +#2000 +0" +0- +#3000 +bx00 F +bx00 B +bx00 > +1" +1- +#4000 +0" +0- +#5000 +b0 > +b0 B +b0 F +1" +1- +#6000 +0" +0- +#7000 +0C +0, +0D +0? +0@ +05 +0; +0. +0< +1" +1- +#8000 +0" +0- +#9000 +1" +1- +#10000 +z! +0S +0* +0P +0' +0Q +0( +0R +0) +b1 U +0" +0- +1% +16 +#11000 +b1 B +1" +1- +#12000 +0" +0- +#13000 +b11 B +1" +1- +#14000 +0" +0- +#15000 +b111 B +1" +1- +#16000 +0" +0- +#17000 +1? +1A +17 +1" +1- +#18000 +0" +0- +#19000 +bxz I +0A +07 +1" +1- +#20000 +0" +0- +0% +06 +#21000 +b110 B +1" +1- +#22000 +0" +0- +#23000 +b100 B +1" +1- +#24000 +0" +0- +#25000 +b0 B +1" +1- +#26000 +0" +0- +#27000 +0? +1@ +15 +1" +1- +#28000 +0" +0- +#29000 +0@ +05 +1" +1- +#30000 +1P +1' +b1 T +0" +0- +1% +16 +#31000 +b1 B +1" +1- +#32000 +0" +0- +#33000 +b11 B +1" +1- +#34000 +0" +0- +#35000 +b111 B +1" +1- +#36000 +0" +0- +#37000 +1? +1A +17 +1" +1- +#38000 +0" +0- +#39000 +bxzz I +0A +07 +1" +1- +#40000 +0" +0- +0% +06 +#41000 +b110 B +1" +1- +#42000 +0" +0- +#43000 +b100 B +1" +1- +#44000 +0" +0- +#45000 +b0 B +1" +1- +#46000 +0" +0- +#47000 +0? +1@ +15 +1" +1- +#48000 +0" +0- +#49000 +0@ +05 +1" +1- +#50000 +b10 T +0" +0- +1% +16 +#51000 +b1 B +1" +1- +#52000 +0" +0- +#53000 +b11 B +1" +1- +#54000 +0" +0- +#55000 +b111 B +1" +1- +#56000 +0" +0- +#57000 +1? +1A +17 +1" +1- +#58000 +0" +0- +#59000 +bxzzz I +0A +07 +1" +1- +#60000 +0" +0- +0% +06 +#61000 +b110 B +1" +1- +#62000 +0" +0- +#63000 +b100 B +1" +1- +#64000 +0" +0- +#65000 +b0 B +1" +1- +#66000 +0" +0- +#67000 +0? +1@ +15 +1" +1- +#68000 +0" +0- +#69000 +0@ +05 +1" +1- +#70000 +b11 T +0" +0- +1% +16 +#71000 +b1 B +1" +1- +#72000 +0" +0- +#73000 +b11 B +1" +1- +#74000 +0" +0- +#75000 +b111 B +1" +1- +#76000 +0" +0- +#77000 +1? +1A +17 +1" +1- +#78000 +0" +0- +#79000 +bxzzzz I +0A +07 +1" +1- +#80000 +0" +0- +0% +06 +#81000 +b110 B +1" +1- +#82000 +0" +0- +#83000 +b100 B +1" +1- +#84000 +0" +0- +#85000 +b0 B +1" +1- +#86000 +0" +0- +#87000 +0? +1@ +15 +1" +1- +#88000 +0" +0- +#89000 +0@ +05 +1" +1- +#90000 +b100 T +0" +0- +1% +16 +#91000 +b1 B +1" +1- +#92000 +0" +0- +#93000 +b11 B +1" +1- +#94000 +0" +0- +#95000 +b111 B +1" +1- +#96000 +0" +0- +#97000 +1? +1A +17 +1" +1- +#98000 +0" +0- +#99000 +bxzzzzz I +0A +07 +1" +1- +#100000 +0" +0- +0% +06 +#101000 +b110 B +1" +1- +#102000 +0" +0- +#103000 +b100 B +1" +1- +#104000 +0" +0- +#105000 +b0 B +1" +1- +#106000 +0" +0- +#107000 +0? +1@ +15 +1" +1- +#108000 +0" +0- +#109000 +0@ +05 +1" +1- +#110000 +b101 T +0" +0- +1% +16 +#111000 +b1 B +1" +1- +#112000 +0" +0- +#113000 +b11 B +1" +1- +#114000 +0" +0- +#115000 +b111 B +1" +1- +#116000 +0" +0- +#117000 +1? +1A +17 +1" +1- +#118000 +0" +0- +#119000 +bxzzzzzz I +0A +07 +1" +1- +#120000 +0" +0- +0% +06 +#121000 +b110 B +1" +1- +#122000 +0" +0- +#123000 +b100 B +1" +1- +#124000 +0" +0- +#125000 +b0 B +1" +1- +#126000 +0" +0- +#127000 +0? +1@ +15 +1" +1- +#128000 +0" +0- +#129000 +0@ +05 +1" +1- +#130000 +b110 T +0" +0- +1% +16 +#131000 +b1 B +1" +1- +#132000 +0" +0- +#133000 +b11 B +1" +1- +#134000 +0" +0- +#135000 +b111 B +1" +1- +#136000 +0" +0- +#137000 +1? +1A +17 +1" +1- +#138000 +0" +0- +#139000 +bxzzzzzzz I +0A +07 +1" +1- +#140000 +0" +0- +0% +06 +1$ +13 +#141000 +b1 > +b110 B +1" +1- +#142000 +0" +0- +#143000 +b100 B +b11 > +1" +1- +#144000 +0" +0- +#145000 +b111 > +b0 B +1" +1- +#146000 +0" +0- +#147000 +0? +1@ +15 +1; +1. +1= +1" +1- +#148000 +0" +0- +#149000 +0= +0@ +05 +1" +1- +#150000 +b111 T +0" +0- +1% +16 +#151000 +b1 B +1" +1- +#152000 +0" +0- +#153000 +b11 B +1" +1- +#154000 +0" +0- +#155000 +b111 B +1" +1- +#156000 +0" +0- +#157000 +1? +1A +17 +1" +1- +#158000 +0" +0- +#159000 +z8 +bz I +0A +07 +1" +1- +#160000 +0" +0- +0% +06 +x$ +x3 +#161000 +b11x > +b110 B +1" +1- +#162000 +0" +0- +#163000 +b100 B +b1xx > +1" +1- +#164000 +0" +0- +#165000 +bx > +b0 B +1" +1- +#166000 +0" +0- +#167000 +0? +1@ +15 +1" +1- +#168000 +0" +0- +#169000 +0@ +05 +zL +z4 +1" +1- +#170000 +b1000 T +0" +0- +1% +16 +#171000 +b1 B +1" +1- +#172000 +0" +0- +#173000 +b11 B +1" +1- +#174000 +0" +0- +#175000 +b111 B +1" +1- +#176000 +0" +0- +#177000 +1? +1A +17 +1" +1- +#178000 +0" +0- +#179000 +0A +07 +1" +1- +#180000 +0" +0- +0% +06 +bxz & +#181000 +b110 B +1" +1- +#182000 +0" +0- +#183000 +b100 B +1" +1- +#184000 +0" +0- +#185000 +b0 B +1" +1- +#186000 +0" +0- +#187000 +0? +1@ +15 +1" +1- +#188000 +0" +0- +#189000 +0@ +05 +1" +1- +#190000 +b10 U +b0 T +0" +0- +1% +16 +#191000 +b1 B +1" +1- +#192000 +0" +0- +#193000 +b11 B +1" +1- +#194000 +0" +0- +#195000 +b111 B +1" +1- +#196000 +0" +0- +#197000 +1? +1A +17 +1" +1- +#198000 +0" +0- +#199000 +0A +07 +1" +1- +#200000 +0" +0- +0% +06 +bxzz & +#201000 +b110 B +1" +1- +#202000 +0" +0- +#203000 +b100 B +1" +1- +#204000 +0" +0- +#205000 +b0 B +1" +1- +#206000 +0" +0- +#207000 +0? +1@ +15 +1" +1- +#208000 +0" +0- +#209000 +0@ +05 +1" +1- +#210000 +0P +0' +b100 U +0" +0- +1% +16 +#211000 +b1 B +1" +1- +#212000 +0" +0- +#213000 +b11 B +1" +1- +#214000 +0" +0- +#215000 +b111 B +1" +1- +#216000 +0" +0- +#217000 +1? +1A +17 +1" +1- +#218000 +0" +0- +#219000 +0A +07 +1" +1- +#220000 +0" +0- +0% +06 +bxzzz & +#221000 +b110 B +1" +1- +#222000 +0" +0- +#223000 +b100 B +1" +1- +#224000 +0" +0- +#225000 +b0 B +1" +1- +#226000 +0" +0- +#227000 +0? +1@ +15 +1" +1- +#228000 +0" +0- +#229000 +0@ +05 +1" +1- +#230000 +1S +1* +1R +1) +0" +0- +1% +16 +#231000 +b1 B +1" +1- +#232000 +0" +0- +#233000 +b11 B +1" +1- +#234000 +0" +0- +#235000 +b111 B +1" +1- +#236000 +0" +0- +#237000 +1? +1A +17 +1" +1- +#238000 +0" +0- +#239000 +0A +07 +1" +1- +#240000 +0" +0- +0% +06 +bxzzzz & +#241000 +b110 B +1" +1- +#242000 +0" +0- +#243000 +b100 B +1" +1- +#244000 +0" +0- +#245000 +b0 B +1" +1- +#246000 +0" +0- +#247000 +0? +1@ +15 +1" +1- +#248000 +0" +0- +#249000 +0@ +05 +1" +1- +#250000 +0" +0- +1% +16 +#251000 +b1 B +1" +1- +#252000 +0" +0- +#253000 +b11 B +1" +1- +#254000 +0" +0- +#255000 +b111 B +1" +1- +#256000 +0" +0- +#257000 +1? +1A +17 +1" +1- +#258000 +0" +0- +#259000 +0A +07 +1" +1- +#260000 +0" +0- +0% +06 +bxzzzzz & +#261000 +b110 B +1" +1- +#262000 +0" +0- +#263000 +b100 B +1" +1- +#264000 +0" +0- +#265000 +b0 B +1" +1- +#266000 +0" +0- +#267000 +0? +1@ +15 +1" +1- +#268000 +0" +0- +#269000 +0@ +05 +1" +1- +#270000 +0" +0- +1% +16 +#271000 +b1 B +1" +1- +#272000 +0" +0- +#273000 +b11 B +1" +1- +#274000 +0" +0- +#275000 +b111 B +1" +1- +#276000 +0" +0- +#277000 +1? +1A +17 +1" +1- +#278000 +0" +0- +#279000 +0A +07 +1" +1- +#280000 +0" +0- +0% +06 +bxzzzzzz & +#281000 +b110 B +1" +1- +#282000 +0" +0- +#283000 +b100 B +1" +1- +#284000 +0" +0- +#285000 +b0 B +1" +1- +#286000 +0" +0- +#287000 +0? +1@ +15 +1" +1- +#288000 +0" +0- +#289000 +0@ +05 +1" +1- +#290000 +0" +0- +1% +16 +#291000 +b1 B +1" +1- +#292000 +0" +0- +#293000 +b11 B +1" +1- +#294000 +0" +0- +#295000 +b111 B +1" +1- +#296000 +0" +0- +#297000 +1? +1A +17 +1" +1- +#298000 +0" +0- +#299000 +0A +07 +1" +1- +#300000 +0" +0- +0% +06 +bxzzzzzzz & +#301000 +b110 B +1" +1- +#302000 +0" +0- +#303000 +b100 B +1" +1- +#304000 +0" +0- +#305000 +b0 B +1" +1- +#306000 +0" +0- +#307000 +0? +1@ +15 +1" +1- +#308000 +0" +0- +#309000 +0@ +05 +1" +1- +#310000 +0" +0- +1% +16 +#311000 +b1 B +1" +1- +#312000 +0" +0- +#313000 +b11 B +1" +1- +#314000 +0" +0- +#315000 +b111 B +1" +1- +#316000 +0" +0- +#317000 +1? +1A +17 +1" +1- +#318000 +0" +0- +#319000 +0A +07 +1" +1- +#320000 +0" +0- From f5c76612d45dff89d23139261eb3037af74a45a1 Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 1 Nov 2017 15:39:51 -0400 Subject: [PATCH 39/50] pus --- fsm.v | 23 +- spimemory.t.v | 5 +- spimemory.v | 2 +- spimemory.vcd | 1077 ++++++++++++++++++++++++++++++------------------- 4 files changed, 695 insertions(+), 412 deletions(-) diff --git a/fsm.v b/fsm.v index 3e46fe5..c61a322 100644 --- a/fsm.v +++ b/fsm.v @@ -17,12 +17,13 @@ module finiteStateMachine( localparam write = 3; localparam read = 4; localparam reset = 0; + localparam dataLoad = 5; reg[7:0] state = reset; integer counter = 0; //change states on the clk cycles - + always @(posedge sclk) begin // commands: CS_Low, done address load, parallelDataLoad, serialDataLoad // CS_high @@ -31,7 +32,7 @@ module finiteStateMachine( state <= addressLoad; end else if (state == addressLoad) begin - if (counter == 8) begin + if (counter == 6) begin counter <= 0; state <= branch; end @@ -44,11 +45,16 @@ module finiteStateMachine( state <= write; end else begin // read - state <= read; + state <= dataLoad; end end - else if (state == write || state == write) begin - if (counter == 8) begin + else if (state == dataLoad) begin + state <= read; + end + + + else if ((state == read) || (state == write)) begin + if (counter == 7) begin counter <= 0; state <= reset; end @@ -84,9 +90,14 @@ module finiteStateMachine( MISO_BUFE <= 1; DM_WE <= 0; ADDR_WE <= 0; + SR_WE <= 0; + end + dataLoad: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; SR_WE <= 1; end - reset: begin MISO_BUFE <= 0; DM_WE <= 0; diff --git a/spimemory.t.v b/spimemory.t.v index 357c190..961b13f 100644 --- a/spimemory.t.v +++ b/spimemory.t.v @@ -22,6 +22,7 @@ module testSPIMemory(); $dumpfile("spimemory.vcd"); $dumpvars; + //#50; // Push input cs_pin = 0; mosi_pin = 0; @@ -58,7 +59,9 @@ module testSPIMemory(); sclk_pin = 0; #10 sclk_pin = 1; #10; // 7 testOut[6] = miso_pin; sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 - + sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 + sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 $display("%8b", testOut); $finish; end diff --git a/spimemory.v b/spimemory.v index 5be6891..ebe91eb 100644 --- a/spimemory.v +++ b/spimemory.v @@ -38,7 +38,7 @@ module spiMemory .peripheralClkEdge(sclk_pos), .parallelLoad(SR_WE), .parallelDataIn(dataMemoryOut), - .serialDataIn(mosi), + .serialDataIn(mosi_pin), .parallelDataOut(shiftRegOutP), .serialDataOut(serialOut)); diff --git a/spimemory.vcd b/spimemory.vcd index feb5dbd..b4c5104 100644 --- a/spimemory.vcd +++ b/spimemory.vcd @@ -1,5 +1,5 @@ $date - Wed Nov 1 15:22:16 2017 + Wed Nov 1 15:37:17 2017 $end $version Icarus Verilog @@ -27,120 +27,118 @@ $var wire 1 / cs_pin $end $var wire 8 0 dataMemoryOut [7:0] $end $var wire 4 1 leds [3:0] $end $var wire 1 ! miso_pin $end -$var wire 1 2 mosi $end -$var wire 1 3 mosi_pin $end -$var wire 1 4 q $end -$var wire 1 5 sclk_neg $end -$var wire 1 6 sclk_pin $end -$var wire 1 7 sclk_pos $end -$var wire 1 8 serialOut $end -$var wire 1 9 shiftRegOut $end -$var wire 8 : shiftRegOutP [7:0] $end +$var wire 1 2 mosi_pin $end +$var wire 1 3 q $end +$var wire 1 4 sclk_neg $end +$var wire 1 5 sclk_pin $end +$var wire 1 6 sclk_pos $end +$var wire 1 7 serialOut $end +$var wire 1 8 shiftRegOut $end +$var wire 8 9 shiftRegOutP [7:0] $end $scope module c1 $end $var wire 1 - clk $end -$var wire 1 3 noisysignal $end -$var reg 1 ; conditioned $end -$var reg 1 < negativeedge $end -$var reg 1 = positiveedge $end -$var reg 3 > prev_vals [2:0] $end +$var wire 1 2 noisysignal $end +$var reg 1 : conditioned $end +$var reg 1 ; negativeedge $end +$var reg 1 < positiveedge $end +$var reg 3 = prev_vals [2:0] $end $upscope $end $scope module c2 $end $var wire 1 - clk $end -$var wire 1 6 noisysignal $end -$var reg 1 ? conditioned $end -$var reg 1 @ negativeedge $end -$var reg 1 A positiveedge $end -$var reg 3 B prev_vals [2:0] $end +$var wire 1 5 noisysignal $end +$var reg 1 > conditioned $end +$var reg 1 ? negativeedge $end +$var reg 1 @ positiveedge $end +$var reg 3 A prev_vals [2:0] $end $upscope $end $scope module c3 $end $var wire 1 - clk $end $var wire 1 / noisysignal $end -$var reg 1 C conditioned $end -$var reg 1 D negativeedge $end -$var reg 1 E positiveedge $end -$var reg 3 F prev_vals [2:0] $end +$var reg 1 B conditioned $end +$var reg 1 C negativeedge $end +$var reg 1 D positiveedge $end +$var reg 3 E prev_vals [2:0] $end $upscope $end $scope module sr $end $var wire 1 - clk $end -$var wire 8 G parallelDataIn [7:0] $end -$var wire 8 H parallelDataOut [7:0] $end +$var wire 8 F parallelDataIn [7:0] $end +$var wire 8 G parallelDataOut [7:0] $end $var wire 1 * parallelLoad $end -$var wire 1 7 peripheralClkEdge $end +$var wire 1 6 peripheralClkEdge $end $var wire 1 2 serialDataIn $end -$var wire 1 8 serialDataOut $end -$var reg 8 I data [7:0] $end +$var wire 1 7 serialDataOut $end +$var reg 8 H data [7:0] $end $upscope $end $scope module dff1 $end -$var wire 8 J d [7:0] $end +$var wire 8 I d [7:0] $end $var wire 1 ' enable $end $var wire 1 - trigger $end -$var reg 8 K q [7:0] $end +$var reg 8 J q [7:0] $end $upscope $end $scope module dff2 $end -$var wire 1 8 d $end -$var wire 1 5 enable $end +$var wire 1 7 d $end +$var wire 1 4 enable $end $var wire 1 - trigger $end -$var reg 1 L q $end +$var reg 1 K q $end $upscope $end $scope module dataMemory $end -$var wire 7 M address [6:0] $end +$var wire 7 L address [6:0] $end $var wire 1 - clk $end -$var wire 8 N dataIn [7:0] $end +$var wire 8 M dataIn [7:0] $end $var wire 1 ( writeEnable $end -$var reg 8 O dataOut [7:0] $end +$var reg 8 N dataOut [7:0] $end $upscope $end $scope module fsm $end $var wire 1 , chip_select $end -$var wire 1 9 r_w $end -$var wire 1 6 sclk $end -$var reg 1 P ADDR_WE $end -$var reg 1 Q DM_WE $end -$var reg 1 R MISO_BUFE $end -$var reg 1 S SR_WE $end -$var integer 32 T counter [31:0] $end -$var reg 8 U state [7:0] $end +$var wire 1 8 r_w $end +$var wire 1 5 sclk $end +$var reg 1 O ADDR_WE $end +$var reg 1 P DM_WE $end +$var reg 1 Q MISO_BUFE $end +$var reg 1 R SR_WE $end +$var integer 32 S counter [31:0] $end +$var reg 8 T state [7:0] $end $upscope $end $upscope $end $upscope $end $enddefinitions $end #0 $dumpvars -b0 U b0 T -xS +b0 S xR xQ xP -bx O -bz N -bx M -xL -bx K +xO +bx N +bz M +bx L +xK bx J bx I bx H -bz G -bx F -xE +bx G +bz F +bx E xD xC -bx B -xA +xB +bx A x@ x? -bx > -x= +x> +bx = x< x; -bx : -z9 -x8 +x: +bx 9 +z8 x7 -06 -x5 +x6 +05 x4 -03 -z2 +x3 +02 bz 1 bz 0 0/ @@ -160,42 +158,42 @@ bx & x! $end #1000 -bx0 > -bx0 B -bx0 F +bx0 = +bx0 A +bx0 E 1" 1- #2000 0" 0- #3000 -bx00 F -bx00 B -bx00 > +bx00 E +bx00 A +bx00 = 1" 1- #4000 0" 0- #5000 -b0 > -b0 B -b0 F +b0 = +b0 A +b0 E 1" 1- #6000 0" 0- #7000 -0C +0B 0, -0D +0C +0> 0? -0@ -05 -0; +04 +0: 0. -0< +0; 1" 1- #8000 @@ -206,1305 +204,1576 @@ b0 F 1- #10000 z! -0S +0R 0* -0P +0O 0' -0Q +0P 0( -0R +0Q 0) -b1 U +b1 T 0" 0- 1% -16 +15 #11000 -b1 B +b1 A 1" 1- #12000 0" 0- #13000 -b11 B +b11 A 1" 1- #14000 0" 0- #15000 -b111 B +b111 A 1" 1- #16000 0" 0- #17000 -1? -1A -17 +1> +1@ +16 1" 1- #18000 0" 0- #19000 -bxz I -0A -07 +bx0 H +0@ +06 1" 1- #20000 0" 0- 0% -06 +05 #21000 -b110 B +b110 A 1" 1- #22000 0" 0- #23000 -b100 B +b100 A 1" 1- #24000 0" 0- #25000 -b0 B +b0 A 1" 1- #26000 0" 0- #27000 -0? -1@ -15 +0> +1? +14 1" 1- #28000 0" 0- #29000 -0@ -05 +0? +04 1" 1- #30000 -1P +1O 1' -b1 T +b1 S 0" 0- 1% -16 +15 #31000 -b1 B +b1 A 1" 1- #32000 0" 0- #33000 -b11 B +b11 A 1" 1- #34000 0" 0- #35000 -b111 B +b111 A 1" 1- #36000 0" 0- #37000 -1? -1A -17 +1> +1@ +16 1" 1- #38000 0" 0- #39000 -bxzz I -0A -07 +bx00 H +0@ +06 1" 1- #40000 0" 0- 0% -06 +05 #41000 -b110 B +b110 A 1" 1- #42000 0" 0- #43000 -b100 B +b100 A 1" 1- #44000 0" 0- #45000 -b0 B +b0 A 1" 1- #46000 0" 0- #47000 -0? -1@ -15 +0> +1? +14 1" 1- #48000 0" 0- #49000 -0@ -05 +0? +04 1" 1- #50000 -b10 T +b10 S 0" 0- 1% -16 +15 #51000 -b1 B +b1 A 1" 1- #52000 0" 0- #53000 -b11 B +b11 A 1" 1- #54000 0" 0- #55000 -b111 B +b111 A 1" 1- #56000 0" 0- #57000 -1? -1A -17 +1> +1@ +16 1" 1- #58000 0" 0- #59000 -bxzzz I -0A -07 +bx000 H +0@ +06 1" 1- #60000 0" 0- 0% -06 +05 #61000 -b110 B +b110 A 1" 1- #62000 0" 0- #63000 -b100 B +b100 A 1" 1- #64000 0" 0- #65000 -b0 B +b0 A 1" 1- #66000 0" 0- #67000 -0? -1@ -15 +0> +1? +14 1" 1- #68000 0" 0- #69000 -0@ -05 +0? +04 1" 1- #70000 -b11 T +b11 S 0" 0- 1% -16 +15 #71000 -b1 B +b1 A 1" 1- #72000 0" 0- #73000 -b11 B +b11 A 1" 1- #74000 0" 0- #75000 -b111 B +b111 A 1" 1- #76000 0" 0- #77000 -1? -1A -17 +1> +1@ +16 1" 1- #78000 0" 0- #79000 -bxzzzz I -0A -07 +bx0000 H +0@ +06 1" 1- #80000 0" 0- 0% -06 +05 #81000 -b110 B +b110 A 1" 1- #82000 0" 0- #83000 -b100 B +b100 A 1" 1- #84000 0" 0- #85000 -b0 B +b0 A 1" 1- #86000 0" 0- #87000 -0? -1@ -15 +0> +1? +14 1" 1- #88000 0" 0- #89000 -0@ -05 +0? +04 1" 1- #90000 -b100 T +b100 S 0" 0- 1% -16 +15 #91000 -b1 B +b1 A 1" 1- #92000 0" 0- #93000 -b11 B +b11 A 1" 1- #94000 0" 0- #95000 -b111 B +b111 A 1" 1- #96000 0" 0- #97000 -1? -1A -17 +1> +1@ +16 1" 1- #98000 0" 0- #99000 -bxzzzzz I -0A -07 +bx00000 H +0@ +06 1" 1- #100000 0" 0- 0% -06 +05 #101000 -b110 B +b110 A 1" 1- #102000 0" 0- #103000 -b100 B +b100 A 1" 1- #104000 0" 0- #105000 -b0 B +b0 A 1" 1- #106000 0" 0- #107000 -0? -1@ -15 +0> +1? +14 1" 1- #108000 0" 0- #109000 -0@ -05 +0? +04 1" 1- #110000 -b101 T +b101 S 0" 0- 1% -16 +15 #111000 -b1 B +b1 A 1" 1- #112000 0" 0- #113000 -b11 B +b11 A 1" 1- #114000 0" 0- #115000 -b111 B +b111 A 1" 1- #116000 0" 0- #117000 -1? -1A -17 +1> +1@ +16 1" 1- #118000 0" 0- #119000 -bxzzzzzz I -0A -07 +bx000000 H +0@ +06 1" 1- #120000 0" 0- 0% -06 +05 #121000 -b110 B +b110 A 1" 1- #122000 0" 0- #123000 -b100 B +b100 A 1" 1- #124000 0" 0- #125000 -b0 B +b0 A 1" 1- #126000 0" 0- #127000 -0? -1@ -15 +0> +1? +14 1" 1- #128000 0" 0- #129000 -0@ -05 +0? +04 1" 1- #130000 -b110 T +b110 S 0" 0- 1% -16 +15 #131000 -b1 B +b1 A 1" 1- #132000 0" 0- #133000 -b11 B +b11 A 1" 1- #134000 0" 0- #135000 -b111 B +b111 A 1" 1- #136000 0" 0- #137000 -1? -1A -17 +1> +1@ +16 1" 1- #138000 0" 0- #139000 -bxzzzzzzz I -0A -07 +bx0000000 H +0@ +06 1" 1- #140000 0" 0- 0% -06 +05 1$ -13 +12 #141000 -b1 > -b110 B +b1 = +b110 A 1" 1- #142000 0" 0- #143000 -b100 B -b11 > +b100 A +b11 = 1" 1- #144000 0" 0- #145000 -b111 > -b0 B +b111 = +b0 A 1" 1- #146000 0" 0- #147000 -0? -1@ -15 -1; +0> +1? +14 +1: 1. -1= +1< 1" 1- #148000 0" 0- #149000 -0= -0@ -05 +0< +0? +04 1" 1- #150000 -b111 T +b10 T +b0 S 0" 0- 1% -16 +15 #151000 -b1 B +b1 A 1" 1- #152000 0" 0- #153000 -b11 B +b11 A 1" 1- #154000 0" 0- #155000 -b111 B +b111 A 1" 1- #156000 0" 0- #157000 -1? -1A -17 +1> +1@ +16 1" 1- #158000 0" 0- #159000 -z8 -bz I -0A 07 +b1 H +0@ +06 1" 1- #160000 0" 0- 0% -06 +05 x$ -x3 +x2 #161000 -b11x > -b110 B +b11x = +b110 A 1" 1- #162000 0" 0- #163000 -b100 B -b1xx > +b100 A +b1xx = 1" 1- #164000 0" 0- #165000 -bx > -b0 B +bx = +b0 A 1" 1- #166000 0" 0- #167000 -0? -1@ -15 +0> +1? +14 1" 1- #168000 0" 0- #169000 -0@ -05 -zL -z4 +0? +04 +0K +03 1" 1- #170000 -b1000 T +0O +0' +b101 T 0" 0- 1% -16 +15 #171000 -b1 B +b1 A 1" 1- #172000 0" 0- #173000 -b11 B +b11 A 1" 1- #174000 0" 0- #175000 -b111 B +b111 A 1" 1- #176000 0" 0- #177000 -1? -1A -17 +1> +1@ +16 1" 1- #178000 0" 0- #179000 -0A -07 +b1x H +0@ +06 1" 1- #180000 0" 0- 0% -06 +05 bxz & #181000 -b110 B +b110 A 1" 1- #182000 0" 0- #183000 -b100 B +b100 A 1" 1- #184000 0" 0- #185000 -b0 B +b0 A 1" 1- #186000 0" 0- #187000 -0? -1@ -15 +0> +1? +14 1" 1- #188000 0" 0- #189000 -0@ -05 +0? +04 1" 1- #190000 -b10 U -b0 T +1R +1* +b100 T 0" 0- 1% -16 +15 #191000 -b1 B +z7 +bz H +b1 A 1" 1- #192000 0" 0- #193000 -b11 B +b11 A 1" 1- #194000 0" 0- #195000 -b111 B +b111 A 1" 1- #196000 0" 0- #197000 -1? -1A -17 +1> +1@ +16 1" 1- #198000 0" 0- #199000 -0A -07 +0@ +06 1" 1- #200000 0" 0- 0% -06 +05 bxzz & #201000 -b110 B +b110 A 1" 1- #202000 0" 0- #203000 -b100 B +b100 A 1" 1- #204000 0" 0- #205000 -b0 B +b0 A 1" 1- #206000 0" 0- #207000 -0? -1@ -15 +0> +1? +14 1" 1- #208000 0" 0- #209000 -0@ -05 +0? +04 +zK +z3 1" 1- #210000 -0P -0' -b100 U +0R +0* +1Q +1) +b1 S 0" 0- 1% -16 +15 #211000 -b1 B +b1 A 1" 1- #212000 0" 0- #213000 -b11 B +b11 A 1" 1- #214000 0" 0- #215000 -b111 B +b111 A 1" 1- #216000 0" 0- #217000 -1? -1A -17 +1> +1@ +16 1" 1- #218000 0" 0- #219000 -0A -07 +bzx H +0@ +06 1" 1- #220000 0" 0- 0% -06 +05 bxzzz & #221000 -b110 B +b110 A 1" 1- #222000 0" 0- #223000 -b100 B +b100 A 1" 1- #224000 0" 0- #225000 -b0 B +b0 A 1" 1- #226000 0" 0- #227000 -0? -1@ -15 +0> +1? +14 1" 1- #228000 0" 0- #229000 -0@ -05 +0? +04 1" 1- #230000 -1S -1* -1R -1) +b10 S 0" 0- 1% -16 +15 #231000 -b1 B +b1 A 1" 1- #232000 0" 0- #233000 -b11 B +b11 A 1" 1- #234000 0" 0- #235000 -b111 B +b111 A 1" 1- #236000 0" 0- #237000 -1? -1A -17 +1> +1@ +16 1" 1- #238000 0" 0- #239000 -0A -07 +bzxx H +0@ +06 1" 1- #240000 0" 0- 0% -06 +05 bxzzzz & #241000 -b110 B +b110 A 1" 1- #242000 0" 0- #243000 -b100 B +b100 A 1" 1- #244000 0" 0- #245000 -b0 B +b0 A 1" 1- #246000 0" 0- #247000 -0? -1@ -15 +0> +1? +14 1" 1- #248000 0" 0- #249000 -0@ -05 +0? +04 1" 1- #250000 +b11 S 0" 0- 1% -16 +15 #251000 -b1 B +b1 A 1" 1- #252000 0" 0- #253000 -b11 B +b11 A 1" 1- #254000 0" 0- #255000 -b111 B +b111 A 1" 1- #256000 0" 0- #257000 -1? -1A -17 +1> +1@ +16 1" 1- #258000 0" 0- #259000 -0A -07 +bzxxx H +0@ +06 1" 1- #260000 0" 0- 0% -06 +05 bxzzzzz & #261000 -b110 B +b110 A 1" 1- #262000 0" 0- #263000 -b100 B +b100 A 1" 1- #264000 0" 0- #265000 -b0 B +b0 A 1" 1- #266000 0" 0- #267000 -0? -1@ -15 +0> +1? +14 1" 1- #268000 0" 0- #269000 -0@ -05 +0? +04 1" 1- #270000 +b100 S 0" 0- 1% -16 +15 #271000 -b1 B +b1 A 1" 1- #272000 0" 0- #273000 -b11 B +b11 A 1" 1- #274000 0" 0- #275000 -b111 B +b111 A 1" 1- #276000 0" 0- #277000 -1? -1A -17 +1> +1@ +16 1" 1- #278000 0" 0- #279000 -0A -07 +bzxxxx H +0@ +06 1" 1- #280000 0" 0- 0% -06 +05 bxzzzzzz & #281000 -b110 B +b110 A 1" 1- #282000 0" 0- #283000 -b100 B +b100 A 1" 1- #284000 0" 0- #285000 -b0 B +b0 A 1" 1- #286000 0" 0- #287000 -0? -1@ -15 +0> +1? +14 1" 1- #288000 0" 0- #289000 -0@ -05 +0? +04 1" 1- #290000 +b101 S 0" 0- 1% -16 +15 #291000 -b1 B +b1 A 1" 1- #292000 0" 0- #293000 -b11 B +b11 A 1" 1- #294000 0" 0- #295000 -b111 B +b111 A 1" 1- #296000 0" 0- #297000 -1? -1A -17 +1> +1@ +16 1" 1- #298000 0" 0- #299000 -0A -07 +bzxxxxx H +0@ +06 1" 1- #300000 0" 0- 0% -06 +05 bxzzzzzzz & #301000 -b110 B +b110 A 1" 1- #302000 0" 0- #303000 -b100 B +b100 A 1" 1- #304000 0" 0- #305000 -b0 B +b0 A 1" 1- #306000 0" 0- #307000 -0? -1@ -15 +0> +1? +14 1" 1- #308000 0" 0- #309000 -0@ -05 +0? +04 1" 1- #310000 +b110 S 0" 0- 1% -16 +15 #311000 -b1 B +b1 A 1" 1- #312000 0" 0- #313000 -b11 B +b11 A 1" 1- #314000 0" 0- #315000 -b111 B +b111 A 1" 1- #316000 0" 0- #317000 -1? -1A -17 +1> +1@ +16 1" 1- #318000 0" 0- #319000 -0A -07 +bzxxxxxx H +0@ +06 1" 1- #320000 0" 0- +0% +05 +#321000 +b110 A +1" +1- +#322000 +0" +0- +#323000 +b100 A +1" +1- +#324000 +0" +0- +#325000 +b0 A +1" +1- +#326000 +0" +0- +#327000 +0> +1? +14 +1" +1- +#328000 +0" +0- +#329000 +0? +04 +1" +1- +#330000 +b111 S +0" +0- +1% +15 +#331000 +b1 A +1" +1- +#332000 +0" +0- +#333000 +b11 A +1" +1- +#334000 +0" +0- +#335000 +b111 A +1" +1- +#336000 +0" +0- +#337000 +1> +1@ +16 +1" +1- +#338000 +0" +0- +#339000 +bzxxxxxxx H +0@ +06 +1" +1- +#340000 +0" +0- +0% +05 +#341000 +b110 A +1" +1- +#342000 +0" +0- +#343000 +b100 A +1" +1- +#344000 +0" +0- +#345000 +b0 A +1" +1- +#346000 +0" +0- +#347000 +0> +1? +14 +1" +1- +#348000 +0" +0- +#349000 +0? +04 +1" +1- +#350000 +b0 T +b0 S +0" +0- +1% +15 +#351000 +b1 A +1" +1- +#352000 +0" +0- +#353000 +b11 A +1" +1- +#354000 +0" +0- +#355000 +b111 A +1" +1- +#356000 +0" +0- +#357000 +1> +1@ +16 +1" +1- +#358000 +0" +0- +#359000 +x7 +bx H +0@ +06 +1" +1- +#360000 +0" +0- +0% +05 +#361000 +b110 A +1" +1- +#362000 +0" +0- +#363000 +b100 A +1" +1- +#364000 +0" +0- +#365000 +b0 A +1" +1- +#366000 +0" +0- +#367000 +0> +1? +14 +1" +1- +#368000 +0" +0- +#369000 +x! +0? +04 +xK +x3 +1" +1- +#370000 +z! +0Q +0) +b1 T +0" +0- +1% +15 +#371000 +b1 A +1" +1- +#372000 +0" +0- +#373000 +b11 A +1" +1- +#374000 +0" +0- +#375000 +b111 A +1" +1- +#376000 +0" +0- +#377000 +1> +1@ +16 +1" +1- +#378000 +0" +0- +#379000 +0@ +06 +1" +1- +#380000 +0" +0- From 7f75884d755957b9f236b4ccd800aa861dff8956 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 1 Nov 2017 15:51:51 -0400 Subject: [PATCH 40/50] make clock faster --- fsm.v | 145 ++++++++++++++++++++++++++-------------------------- spimemory.v | 2 +- 2 files changed, 74 insertions(+), 73 deletions(-) diff --git a/fsm.v b/fsm.v index c61a322..646685d 100644 --- a/fsm.v +++ b/fsm.v @@ -3,7 +3,8 @@ //Example of a Finite State Machine where the traffic light state dictates the driving. module finiteStateMachine( - input sclk, + input clk, + input sclk_posedge, input chip_select, input r_w, output reg MISO_BUFE, @@ -23,87 +24,87 @@ module finiteStateMachine( integer counter = 0; //change states on the clk cycles - - always @(posedge sclk) begin - // commands: CS_Low, done address load, parallelDataLoad, serialDataLoad - // CS_high - if ((state == reset) && (chip_select == 0)) begin - state <= addressLoad; - end - else if (state == addressLoad) begin - if (counter == 6) begin - counter <= 0; - state <= branch; + always @(posedge clk) begin + if (sclk_posedge) begin + + if ((state == reset) && (chip_select == 0)) begin + state <= addressLoad; end - else begin - counter <= counter + 1; + else if (state == addressLoad) begin + if (counter == 6) begin + counter <= 0; + state <= branch; + end + else begin + counter <= counter + 1; + end end - end - else if (state == branch) begin - if (r_w == 0) begin // write - state <= write; + else if (state == branch) begin + if (r_w == 0) begin // write + state <= write; + end + else begin // read + state <= dataLoad; + end end - else begin // read - state <= dataLoad; + else if (state == dataLoad) begin + state <= read; end - end - else if (state == dataLoad) begin - state <= read; - end - else if ((state == read) || (state == write)) begin - if (counter == 7) begin - counter <= 0; - state <= reset; + else if ((state == read) || (state == write)) begin + if (counter == 7) begin + counter <= 0; + state <= reset; + end + else begin + counter <= counter + 1; + end end - else begin - counter <= counter + 1; + + else if (state <= reset) begin + state <= reset; end - end - else if (state <= reset) begin - state <= reset; + case (state) + addressLoad: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 1; + SR_WE <= 0; + end + branch: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 0; + end + write: begin + MISO_BUFE <= 0; + DM_WE <= 1; + ADDR_WE <= 0; + SR_WE <= 0; + end + read: begin + MISO_BUFE <= 1; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 0; + end + dataLoad: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 1; + end + reset: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 0; + end + endcase end - - case (state) - addressLoad: begin - MISO_BUFE <= 0; - DM_WE <= 0; - ADDR_WE <= 1; - SR_WE <= 0; - end - branch: begin - MISO_BUFE <= 0; - DM_WE <= 0; - ADDR_WE <= 0; - SR_WE <= 0; - end - write: begin - MISO_BUFE <= 0; - DM_WE <= 1; - ADDR_WE <= 0; - SR_WE <= 0; - end - read: begin - MISO_BUFE <= 1; - DM_WE <= 0; - ADDR_WE <= 0; - SR_WE <= 0; - end - dataLoad: begin - MISO_BUFE <= 0; - DM_WE <= 0; - ADDR_WE <= 0; - SR_WE <= 1; - end - reset: begin - MISO_BUFE <= 0; - DM_WE <= 0; - ADDR_WE <= 0; - SR_WE <= 0; - end - endcase end endmodule diff --git a/spimemory.v b/spimemory.v index ebe91eb..cabaa23 100644 --- a/spimemory.v +++ b/spimemory.v @@ -52,7 +52,7 @@ module spiMemory datamemory dataMemory(clk, shiftRegOutP, address[7:1], DM_WE, dataMemoryOut); - finiteStateMachine fsm(sclk_pin, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); + finiteStateMachine fsm(clk, sclk_pos, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); endmodule From da0015591b51c4a73e9e555d44128497b1c016cd Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 1 Nov 2017 15:52:52 -0400 Subject: [PATCH 41/50] saves --- spimemory.v | 6 +++--- spimemory.vcd | 50 +++++++++++++++++++++++++------------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/spimemory.v b/spimemory.v index ebe91eb..0cf33b2 100644 --- a/spimemory.v +++ b/spimemory.v @@ -18,11 +18,11 @@ module spiMemory ); wire MISO_BUFE, DM_WE, ADDR_WE, SR_WE; - wire mosi, chip_select; + wire mosi_conditioned, chip_select; wire sclk_pos, sclk_neg; inputconditioner c1(.clk(clk), .noisysignal(mosi_pin), - .conditioned(conditioned)); + .conditioned(mosi_conditioned)); inputconditioner c2(.clk(clk), .noisysignal(sclk_pin), .positiveedge(sclk_pos), @@ -38,7 +38,7 @@ module spiMemory .peripheralClkEdge(sclk_pos), .parallelLoad(SR_WE), .parallelDataIn(dataMemoryOut), - .serialDataIn(mosi_pin), + .serialDataIn(mosi_conditioned), .parallelDataOut(shiftRegOutP), .serialDataOut(serialOut)); diff --git a/spimemory.vcd b/spimemory.vcd index b4c5104..2de3c04 100644 --- a/spimemory.vcd +++ b/spimemory.vcd @@ -1,5 +1,5 @@ $date - Wed Nov 1 15:37:17 2017 + Wed Nov 1 15:46:17 2017 $end $version Icarus Verilog @@ -22,11 +22,11 @@ $var wire 1 * SR_WE $end $var wire 8 + address [7:0] $end $var wire 1 , chip_select $end $var wire 1 - clk $end -$var wire 1 . conditioned $end -$var wire 1 / cs_pin $end -$var wire 8 0 dataMemoryOut [7:0] $end -$var wire 4 1 leds [3:0] $end +$var wire 1 . cs_pin $end +$var wire 8 / dataMemoryOut [7:0] $end +$var wire 4 0 leds [3:0] $end $var wire 1 ! miso_pin $end +$var wire 1 1 mosi_conditioned $end $var wire 1 2 mosi_pin $end $var wire 1 3 q $end $var wire 1 4 sclk_neg $end @@ -53,7 +53,7 @@ $var reg 3 A prev_vals [2:0] $end $upscope $end $scope module c3 $end $var wire 1 - clk $end -$var wire 1 / noisysignal $end +$var wire 1 . noisysignal $end $var reg 1 B conditioned $end $var reg 1 C negativeedge $end $var reg 1 D positiveedge $end @@ -65,7 +65,7 @@ $var wire 8 F parallelDataIn [7:0] $end $var wire 8 G parallelDataOut [7:0] $end $var wire 1 * parallelLoad $end $var wire 1 6 peripheralClkEdge $end -$var wire 1 2 serialDataIn $end +$var wire 1 1 serialDataIn $end $var wire 1 7 serialDataOut $end $var reg 8 H data [7:0] $end $upscope $end @@ -139,10 +139,10 @@ x6 x4 x3 02 -bz 1 +x1 bz 0 -0/ -x. +bz / +0. 0- x, bx + @@ -192,7 +192,7 @@ b0 E 0? 04 0: -0. +01 0; 1" 1- @@ -783,7 +783,7 @@ b0 A 1? 14 1: -1. +11 1< 1" 1- @@ -926,7 +926,7 @@ b111 A 0" 0- #179000 -b1x H +b11 H 0@ 06 1" @@ -1101,7 +1101,7 @@ b111 A 0" 0- #219000 -bzx H +bz1 H 0@ 06 1" @@ -1184,7 +1184,7 @@ b111 A 0" 0- #239000 -bzxx H +bz11 H 0@ 06 1" @@ -1267,7 +1267,7 @@ b111 A 0" 0- #259000 -bzxxx H +bz111 H 0@ 06 1" @@ -1350,7 +1350,7 @@ b111 A 0" 0- #279000 -bzxxxx H +bz1111 H 0@ 06 1" @@ -1433,7 +1433,7 @@ b111 A 0" 0- #299000 -bzxxxxx H +bz11111 H 0@ 06 1" @@ -1516,7 +1516,7 @@ b111 A 0" 0- #319000 -bzxxxxxx H +bz111111 H 0@ 06 1" @@ -1598,7 +1598,7 @@ b111 A 0" 0- #339000 -bzxxxxxxx H +bz1111111 H 0@ 06 1" @@ -1681,8 +1681,8 @@ b111 A 0" 0- #359000 -x7 -bx H +17 +b11111111 H 0@ 06 1" @@ -1723,11 +1723,11 @@ b0 A 0" 0- #369000 -x! +1! 0? 04 -xK -x3 +1K +13 1" 1- #370000 From 08062ebf7d5189fd29549445e359225b4f00c1cd Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 1 Nov 2017 15:55:06 -0400 Subject: [PATCH 42/50] take changing state out of if --- fsm.v | 77 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/fsm.v b/fsm.v index 646685d..99397a3 100644 --- a/fsm.v +++ b/fsm.v @@ -66,45 +66,44 @@ module finiteStateMachine( else if (state <= reset) begin state <= reset; end - - case (state) - addressLoad: begin - MISO_BUFE <= 0; - DM_WE <= 0; - ADDR_WE <= 1; - SR_WE <= 0; - end - branch: begin - MISO_BUFE <= 0; - DM_WE <= 0; - ADDR_WE <= 0; - SR_WE <= 0; - end - write: begin - MISO_BUFE <= 0; - DM_WE <= 1; - ADDR_WE <= 0; - SR_WE <= 0; - end - read: begin - MISO_BUFE <= 1; - DM_WE <= 0; - ADDR_WE <= 0; - SR_WE <= 0; - end - dataLoad: begin - MISO_BUFE <= 0; - DM_WE <= 0; - ADDR_WE <= 0; - SR_WE <= 1; - end - reset: begin - MISO_BUFE <= 0; - DM_WE <= 0; - ADDR_WE <= 0; - SR_WE <= 0; - end - endcase end + case (state) + addressLoad: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 1; + SR_WE <= 0; + end + branch: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 0; + end + write: begin + MISO_BUFE <= 0; + DM_WE <= 1; + ADDR_WE <= 0; + SR_WE <= 0; + end + read: begin + MISO_BUFE <= 1; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 0; + end + dataLoad: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 1; + end + reset: begin + MISO_BUFE <= 0; + DM_WE <= 0; + ADDR_WE <= 0; + SR_WE <= 0; + end + endcase end endmodule From 94283e251b631deeddf49a2da6bbf6244ccac0d4 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 1 Nov 2017 15:59:44 -0400 Subject: [PATCH 43/50] parameterize input conditioner --- inputconditioner.v | 11 +- spimemory.v | 2 +- spimemory.vcd | 683 ++++++++++++++++++++------------------------- 3 files changed, 311 insertions(+), 385 deletions(-) diff --git a/inputconditioner.v b/inputconditioner.v index 5491359..22b3c5f 100644 --- a/inputconditioner.v +++ b/inputconditioner.v @@ -6,6 +6,9 @@ //------------------------------------------------------------------------ module inputconditioner +#( + parameter wait_time = 3 +) ( input clk, // Clock domain to synchronize input to input noisysignal, // (Potentially) noisy input signal @@ -13,16 +16,14 @@ output reg conditioned, // Conditioned output signal output reg positiveedge, // 1 clk pulse at rising edge of conditioned output reg negativeedge // 1 clk pulse at falling edge of conditioned ); - parameter wait_time = 3; reg[wait_time-1:0] prev_vals; - always @(posedge clk ) begin // Case 1: The previous values are all 1s if( prev_vals == ((2**wait_time) - 1)) begin if (conditioned == 0) begin positiveedge <= 1; - end + end else begin positiveedge <= 0; end @@ -39,8 +40,8 @@ output reg negativeedge // 1 clk pulse at falling edge of conditioned conditioned <= 0; end - + prev_vals <= {prev_vals, noisysignal}; end -endmodule \ No newline at end of file +endmodule diff --git a/spimemory.v b/spimemory.v index 4882062..f0c8118 100644 --- a/spimemory.v +++ b/spimemory.v @@ -23,7 +23,7 @@ module spiMemory inputconditioner c1(.clk(clk), .noisysignal(mosi_pin), .conditioned(mosi_conditioned)); - inputconditioner c2(.clk(clk), + inputconditioner #(1) c2(.clk(clk), .noisysignal(sclk_pin), .positiveedge(sclk_pos), .negativeedge(sclk_neg)); diff --git a/spimemory.vcd b/spimemory.vcd index 2de3c04..2758325 100644 --- a/spimemory.vcd +++ b/spimemory.vcd @@ -1,5 +1,5 @@ $date - Wed Nov 1 15:46:17 2017 + Wed Nov 1 15:59:20 2017 $end $version Icarus Verilog @@ -49,7 +49,7 @@ $var wire 1 5 noisysignal $end $var reg 1 > conditioned $end $var reg 1 ? negativeedge $end $var reg 1 @ positiveedge $end -$var reg 3 A prev_vals [2:0] $end +$var reg 1 A prev_vals $end $upscope $end $scope module c3 $end $var wire 1 - clk $end @@ -90,8 +90,9 @@ $var reg 8 N dataOut [7:0] $end $upscope $end $scope module fsm $end $var wire 1 , chip_select $end +$var wire 1 - clk $end $var wire 1 8 r_w $end -$var wire 1 5 sclk $end +$var wire 1 6 sclk_posedge $end $var reg 1 O ADDR_WE $end $var reg 1 P DM_WE $end $var reg 1 Q MISO_BUFE $end @@ -123,7 +124,7 @@ bx E xD xC xB -bx A +xA x@ x? x> @@ -158,9 +159,18 @@ bx & x! $end #1000 +z! bx0 = -bx0 A +0A bx0 E +0R +0* +0O +0' +0P +0( +0Q +0) 1" 1- #2000 @@ -168,7 +178,9 @@ bx0 E 0- #3000 bx00 E -bx00 A +0> +0? +04 bx00 = 1" 1- @@ -177,7 +189,6 @@ bx00 = 0- #5000 b0 = -b0 A b0 E 1" 1- @@ -188,9 +199,6 @@ b0 E 0B 0, 0C -0> -0? -04 0: 01 0; @@ -203,54 +211,45 @@ b0 E 1" 1- #10000 -z! -0R -0* -0O -0' -0P -0( -0Q -0) -b1 T 0" 0- 1% 15 #11000 -b1 A +1A 1" 1- #12000 0" 0- #13000 -b11 A +1> +1@ +16 1" 1- #14000 0" 0- #15000 -b111 A +b1 T +bx0 H +0@ +06 1" 1- #16000 0" 0- #17000 -1> -1@ -16 +1O +1' 1" 1- #18000 0" 0- #19000 -bx0 H -0@ -06 1" 1- #20000 @@ -259,82 +258,76 @@ bx0 H 0% 05 #21000 -b110 A +0A 1" 1- #22000 0" 0- #23000 -b100 A +0> +1? +14 1" 1- #24000 0" 0- #25000 -b0 A +0? +04 1" 1- #26000 0" 0- #27000 -0> -1? -14 1" 1- #28000 0" 0- #29000 -0? -04 1" 1- #30000 -1O -1' -b1 S 0" 0- 1% 15 #31000 -b1 A +1A 1" 1- #32000 0" 0- #33000 -b11 A +1> +1@ +16 1" 1- #34000 0" 0- #35000 -b111 A +b1 S +bx00 H +0@ +06 1" 1- #36000 0" 0- #37000 -1> -1@ -16 1" 1- #38000 0" 0- #39000 -bx00 H -0@ -06 1" 1- #40000 @@ -343,80 +336,76 @@ bx00 H 0% 05 #41000 -b110 A +0A 1" 1- #42000 0" 0- #43000 -b100 A +0> +1? +14 1" 1- #44000 0" 0- #45000 -b0 A +0? +04 1" 1- #46000 0" 0- #47000 -0> -1? -14 1" 1- #48000 0" 0- #49000 -0? -04 1" 1- #50000 -b10 S 0" 0- 1% 15 #51000 -b1 A +1A 1" 1- #52000 0" 0- #53000 -b11 A +1> +1@ +16 1" 1- #54000 0" 0- #55000 -b111 A +b10 S +bx000 H +0@ +06 1" 1- #56000 0" 0- #57000 -1> -1@ -16 1" 1- #58000 0" 0- #59000 -bx000 H -0@ -06 1" 1- #60000 @@ -425,80 +414,76 @@ bx000 H 0% 05 #61000 -b110 A +0A 1" 1- #62000 0" 0- #63000 -b100 A +0> +1? +14 1" 1- #64000 0" 0- #65000 -b0 A +0? +04 1" 1- #66000 0" 0- #67000 -0> -1? -14 1" 1- #68000 0" 0- #69000 -0? -04 1" 1- #70000 -b11 S 0" 0- 1% 15 #71000 -b1 A +1A 1" 1- #72000 0" 0- #73000 -b11 A +1> +1@ +16 1" 1- #74000 0" 0- #75000 -b111 A +b11 S +bx0000 H +0@ +06 1" 1- #76000 0" 0- #77000 -1> -1@ -16 1" 1- #78000 0" 0- #79000 -bx0000 H -0@ -06 1" 1- #80000 @@ -507,80 +492,76 @@ bx0000 H 0% 05 #81000 -b110 A +0A 1" 1- #82000 0" 0- #83000 -b100 A +0> +1? +14 1" 1- #84000 0" 0- #85000 -b0 A +0? +04 1" 1- #86000 0" 0- #87000 -0> -1? -14 1" 1- #88000 0" 0- #89000 -0? -04 1" 1- #90000 -b100 S 0" 0- 1% 15 #91000 -b1 A +1A 1" 1- #92000 0" 0- #93000 -b11 A +1> +1@ +16 1" 1- #94000 0" 0- #95000 -b111 A +b100 S +bx00000 H +0@ +06 1" 1- #96000 0" 0- #97000 -1> -1@ -16 1" 1- #98000 0" 0- #99000 -bx00000 H -0@ -06 1" 1- #100000 @@ -589,80 +570,76 @@ bx00000 H 0% 05 #101000 -b110 A +0A 1" 1- #102000 0" 0- #103000 -b100 A +0> +1? +14 1" 1- #104000 0" 0- #105000 -b0 A +0? +04 1" 1- #106000 0" 0- #107000 -0> -1? -14 1" 1- #108000 0" 0- #109000 -0? -04 1" 1- #110000 -b101 S 0" 0- 1% 15 #111000 -b1 A +1A 1" 1- #112000 0" 0- #113000 -b11 A +1> +1@ +16 1" 1- #114000 0" 0- #115000 -b111 A +b101 S +bx000000 H +0@ +06 1" 1- #116000 0" 0- #117000 -1> -1@ -16 1" 1- #118000 0" 0- #119000 -bx000000 H -0@ -06 1" 1- #120000 @@ -671,80 +648,76 @@ bx000000 H 0% 05 #121000 -b110 A +0A 1" 1- #122000 0" 0- #123000 -b100 A +0> +1? +14 1" 1- #124000 0" 0- #125000 -b0 A +0? +04 1" 1- #126000 0" 0- #127000 -0> -1? -14 1" 1- #128000 0" 0- #129000 -0? -04 1" 1- #130000 -b110 S 0" 0- 1% 15 #131000 -b1 A +1A 1" 1- #132000 0" 0- #133000 -b11 A +1> +1@ +16 1" 1- #134000 0" 0- #135000 -b111 A +b110 S +bx0000000 H +0@ +06 1" 1- #136000 0" 0- #137000 -1> -1@ -16 1" 1- #138000 0" 0- #139000 -bx0000000 H -0@ -06 1" 1- #140000 @@ -756,14 +729,16 @@ bx0000000 H 12 #141000 b1 = -b110 A +0A 1" 1- #142000 0" 0- #143000 -b100 A +0> +1? +14 b11 = 1" 1- @@ -772,16 +747,14 @@ b11 = 0- #145000 b111 = -b0 A +0? +04 1" 1- #146000 0" 0- #147000 -0> -1? -14 1: 11 1< @@ -792,52 +765,50 @@ b0 A 0- #149000 0< -0? -04 1" 1- #150000 -b10 T -b0 S 0" 0- 1% 15 #151000 -b1 A +1A 1" 1- #152000 0" 0- #153000 -b11 A +1> +1@ +16 1" 1- #154000 0" 0- #155000 -b111 A +07 +b10 T +b0 S +b1 H +0@ +06 1" 1- #156000 0" 0- #157000 -1> -1@ -16 +0O +0' 1" 1- #158000 0" 0- #159000 -07 -b1 H -0@ -06 1" 1- #160000 @@ -849,14 +820,16 @@ x$ x2 #161000 b11x = -b110 A +0A 1" 1- #162000 0" 0- #163000 -b100 A +0> +1? +14 b1xx = 1" 1- @@ -865,70 +838,66 @@ b1xx = 0- #165000 bx = -b0 A +0? +04 +0K +03 1" 1- #166000 0" 0- #167000 -0> -1? -14 1" 1- #168000 0" 0- #169000 -0? -04 -0K -03 1" 1- #170000 -0O -0' -b101 T 0" 0- 1% 15 #171000 -b1 A +1A 1" 1- #172000 0" 0- #173000 -b11 A +1> +1@ +16 1" 1- #174000 0" 0- #175000 -b111 A +b101 T +b11 H +0@ +06 1" 1- #176000 0" 0- #177000 -1> -1@ -16 +1R +1* 1" 1- #178000 0" 0- #179000 -b11 H -0@ -06 +z7 +bz H 1" 1- #180000 @@ -938,83 +907,81 @@ b11 H 05 bxz & #181000 -b110 A +0A 1" 1- #182000 0" 0- #183000 -b100 A +0> +1? +14 1" 1- #184000 0" 0- #185000 -b0 A -1" -1- +0? +04 +zK +z3 +1" +1- #186000 0" 0- #187000 -0> -1? -14 1" 1- #188000 0" 0- #189000 -0? -04 1" 1- #190000 -1R -1* -b100 T 0" 0- 1% 15 #191000 -z7 -bz H -b1 A +1A 1" 1- #192000 0" 0- #193000 -b11 A +1> +1@ +16 1" 1- #194000 0" 0- #195000 -b111 A +b100 T +0@ +06 1" 1- #196000 0" 0- #197000 -1> -1@ -16 +0R +0* +1Q +1) 1" 1- #198000 0" 0- #199000 -0@ -06 1" 1- #200000 @@ -1024,86 +991,76 @@ b111 A 05 bxzz & #201000 -b110 A +0A 1" 1- #202000 0" 0- #203000 -b100 A +0> +1? +14 1" 1- #204000 0" 0- #205000 -b0 A +0? +04 1" 1- #206000 0" 0- #207000 -0> -1? -14 1" 1- #208000 0" 0- #209000 -0? -04 -zK -z3 1" 1- #210000 -0R -0* -1Q -1) -b1 S 0" 0- 1% 15 #211000 -b1 A +1A 1" 1- #212000 0" 0- #213000 -b11 A +1> +1@ +16 1" 1- #214000 0" 0- #215000 -b111 A +b1 S +bz1 H +0@ +06 1" 1- #216000 0" 0- #217000 -1> -1@ -16 1" 1- #218000 0" 0- #219000 -bz1 H -0@ -06 1" 1- #220000 @@ -1113,80 +1070,76 @@ bz1 H 05 bxzzz & #221000 -b110 A +0A 1" 1- #222000 0" 0- #223000 -b100 A +0> +1? +14 1" 1- #224000 0" 0- #225000 -b0 A +0? +04 1" 1- #226000 0" 0- #227000 -0> -1? -14 1" 1- #228000 0" 0- #229000 -0? -04 1" 1- #230000 -b10 S 0" 0- 1% 15 #231000 -b1 A +1A 1" 1- #232000 0" 0- #233000 -b11 A +1> +1@ +16 1" 1- #234000 0" 0- #235000 -b111 A +b10 S +bz11 H +0@ +06 1" 1- #236000 0" 0- #237000 -1> -1@ -16 1" 1- #238000 0" 0- #239000 -bz11 H -0@ -06 1" 1- #240000 @@ -1196,80 +1149,76 @@ bz11 H 05 bxzzzz & #241000 -b110 A +0A 1" 1- #242000 0" 0- #243000 -b100 A +0> +1? +14 1" 1- #244000 0" 0- #245000 -b0 A +0? +04 1" 1- #246000 0" 0- #247000 -0> -1? -14 1" 1- #248000 0" 0- #249000 -0? -04 1" 1- #250000 -b11 S 0" 0- 1% 15 #251000 -b1 A +1A 1" 1- #252000 0" 0- #253000 -b11 A +1> +1@ +16 1" 1- #254000 0" 0- #255000 -b111 A +b11 S +bz111 H +0@ +06 1" 1- #256000 0" 0- #257000 -1> -1@ -16 1" 1- #258000 0" 0- #259000 -bz111 H -0@ -06 1" 1- #260000 @@ -1279,80 +1228,76 @@ bz111 H 05 bxzzzzz & #261000 -b110 A +0A 1" 1- #262000 0" 0- #263000 -b100 A +0> +1? +14 1" 1- #264000 0" 0- #265000 -b0 A +0? +04 1" 1- #266000 0" 0- #267000 -0> -1? -14 1" 1- #268000 0" 0- #269000 -0? -04 1" 1- #270000 -b100 S 0" 0- 1% 15 #271000 -b1 A +1A 1" 1- #272000 0" 0- #273000 -b11 A +1> +1@ +16 1" 1- #274000 0" 0- #275000 -b111 A +b100 S +bz1111 H +0@ +06 1" 1- #276000 0" 0- #277000 -1> -1@ -16 1" 1- #278000 0" 0- #279000 -bz1111 H -0@ -06 1" 1- #280000 @@ -1362,80 +1307,76 @@ bz1111 H 05 bxzzzzzz & #281000 -b110 A +0A 1" 1- #282000 0" 0- #283000 -b100 A +0> +1? +14 1" 1- #284000 0" 0- #285000 -b0 A +0? +04 1" 1- #286000 0" 0- #287000 -0> -1? -14 1" 1- #288000 0" 0- #289000 -0? -04 1" 1- #290000 -b101 S 0" 0- 1% 15 #291000 -b1 A +1A 1" 1- #292000 0" 0- #293000 -b11 A +1> +1@ +16 1" 1- #294000 0" 0- #295000 -b111 A +b101 S +bz11111 H +0@ +06 1" 1- #296000 0" 0- #297000 -1> -1@ -16 1" 1- #298000 0" 0- #299000 -bz11111 H -0@ -06 1" 1- #300000 @@ -1445,80 +1386,76 @@ bz11111 H 05 bxzzzzzzz & #301000 -b110 A +0A 1" 1- #302000 0" 0- #303000 -b100 A +0> +1? +14 1" 1- #304000 0" 0- #305000 -b0 A +0? +04 1" 1- #306000 0" 0- #307000 -0> -1? -14 1" 1- #308000 0" 0- #309000 -0? -04 1" 1- #310000 -b110 S 0" 0- 1% 15 #311000 -b1 A +1A 1" 1- #312000 0" 0- #313000 -b11 A +1> +1@ +16 1" 1- #314000 0" 0- #315000 -b111 A +b110 S +bz111111 H +0@ +06 1" 1- #316000 0" 0- #317000 -1> -1@ -16 1" 1- #318000 0" 0- #319000 -bz111111 H -0@ -06 1" 1- #320000 @@ -1527,80 +1464,76 @@ bz111111 H 0% 05 #321000 -b110 A +0A 1" 1- #322000 0" 0- #323000 -b100 A +0> +1? +14 1" 1- #324000 0" 0- #325000 -b0 A +0? +04 1" 1- #326000 0" 0- #327000 -0> -1? -14 1" 1- #328000 0" 0- #329000 -0? -04 1" 1- #330000 -b111 S 0" 0- 1% 15 #331000 -b1 A +1A 1" 1- #332000 0" 0- #333000 -b11 A +1> +1@ +16 1" 1- #334000 0" 0- #335000 -b111 A +b111 S +bz1111111 H +0@ +06 1" 1- #336000 0" 0- #337000 -1> -1@ -16 1" 1- #338000 0" 0- #339000 -bz1111111 H -0@ -06 1" 1- #340000 @@ -1609,82 +1542,80 @@ bz1111111 H 0% 05 #341000 -b110 A +0A 1" 1- #342000 0" 0- #343000 -b100 A +0> +1? +14 1" 1- #344000 0" 0- #345000 -b0 A +0? +04 1" 1- #346000 0" 0- #347000 -0> -1? -14 1" 1- #348000 0" 0- #349000 -0? -04 1" 1- #350000 -b0 T -b0 S 0" 0- 1% 15 #351000 -b1 A +1A 1" 1- #352000 0" 0- #353000 -b11 A +1> +1@ +16 1" 1- #354000 0" 0- #355000 -b111 A +17 +b0 T +b0 S +b11111111 H +0@ +06 1" 1- #356000 0" 0- #357000 -1> -1@ -16 +0Q +0) 1" 1- #358000 0" 0- #359000 -17 -b11111111 H -0@ -06 1" 1- #360000 @@ -1693,85 +1624,79 @@ b11111111 H 0% 05 #361000 -b110 A +0A 1" 1- #362000 0" 0- #363000 -b100 A +0> +1? +14 1" 1- #364000 0" 0- #365000 -b0 A +0? +04 +1K +13 1" 1- #366000 0" 0- #367000 -0> -1? -14 1" 1- #368000 0" 0- #369000 -1! -0? -04 -1K -13 1" 1- #370000 -z! -0Q -0) -b1 T 0" 0- 1% 15 #371000 -b1 A +1A 1" 1- #372000 0" 0- #373000 -b11 A +1> +1@ +16 1" 1- #374000 0" 0- #375000 -b111 A +b1 T +0@ +06 1" 1- #376000 0" 0- #377000 -1> -1@ -16 +1O +1' 1" 1- #378000 0" 0- #379000 -0@ -06 1" 1- #380000 From e5f230b643f09ec1c437a21fd7ad7fa86d9e3c45 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 1 Nov 2017 16:02:28 -0400 Subject: [PATCH 44/50] fix datamemory instantiation --- spimemory.v | 6 ++- spimemory.vcd | 142 ++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 126 insertions(+), 22 deletions(-) diff --git a/spimemory.v b/spimemory.v index f0c8118..01b8bea 100644 --- a/spimemory.v +++ b/spimemory.v @@ -50,7 +50,11 @@ module spiMemory // Tri-state buffer assign miso_pin = (MISO_BUFE) ? q : 1'bz; - datamemory dataMemory(clk, shiftRegOutP, address[7:1], DM_WE, dataMemoryOut); + datamemory dataMemory(.clk(clk), + .dataOut(dataMemoryOut), + .dataIn(shiftRegOutP), + .address(address[7:1]), + .writeEnable(DM_WE)); finiteStateMachine fsm(clk, sclk_pos, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); diff --git a/spimemory.vcd b/spimemory.vcd index 2758325..3fbbc43 100644 --- a/spimemory.vcd +++ b/spimemory.vcd @@ -1,5 +1,5 @@ $date - Wed Nov 1 15:59:20 2017 + Wed Nov 1 16:02:12 2017 $end $version Icarus Verilog @@ -112,14 +112,14 @@ xQ xP xO bx N -bz M +bx M bx L xK bx J bx I bx H bx G -bz F +bx F bx E xD xC @@ -142,7 +142,7 @@ x3 02 x1 bz 0 -bz / +bx / 0. 0- x, @@ -234,6 +234,10 @@ b0 E #15000 b1 T bx0 H +bx0 9 +bx0 G +bx0 I +bx0 M 0@ 06 1" @@ -250,6 +254,8 @@ bx0 H 0" 0- #19000 +bx0 J +bx0 + 1" 1- #20000 @@ -314,6 +320,10 @@ bx0 H #35000 b1 S bx00 H +bx00 9 +bx00 G +bx00 I +bx00 M 0@ 06 1" @@ -322,6 +332,9 @@ bx00 H 0" 0- #37000 +bx0 L +bx00 J +bx00 + 1" 1- #38000 @@ -392,6 +405,10 @@ bx00 H #55000 b10 S bx000 H +bx000 9 +bx000 G +bx000 I +bx000 M 0@ 06 1" @@ -400,6 +417,9 @@ bx000 H 0" 0- #57000 +bx00 L +bx000 J +bx000 + 1" 1- #58000 @@ -470,6 +490,10 @@ bx000 H #75000 b11 S bx0000 H +bx0000 9 +bx0000 G +bx0000 I +bx0000 M 0@ 06 1" @@ -478,6 +502,9 @@ bx0000 H 0" 0- #77000 +bx000 L +bx0000 J +bx0000 + 1" 1- #78000 @@ -548,6 +575,10 @@ bx0000 H #95000 b100 S bx00000 H +bx00000 9 +bx00000 G +bx00000 I +bx00000 M 0@ 06 1" @@ -556,6 +587,9 @@ bx00000 H 0" 0- #97000 +bx0000 L +bx00000 J +bx00000 + 1" 1- #98000 @@ -626,6 +660,10 @@ bx00000 H #115000 b101 S bx000000 H +bx000000 9 +bx000000 G +bx000000 I +bx000000 M 0@ 06 1" @@ -634,6 +672,9 @@ bx000000 H 0" 0- #117000 +bx00000 L +bx000000 J +bx000000 + 1" 1- #118000 @@ -704,6 +745,10 @@ bx000000 H #135000 b110 S bx0000000 H +bx0000000 9 +bx0000000 G +bx0000000 I +bx0000000 M 0@ 06 1" @@ -712,6 +757,9 @@ bx0000000 H 0" 0- #137000 +bx000000 L +bx0000000 J +bx0000000 + 1" 1- #138000 @@ -793,6 +841,10 @@ b111 = b10 T b0 S b1 H +b1 9 +b1 G +b1 I +b1 M 0@ 06 1" @@ -801,6 +853,9 @@ b1 H 0" 0- #157000 +b0 L +b1 J +b1 + 0O 0' 1" @@ -880,6 +935,10 @@ bx = #175000 b101 T b11 H +b11 9 +b11 G +b11 I +b11 M 0@ 06 1" @@ -896,8 +955,12 @@ b11 H 0" 0- #179000 -z7 -bz H +x7 +bx H +bx 9 +bx G +bx I +bx M 1" 1- #180000 @@ -925,8 +988,8 @@ bxz & #185000 0? 04 -zK -z3 +xK +x3 1" 1- #186000 @@ -972,6 +1035,7 @@ b100 T 0" 0- #197000 +x! 0R 0* 1Q @@ -989,7 +1053,7 @@ b100 T 0- 0% 05 -bxzz & +bxz & #201000 0A 1" @@ -1046,7 +1110,11 @@ bxzz & 0- #215000 b1 S -bz1 H +bx1 H +bx1 9 +bx1 G +bx1 I +bx1 M 0@ 06 1" @@ -1068,7 +1136,7 @@ bz1 H 0- 0% 05 -bxzzz & +bxz & #221000 0A 1" @@ -1125,7 +1193,11 @@ bxzzz & 0- #235000 b10 S -bz11 H +bx11 H +bx11 9 +bx11 G +bx11 I +bx11 M 0@ 06 1" @@ -1147,7 +1219,7 @@ bz11 H 0- 0% 05 -bxzzzz & +bxz & #241000 0A 1" @@ -1204,7 +1276,11 @@ bxzzzz & 0- #255000 b11 S -bz111 H +bx111 H +bx111 9 +bx111 G +bx111 I +bx111 M 0@ 06 1" @@ -1226,7 +1302,7 @@ bz111 H 0- 0% 05 -bxzzzzz & +bxz & #261000 0A 1" @@ -1283,7 +1359,11 @@ bxzzzzz & 0- #275000 b100 S -bz1111 H +bx1111 H +bx1111 9 +bx1111 G +bx1111 I +bx1111 M 0@ 06 1" @@ -1305,7 +1385,7 @@ bz1111 H 0- 0% 05 -bxzzzzzz & +bxz & #281000 0A 1" @@ -1362,7 +1442,11 @@ bxzzzzzz & 0- #295000 b101 S -bz11111 H +bx11111 H +bx11111 9 +bx11111 G +bx11111 I +bx11111 M 0@ 06 1" @@ -1384,7 +1468,7 @@ bz11111 H 0- 0% 05 -bxzzzzzzz & +bxz & #301000 0A 1" @@ -1441,7 +1525,11 @@ bxzzzzzzz & 0- #315000 b110 S -bz111111 H +bx111111 H +bx111111 9 +bx111111 G +bx111111 I +bx111111 M 0@ 06 1" @@ -1519,7 +1607,11 @@ bz111111 H 0- #335000 b111 S -bz1111111 H +bx1111111 H +bx1111111 9 +bx1111111 G +bx1111111 I +bx1111111 M 0@ 06 1" @@ -1600,6 +1692,10 @@ bz1111111 H b0 T b0 S b11111111 H +b11111111 9 +b11111111 G +b11111111 I +b11111111 M 0@ 06 1" @@ -1608,6 +1704,7 @@ b11111111 H 0" 0- #357000 +z! 0Q 0) 1" @@ -1697,6 +1794,9 @@ b1 T 0" 0- #379000 +b1111111 L +b11111111 J +b11111111 + 1" 1- #380000 From 08d261d9657720158a24d9cf7b6d9ff2173e22e2 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 1 Nov 2017 16:03:20 -0400 Subject: [PATCH 45/50] update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f47cb20..72fd5f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.out +*.vcd From 84ee186e6829b1889bd49a21a0a0c84213966176 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 1 Nov 2017 17:12:47 -0400 Subject: [PATCH 46/50] make branch state 1 earlier, sete memory initally to 0 for debugging --- datamemory.v | 4 + fsm.v | 6 +- names.filter | 8 ++ spimemory.t.v | 12 +-- spimemory.vcd | 214 +++++++++++++++++++++++--------------------------- 5 files changed, 120 insertions(+), 124 deletions(-) create mode 100644 names.filter diff --git a/datamemory.v b/datamemory.v index 02225af..a1baa2a 100644 --- a/datamemory.v +++ b/datamemory.v @@ -22,6 +22,10 @@ module datamemory reg [width-1:0] memory [depth-1:0]; + initial begin + memory[0] = 0; + end + always @(posedge clk) begin if(writeEnable) memory[address] <= dataIn; diff --git a/fsm.v b/fsm.v index 99397a3..a8cd046 100644 --- a/fsm.v +++ b/fsm.v @@ -32,7 +32,7 @@ module finiteStateMachine( state <= addressLoad; end else if (state == addressLoad) begin - if (counter == 6) begin + if (counter == 5) begin counter <= 0; state <= branch; end @@ -71,13 +71,13 @@ module finiteStateMachine( addressLoad: begin MISO_BUFE <= 0; DM_WE <= 0; - ADDR_WE <= 1; + ADDR_WE <= 0; SR_WE <= 0; end branch: begin MISO_BUFE <= 0; DM_WE <= 0; - ADDR_WE <= 0; + ADDR_WE <= 1; SR_WE <= 0; end write: begin diff --git a/names.filter b/names.filter new file mode 100644 index 0000000..1472945 --- /dev/null +++ b/names.filter @@ -0,0 +1,8 @@ +# Example filter file +# Each line has a value (which much match what is in the wave viewer exactly) and a string alias to replace the value if found +00 Reset +01 AddressLoad +02 Branch +03 Write +04 Read +05 DataLoad diff --git a/spimemory.t.v b/spimemory.t.v index 961b13f..48a0838 100644 --- a/spimemory.t.v +++ b/spimemory.t.v @@ -16,7 +16,7 @@ module testSPIMemory(); initial clk = 0; initial cs_pin = 1; reg [7:0] testOut = 8'bxxxxxxxx; // last bit is 1 for read - always #1 clk=!clk; + always #1 clk=!clk; initial begin $dumpfile("spimemory.vcd"); @@ -24,7 +24,7 @@ module testSPIMemory(); //#50; // Push input - cs_pin = 0; + cs_pin = 0; mosi_pin = 0; sclk_pin = 0; #10 sclk_pin = 1; #10; // 1 mosi_pin = 0; @@ -33,7 +33,7 @@ module testSPIMemory(); sclk_pin = 0; #10 sclk_pin = 1; #10; // 3 mosi_pin = 0; sclk_pin = 0; #10 sclk_pin = 1; #10; // 4 - mosi_pin = 0; + mosi_pin = 0; sclk_pin = 0; #10 sclk_pin = 1; #10; // 5 mosi_pin = 0; sclk_pin = 0; #10 sclk_pin = 1; #10; // 6 @@ -41,7 +41,7 @@ module testSPIMemory(); sclk_pin = 0; #10 sclk_pin = 1; #10; // 7 mosi_pin = 1; sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 - + mosi_pin = 1'bx; // Read output sclk_pin = 0; #10 sclk_pin = 1; #10; // 1 @@ -51,7 +51,7 @@ module testSPIMemory(); sclk_pin = 0; #10 sclk_pin = 1; #10; // 3 testOut[2] = miso_pin; sclk_pin = 0; #10 sclk_pin = 1; #10; // 4 - testOut[3] = miso_pin; + testOut[3] = miso_pin; sclk_pin = 0; #10 sclk_pin = 1; #10; // 5 testOut[4] = miso_pin; sclk_pin = 0; #10 sclk_pin = 1; #10; // 6 @@ -62,6 +62,8 @@ module testSPIMemory(); sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 + + cs_pin = 1; $display("%8b", testOut); $finish; end diff --git a/spimemory.vcd b/spimemory.vcd index 3fbbc43..115af9c 100644 --- a/spimemory.vcd +++ b/spimemory.vcd @@ -1,5 +1,5 @@ $date - Wed Nov 1 16:02:12 2017 + Wed Nov 1 17:03:11 2017 $end $version Icarus Verilog @@ -246,16 +246,12 @@ bx0 M 0" 0- #17000 -1O -1' 1" 1- #18000 0" 0- #19000 -bx0 J -bx0 + 1" 1- #20000 @@ -332,9 +328,6 @@ bx00 M 0" 0- #37000 -bx0 L -bx00 J -bx00 + 1" 1- #38000 @@ -417,9 +410,6 @@ bx000 M 0" 0- #57000 -bx00 L -bx000 J -bx000 + 1" 1- #58000 @@ -502,9 +492,6 @@ bx0000 M 0" 0- #77000 -bx000 L -bx0000 J -bx0000 + 1" 1- #78000 @@ -587,9 +574,6 @@ bx00000 M 0" 0- #97000 -bx0000 L -bx00000 J -bx00000 + 1" 1- #98000 @@ -672,9 +656,6 @@ bx000000 M 0" 0- #117000 -bx00000 L -bx000000 J -bx000000 + 1" 1- #118000 @@ -743,7 +724,8 @@ bx000000 + 0" 0- #135000 -b110 S +b10 T +b0 S bx0000000 H bx0000000 9 bx0000000 G @@ -757,15 +739,17 @@ bx0000000 M 0" 0- #137000 -bx000000 L -bx0000000 J -bx0000000 + +1O +1' 1" 1- #138000 0" 0- #139000 +bx000000 L +bx0000000 J +bx0000000 + 1" 1- #140000 @@ -838,8 +822,7 @@ b111 = 0- #155000 07 -b10 T -b0 S +b101 T b1 H b1 9 b1 G @@ -856,6 +839,8 @@ b1 M b0 L b1 J b1 + +1R +1* 0O 0' 1" @@ -864,6 +849,15 @@ b1 + 0" 0- #159000 +x7 +b0 N +b0 / +b0 F +bx H +bx 9 +bx G +bx I +bx M 1" 1- #160000 @@ -874,8 +868,14 @@ b1 + x$ x2 #161000 +07 b11x = 0A +b0 H +b0 9 +b0 G +b0 I +b0 M 1" 1- #162000 @@ -933,12 +933,7 @@ bx = 0" 0- #175000 -b101 T -b11 H -b11 9 -b11 G -b11 I -b11 M +b100 T 0@ 06 1" @@ -947,20 +942,17 @@ b11 M 0" 0- #177000 -1R -1* +0! +0R +0* +1Q +1) 1" 1- #178000 0" 0- #179000 -x7 -bx H -bx 9 -bx G -bx I -bx M 1" 1- #180000 @@ -968,7 +960,7 @@ bx M 0- 0% 05 -bxz & +bx0 & #181000 0A 1" @@ -988,8 +980,6 @@ bxz & #185000 0? 04 -xK -x3 1" 1- #186000 @@ -1026,7 +1016,12 @@ x3 0" 0- #195000 -b100 T +b1 S +b1 H +b1 9 +b1 G +b1 I +b1 M 0@ 06 1" @@ -1035,11 +1030,6 @@ b100 T 0" 0- #197000 -x! -0R -0* -1Q -1) 1" 1- #198000 @@ -1053,7 +1043,7 @@ x! 0- 0% 05 -bxz & +bx00 & #201000 0A 1" @@ -1109,12 +1099,12 @@ bxz & 0" 0- #215000 -b1 S -bx1 H -bx1 9 -bx1 G -bx1 I -bx1 M +b10 S +b11 H +b11 9 +b11 G +b11 I +b11 M 0@ 06 1" @@ -1136,7 +1126,7 @@ bx1 M 0- 0% 05 -bxz & +bx000 & #221000 0A 1" @@ -1192,12 +1182,12 @@ bxz & 0" 0- #235000 -b10 S -bx11 H -bx11 9 -bx11 G -bx11 I -bx11 M +b11 S +b111 H +b111 9 +b111 G +b111 I +b111 M 0@ 06 1" @@ -1219,7 +1209,7 @@ bx11 M 0- 0% 05 -bxz & +bx0000 & #241000 0A 1" @@ -1275,12 +1265,12 @@ bxz & 0" 0- #255000 -b11 S -bx111 H -bx111 9 -bx111 G -bx111 I -bx111 M +b100 S +b1111 H +b1111 9 +b1111 G +b1111 I +b1111 M 0@ 06 1" @@ -1302,7 +1292,7 @@ bx111 M 0- 0% 05 -bxz & +bx00000 & #261000 0A 1" @@ -1358,12 +1348,12 @@ bxz & 0" 0- #275000 -b100 S -bx1111 H -bx1111 9 -bx1111 G -bx1111 I -bx1111 M +b101 S +b11111 H +b11111 9 +b11111 G +b11111 I +b11111 M 0@ 06 1" @@ -1385,7 +1375,7 @@ bx1111 M 0- 0% 05 -bxz & +bx000000 & #281000 0A 1" @@ -1441,12 +1431,12 @@ bxz & 0" 0- #295000 -b101 S -bx11111 H -bx11111 9 -bx11111 G -bx11111 I -bx11111 M +b110 S +b111111 H +b111111 9 +b111111 G +b111111 I +b111111 M 0@ 06 1" @@ -1468,7 +1458,7 @@ bx11111 M 0- 0% 05 -bxz & +bx0000000 & #301000 0A 1" @@ -1524,12 +1514,12 @@ bxz & 0" 0- #315000 -b110 S -bx111111 H -bx111111 9 -bx111111 G -bx111111 I -bx111111 M +b111 S +b1111111 H +b1111111 9 +b1111111 G +b1111111 I +b1111111 M 0@ 06 1" @@ -1606,12 +1596,14 @@ bx111111 M 0" 0- #335000 -b111 S -bx1111111 H -bx1111111 9 -bx1111111 G -bx1111111 I -bx1111111 M +17 +b0 T +b0 S +b11111111 H +b11111111 9 +b11111111 G +b11111111 I +b11111111 M 0@ 06 1" @@ -1620,6 +1612,9 @@ bx1111111 M 0" 0- #337000 +z! +0Q +0) 1" 1- #338000 @@ -1652,6 +1647,8 @@ bx1111111 M #345000 0? 04 +1K +13 1" 1- #346000 @@ -1688,14 +1685,7 @@ bx1111111 M 0" 0- #355000 -17 -b0 T -b0 S -b11111111 H -b11111111 9 -b11111111 G -b11111111 I -b11111111 M +b1 T 0@ 06 1" @@ -1704,9 +1694,6 @@ b11111111 M 0" 0- #357000 -z! -0Q -0) 1" 1- #358000 @@ -1739,8 +1726,6 @@ z! #365000 0? 04 -1K -13 1" 1- #366000 @@ -1777,7 +1762,7 @@ z! 0" 0- #375000 -b1 T +b1 S 0@ 06 1" @@ -1786,19 +1771,16 @@ b1 T 0" 0- #377000 -1O -1' 1" 1- #378000 0" 0- #379000 -b1111111 L -b11111111 J -b11111111 + 1" 1- #380000 0" 0- +1# +1. From 76bcb73bf49fd937a0e96fb990458e814d8b9800 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 1 Nov 2017 17:32:17 -0400 Subject: [PATCH 47/50] make things not depend on slow clock - move states back to right place --- fsm.v | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/fsm.v b/fsm.v index a8cd046..6c3f0dc 100644 --- a/fsm.v +++ b/fsm.v @@ -26,13 +26,27 @@ module finiteStateMachine( //change states on the clk cycles always @(posedge clk) begin - if (sclk_posedge) begin - if ((state == reset) && (chip_select == 0)) begin - state <= addressLoad; + // Some state transitions should happen immediately + if ((state == reset) && (chip_select == 0)) begin + state <= addressLoad; + end + if (state == branch) begin + if (r_w == 0) begin // write + state <= write; end - else if (state == addressLoad) begin - if (counter == 5) begin + else begin // read + state <= dataLoad; + end + end + if (state == dataLoad) begin + state <= read; + end + + // Some states need to wait a given tim based on the serial clock. + if (sclk_posedge) begin + if (state == addressLoad) begin + if (counter == 7) begin counter <= 0; state <= branch; end @@ -40,19 +54,6 @@ module finiteStateMachine( counter <= counter + 1; end end - else if (state == branch) begin - if (r_w == 0) begin // write - state <= write; - end - else begin // read - state <= dataLoad; - end - end - else if (state == dataLoad) begin - state <= read; - end - - else if ((state == read) || (state == write)) begin if (counter == 7) begin counter <= 0; @@ -62,10 +63,6 @@ module finiteStateMachine( counter <= counter + 1; end end - - else if (state <= reset) begin - state <= reset; - end end case (state) addressLoad: begin From ec1abba9f1e45c047b8181e774a504347a6f1ed0 Mon Sep 17 00:00:00 2001 From: Jonah Spear Date: Wed, 1 Nov 2017 18:26:41 -0400 Subject: [PATCH 48/50] shits almost working --- datamemory.v | 2 +- fsm.v | 10 + names.filter | 1 + spimemory.t.v | 2 +- spimemory.v | 7 +- spimemory.vcd | 971 ++++++++++++++++++++++++-------------------------- 6 files changed, 484 insertions(+), 509 deletions(-) diff --git a/datamemory.v b/datamemory.v index a1baa2a..b3469c8 100644 --- a/datamemory.v +++ b/datamemory.v @@ -23,7 +23,7 @@ module datamemory reg [width-1:0] memory [depth-1:0]; initial begin - memory[0] = 0; + memory[0] = 8'b11111111; end always @(posedge clk) begin diff --git a/fsm.v b/fsm.v index 6c3f0dc..ba9c43f 100644 --- a/fsm.v +++ b/fsm.v @@ -19,6 +19,7 @@ module finiteStateMachine( localparam read = 4; localparam reset = 0; localparam dataLoad = 5; + localparam dataLoad2 = 6; reg[7:0] state = reset; @@ -40,6 +41,9 @@ module finiteStateMachine( end end if (state == dataLoad) begin + state <= dataLoad2; + end + if (state == dataLoad2) begin state <= read; end @@ -93,6 +97,12 @@ module finiteStateMachine( MISO_BUFE <= 0; DM_WE <= 0; ADDR_WE <= 0; + SR_WE <= 0; + end + dataLoad2: begin + MISO_BUFE <= 1; + DM_WE <= 0; + ADDR_WE <= 0; SR_WE <= 1; end reset: begin diff --git a/names.filter b/names.filter index 1472945..7c85ea0 100644 --- a/names.filter +++ b/names.filter @@ -6,3 +6,4 @@ 03 Write 04 Read 05 DataLoad +06 DataLoad2 diff --git a/spimemory.t.v b/spimemory.t.v index 48a0838..12e2f37 100644 --- a/spimemory.t.v +++ b/spimemory.t.v @@ -42,7 +42,7 @@ module testSPIMemory(); mosi_pin = 1; sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 - mosi_pin = 1'bx; + mosi_pin = 1'bX; // Read output sclk_pin = 0; #10 sclk_pin = 1; #10; // 1 testOut[0] = miso_pin; diff --git a/spimemory.v b/spimemory.v index 01b8bea..a60d058 100644 --- a/spimemory.v +++ b/spimemory.v @@ -18,11 +18,8 @@ module spiMemory ); wire MISO_BUFE, DM_WE, ADDR_WE, SR_WE; - wire mosi_conditioned, chip_select; + wire chip_select; wire sclk_pos, sclk_neg; - inputconditioner c1(.clk(clk), - .noisysignal(mosi_pin), - .conditioned(mosi_conditioned)); inputconditioner #(1) c2(.clk(clk), .noisysignal(sclk_pin), .positiveedge(sclk_pos), @@ -38,7 +35,7 @@ module spiMemory .peripheralClkEdge(sclk_pos), .parallelLoad(SR_WE), .parallelDataIn(dataMemoryOut), - .serialDataIn(mosi_conditioned), + .serialDataIn(mosi_pin), .parallelDataOut(shiftRegOutP), .serialDataOut(serialOut)); diff --git a/spimemory.vcd b/spimemory.vcd index 115af9c..142be4f 100644 --- a/spimemory.vcd +++ b/spimemory.vcd @@ -1,5 +1,5 @@ $date - Wed Nov 1 17:03:11 2017 + Wed Nov 1 18:25:27 2017 $end $version Icarus Verilog @@ -26,121 +26,107 @@ $var wire 1 . cs_pin $end $var wire 8 / dataMemoryOut [7:0] $end $var wire 4 0 leds [3:0] $end $var wire 1 ! miso_pin $end -$var wire 1 1 mosi_conditioned $end -$var wire 1 2 mosi_pin $end -$var wire 1 3 q $end -$var wire 1 4 sclk_neg $end -$var wire 1 5 sclk_pin $end -$var wire 1 6 sclk_pos $end -$var wire 1 7 serialOut $end -$var wire 1 8 shiftRegOut $end -$var wire 8 9 shiftRegOutP [7:0] $end -$scope module c1 $end -$var wire 1 - clk $end -$var wire 1 2 noisysignal $end -$var reg 1 : conditioned $end -$var reg 1 ; negativeedge $end -$var reg 1 < positiveedge $end -$var reg 3 = prev_vals [2:0] $end -$upscope $end +$var wire 1 1 mosi_pin $end +$var wire 1 2 q $end +$var wire 1 3 sclk_neg $end +$var wire 1 4 sclk_pin $end +$var wire 1 5 sclk_pos $end +$var wire 1 6 serialOut $end +$var wire 1 7 shiftRegOut $end +$var wire 8 8 shiftRegOutP [7:0] $end $scope module c2 $end $var wire 1 - clk $end -$var wire 1 5 noisysignal $end -$var reg 1 > conditioned $end -$var reg 1 ? negativeedge $end -$var reg 1 @ positiveedge $end -$var reg 1 A prev_vals $end +$var wire 1 4 noisysignal $end +$var reg 1 9 conditioned $end +$var reg 1 : negativeedge $end +$var reg 1 ; positiveedge $end +$var reg 1 < prev_vals $end $upscope $end $scope module c3 $end $var wire 1 - clk $end $var wire 1 . noisysignal $end -$var reg 1 B conditioned $end -$var reg 1 C negativeedge $end -$var reg 1 D positiveedge $end -$var reg 3 E prev_vals [2:0] $end +$var reg 1 = conditioned $end +$var reg 1 > negativeedge $end +$var reg 1 ? positiveedge $end +$var reg 3 @ prev_vals [2:0] $end $upscope $end $scope module sr $end $var wire 1 - clk $end -$var wire 8 F parallelDataIn [7:0] $end -$var wire 8 G parallelDataOut [7:0] $end +$var wire 8 A parallelDataIn [7:0] $end +$var wire 8 B parallelDataOut [7:0] $end $var wire 1 * parallelLoad $end -$var wire 1 6 peripheralClkEdge $end +$var wire 1 5 peripheralClkEdge $end $var wire 1 1 serialDataIn $end -$var wire 1 7 serialDataOut $end -$var reg 8 H data [7:0] $end +$var wire 1 6 serialDataOut $end +$var reg 8 C data [7:0] $end $upscope $end $scope module dff1 $end -$var wire 8 I d [7:0] $end +$var wire 8 D d [7:0] $end $var wire 1 ' enable $end $var wire 1 - trigger $end -$var reg 8 J q [7:0] $end +$var reg 8 E q [7:0] $end $upscope $end $scope module dff2 $end -$var wire 1 7 d $end -$var wire 1 4 enable $end +$var wire 1 6 d $end +$var wire 1 3 enable $end $var wire 1 - trigger $end -$var reg 1 K q $end +$var reg 1 F q $end $upscope $end $scope module dataMemory $end -$var wire 7 L address [6:0] $end +$var wire 7 G address [6:0] $end $var wire 1 - clk $end -$var wire 8 M dataIn [7:0] $end +$var wire 8 H dataIn [7:0] $end $var wire 1 ( writeEnable $end -$var reg 8 N dataOut [7:0] $end +$var reg 8 I dataOut [7:0] $end $upscope $end $scope module fsm $end $var wire 1 , chip_select $end $var wire 1 - clk $end -$var wire 1 8 r_w $end -$var wire 1 6 sclk_posedge $end -$var reg 1 O ADDR_WE $end -$var reg 1 P DM_WE $end -$var reg 1 Q MISO_BUFE $end -$var reg 1 R SR_WE $end -$var integer 32 S counter [31:0] $end -$var reg 8 T state [7:0] $end +$var wire 1 7 r_w $end +$var wire 1 5 sclk_posedge $end +$var reg 1 J ADDR_WE $end +$var reg 1 K DM_WE $end +$var reg 1 L MISO_BUFE $end +$var reg 1 M SR_WE $end +$var integer 32 N counter [31:0] $end +$var reg 8 O state [7:0] $end $upscope $end $upscope $end $upscope $end $enddefinitions $end #0 $dumpvars -b0 T -b0 S -xR -xQ -xP -xO -bx N -bx M -bx L +b0 O +b0 N +xM +xL xK -bx J +xJ bx I bx H bx G -bx F +xF bx E -xD -xC -xB -xA -x@ +bx D +bx C +bx B +bx A +bx @ x? x> -bx = +x= x< x; x: -bx 9 -z8 -x7 +x9 +bx 8 +z7 x6 -05 -x4 +x5 +04 x3 -02 -x1 +x2 +01 bz 0 bx / 0. @@ -160,16 +146,15 @@ x! $end #1000 z! -bx0 = -0A -bx0 E -0R +0< +bx0 @ +0M 0* -0O +0J 0' -0P +0K 0( -0Q +0L 0) 1" 1- @@ -177,69 +162,65 @@ bx0 E 0" 0- #3000 -bx00 E -0> -0? -04 -bx00 = +bx00 @ +09 +0: +03 1" 1- #4000 0" 0- #5000 -b0 = -b0 E +b0 @ 1" 1- #6000 0" 0- #7000 -0B +0= 0, -0C -0: -01 -0; +0> 1" 1- #8000 0" 0- #9000 +b1 O 1" 1- #10000 0" 0- 1% -15 +14 #11000 -1A +1< 1" 1- #12000 0" 0- #13000 -1> -1@ -16 +19 +1; +15 1" 1- #14000 0" 0- #15000 -b1 T +b1 N +bx0 C +bx0 8 +bx0 B +bx0 D bx0 H -bx0 9 -bx0 G -bx0 I -bx0 M -0@ -06 +0; +05 1" 1- #16000 @@ -258,26 +239,26 @@ bx0 M 0" 0- 0% -05 +04 #21000 -0A +0< 1" 1- #22000 0" 0- #23000 -0> -1? -14 +09 +1: +13 1" 1- #24000 0" 0- #25000 -0? -04 +0: +03 1" 1- #26000 @@ -296,32 +277,32 @@ bx0 M 0" 0- 1% -15 +14 #31000 -1A +1< 1" 1- #32000 0" 0- #33000 -1> -1@ -16 +19 +1; +15 1" 1- #34000 0" 0- #35000 -b1 S +b10 N +bx00 C +bx00 8 +bx00 B +bx00 D bx00 H -bx00 9 -bx00 G -bx00 I -bx00 M -0@ -06 +0; +05 1" 1- #36000 @@ -340,26 +321,26 @@ bx00 M 0" 0- 0% -05 +04 #41000 -0A +0< 1" 1- #42000 0" 0- #43000 -0> -1? -14 +09 +1: +13 1" 1- #44000 0" 0- #45000 -0? -04 +0: +03 1" 1- #46000 @@ -378,32 +359,32 @@ bx00 M 0" 0- 1% -15 +14 #51000 -1A +1< 1" 1- #52000 0" 0- #53000 -1> -1@ -16 +19 +1; +15 1" 1- #54000 0" 0- #55000 -b10 S +b11 N +bx000 C +bx000 8 +bx000 B +bx000 D bx000 H -bx000 9 -bx000 G -bx000 I -bx000 M -0@ -06 +0; +05 1" 1- #56000 @@ -422,26 +403,26 @@ bx000 M 0" 0- 0% -05 +04 #61000 -0A +0< 1" 1- #62000 0" 0- #63000 -0> -1? -14 +09 +1: +13 1" 1- #64000 0" 0- #65000 -0? -04 +0: +03 1" 1- #66000 @@ -460,32 +441,32 @@ bx000 M 0" 0- 1% -15 +14 #71000 -1A +1< 1" 1- #72000 0" 0- #73000 -1> -1@ -16 +19 +1; +15 1" 1- #74000 0" 0- #75000 -b11 S +b100 N +bx0000 C +bx0000 8 +bx0000 B +bx0000 D bx0000 H -bx0000 9 -bx0000 G -bx0000 I -bx0000 M -0@ -06 +0; +05 1" 1- #76000 @@ -504,26 +485,26 @@ bx0000 M 0" 0- 0% -05 +04 #81000 -0A +0< 1" 1- #82000 0" 0- #83000 -0> -1? -14 +09 +1: +13 1" 1- #84000 0" 0- #85000 -0? -04 +0: +03 1" 1- #86000 @@ -542,32 +523,32 @@ bx0000 M 0" 0- 1% -15 +14 #91000 -1A +1< 1" 1- #92000 0" 0- #93000 -1> -1@ -16 +19 +1; +15 1" 1- #94000 0" 0- #95000 -b100 S +b101 N +bx00000 C +bx00000 8 +bx00000 B +bx00000 D bx00000 H -bx00000 9 -bx00000 G -bx00000 I -bx00000 M -0@ -06 +0; +05 1" 1- #96000 @@ -586,26 +567,26 @@ bx00000 M 0" 0- 0% -05 +04 #101000 -0A +0< 1" 1- #102000 0" 0- #103000 -0> -1? -14 +09 +1: +13 1" 1- #104000 0" 0- #105000 -0? -04 +0: +03 1" 1- #106000 @@ -624,32 +605,32 @@ bx00000 M 0" 0- 1% -15 +14 #111000 -1A +1< 1" 1- #112000 0" 0- #113000 -1> -1@ -16 +19 +1; +15 1" 1- #114000 0" 0- #115000 -b101 S +b110 N +bx000000 C +bx000000 8 +bx000000 B +bx000000 D bx000000 H -bx000000 9 -bx000000 G -bx000000 I -bx000000 M -0@ -06 +0; +05 1" 1- #116000 @@ -668,26 +649,26 @@ bx000000 M 0" 0- 0% -05 +04 #121000 -0A +0< 1" 1- #122000 0" 0- #123000 -0> -1? -14 +09 +1: +13 1" 1- #124000 0" 0- #125000 -0? -04 +0: +03 1" 1- #126000 @@ -706,197 +687,187 @@ bx000000 M 0" 0- 1% -15 +14 #131000 -1A +1< 1" 1- #132000 0" 0- #133000 -1> -1@ -16 +19 +1; +15 1" 1- #134000 0" 0- #135000 -b10 T -b0 S +b111 N +bx0000000 C +bx0000000 8 +bx0000000 B +bx0000000 D bx0000000 H -bx0000000 9 -bx0000000 G -bx0000000 I -bx0000000 M -0@ -06 +0; +05 1" 1- #136000 0" 0- #137000 -1O -1' 1" 1- #138000 0" 0- #139000 -bx000000 L -bx0000000 J -bx0000000 + 1" 1- #140000 0" 0- 0% -05 +04 1$ -12 +11 #141000 -b1 = -0A +0< 1" 1- #142000 0" 0- #143000 -0> -1? -14 -b11 = +09 +1: +13 1" 1- #144000 0" 0- #145000 -b111 = -0? -04 +0: +03 1" 1- #146000 0" 0- #147000 -1: -11 -1< 1" 1- #148000 0" 0- #149000 -0< 1" 1- #150000 0" 0- 1% -15 +14 #151000 -1A +1< 1" 1- #152000 0" 0- #153000 -1> -1@ -16 +19 +1; +15 1" 1- #154000 0" 0- #155000 -07 -b101 T -b1 H -b1 9 -b1 G -b1 I -b1 M -0@ 06 +b10 O +b0 N +b1 C +b1 8 +b1 B +b1 D +b1 H +0; +05 1" 1- #156000 0" 0- #157000 -b0 L -b1 J -b1 + -1R -1* -0O -0' +1J +1' +b101 O 1" 1- #158000 0" 0- #159000 -x7 -b0 N -b0 / -b0 F -bx H -bx 9 -bx G -bx I -bx M +b0 G +0J +0' +b110 O +b1 E +b1 + 1" 1- #160000 0" 0- 0% -05 +04 x$ -x2 +x1 #161000 -07 -b11x = -0A -b0 H -b0 9 -b0 G -b0 I -b0 M +x! +0< +b11111111 I +b11111111 / +b11111111 A +1M +1* +1L +1) +b100 O 1" 1- #162000 0" 0- #163000 -0> -1? -14 -b1xx = +16 +0M +0* +b11111111 C +b11111111 8 +b11111111 B +b11111111 D +b11111111 H +09 +1: +13 1" 1- #164000 0" 0- #165000 -bx = -0? -04 -0K +1! +0: 03 +1F +12 1" 1- #166000 @@ -915,38 +886,38 @@ bx = 0" 0- 1% -15 +14 #171000 -1A +1< 1" 1- #172000 0" 0- #173000 -1> -1@ -16 +19 +1; +15 1" 1- #174000 0" 0- #175000 -b100 T -0@ -06 +b1 N +b1111111x C +b1111111x 8 +b1111111x B +b1111111x D +b1111111x H +0; +05 1" 1- #176000 0" 0- #177000 -0! -0R -0* -1Q -1) 1" 1- #178000 @@ -959,27 +930,27 @@ b100 T 0" 0- 0% -05 -bx0 & +04 +bx1 & #181000 -0A +0< 1" 1- #182000 0" 0- #183000 -0> -1? -14 +09 +1: +13 1" 1- #184000 0" 0- #185000 -0? -04 +0: +03 1" 1- #186000 @@ -998,32 +969,32 @@ bx0 & 0" 0- 1% -15 +14 #191000 -1A +1< 1" 1- #192000 0" 0- #193000 -1> -1@ -16 +19 +1; +15 1" 1- #194000 0" 0- #195000 -b1 S -b1 H -b1 9 -b1 G -b1 I -b1 M -0@ -06 +b10 N +b111111xx C +b111111xx 8 +b111111xx B +b111111xx D +b111111xx H +0; +05 1" 1- #196000 @@ -1042,27 +1013,27 @@ b1 M 0" 0- 0% -05 -bx00 & +04 +bx11 & #201000 -0A +0< 1" 1- #202000 0" 0- #203000 -0> -1? -14 +09 +1: +13 1" 1- #204000 0" 0- #205000 -0? -04 +0: +03 1" 1- #206000 @@ -1081,32 +1052,32 @@ bx00 & 0" 0- 1% -15 +14 #211000 -1A +1< 1" 1- #212000 0" 0- #213000 -1> -1@ -16 +19 +1; +15 1" 1- #214000 0" 0- #215000 -b10 S -b11 H -b11 9 -b11 G -b11 I -b11 M -0@ -06 +b11 N +b11111xxx C +b11111xxx 8 +b11111xxx B +b11111xxx D +b11111xxx H +0; +05 1" 1- #216000 @@ -1125,27 +1096,27 @@ b11 M 0" 0- 0% -05 -bx000 & +04 +bx111 & #221000 -0A +0< 1" 1- #222000 0" 0- #223000 -0> -1? -14 +09 +1: +13 1" 1- #224000 0" 0- #225000 -0? -04 +0: +03 1" 1- #226000 @@ -1164,32 +1135,32 @@ bx000 & 0" 0- 1% -15 +14 #231000 -1A +1< 1" 1- #232000 0" 0- #233000 -1> -1@ -16 +19 +1; +15 1" 1- #234000 0" 0- #235000 -b11 S -b111 H -b111 9 -b111 G -b111 I -b111 M -0@ -06 +b100 N +b1111xxxx C +b1111xxxx 8 +b1111xxxx B +b1111xxxx D +b1111xxxx H +0; +05 1" 1- #236000 @@ -1208,27 +1179,27 @@ b111 M 0" 0- 0% -05 -bx0000 & +04 +bx1111 & #241000 -0A +0< 1" 1- #242000 0" 0- #243000 -0> -1? -14 +09 +1: +13 1" 1- #244000 0" 0- #245000 -0? -04 +0: +03 1" 1- #246000 @@ -1247,32 +1218,32 @@ bx0000 & 0" 0- 1% -15 +14 #251000 -1A +1< 1" 1- #252000 0" 0- #253000 -1> -1@ -16 +19 +1; +15 1" 1- #254000 0" 0- #255000 -b100 S -b1111 H -b1111 9 -b1111 G -b1111 I -b1111 M -0@ -06 +b101 N +b111xxxxx C +b111xxxxx 8 +b111xxxxx B +b111xxxxx D +b111xxxxx H +0; +05 1" 1- #256000 @@ -1291,27 +1262,27 @@ b1111 M 0" 0- 0% -05 -bx00000 & +04 +bx11111 & #261000 -0A +0< 1" 1- #262000 0" 0- #263000 -0> -1? -14 +09 +1: +13 1" 1- #264000 0" 0- #265000 -0? -04 +0: +03 1" 1- #266000 @@ -1330,32 +1301,32 @@ bx00000 & 0" 0- 1% -15 +14 #271000 -1A +1< 1" 1- #272000 0" 0- #273000 -1> -1@ -16 +19 +1; +15 1" 1- #274000 0" 0- #275000 -b101 S -b11111 H -b11111 9 -b11111 G -b11111 I -b11111 M -0@ -06 +b110 N +b11xxxxxx C +b11xxxxxx 8 +b11xxxxxx B +b11xxxxxx D +b11xxxxxx H +0; +05 1" 1- #276000 @@ -1374,27 +1345,27 @@ b11111 M 0" 0- 0% -05 -bx000000 & +04 +bx111111 & #281000 -0A +0< 1" 1- #282000 0" 0- #283000 -0> -1? -14 +09 +1: +13 1" 1- #284000 0" 0- #285000 -0? -04 +0: +03 1" 1- #286000 @@ -1413,32 +1384,32 @@ bx000000 & 0" 0- 1% -15 +14 #291000 -1A +1< 1" 1- #292000 0" 0- #293000 -1> -1@ -16 +19 +1; +15 1" 1- #294000 0" 0- #295000 -b110 S -b111111 H -b111111 9 -b111111 G -b111111 I -b111111 M -0@ -06 +b111 N +b1xxxxxxx C +b1xxxxxxx 8 +b1xxxxxxx B +b1xxxxxxx D +b1xxxxxxx H +0; +05 1" 1- #296000 @@ -1457,27 +1428,27 @@ b111111 M 0" 0- 0% -05 -bx0000000 & +04 +bx1111111 & #301000 -0A +0< 1" 1- #302000 0" 0- #303000 -0> -1? -14 +09 +1: +13 1" 1- #304000 0" 0- #305000 -0? -04 +0: +03 1" 1- #306000 @@ -1496,38 +1467,44 @@ bx0000000 & 0" 0- 1% -15 +14 #311000 -1A +1< 1" 1- #312000 0" 0- #313000 -1> -1@ -16 +19 +1; +15 1" 1- #314000 0" 0- #315000 -b111 S -b1111111 H -b1111111 9 -b1111111 G -b1111111 I -b1111111 M -0@ -06 +x6 +b0 O +b0 N +bx C +bx 8 +bx B +bx D +bx H +0; +05 1" 1- #316000 0" 0- #317000 +z! +0L +0) +b1 O 1" 1- #318000 @@ -1540,26 +1517,28 @@ b1111111 M 0" 0- 0% -05 +04 #321000 -0A +0< 1" 1- #322000 0" 0- #323000 -0> -1? -14 +09 +1: +13 1" 1- #324000 0" 0- #325000 -0? -04 +0: +03 +xF +x2 1" 1- #326000 @@ -1578,43 +1557,33 @@ b1111111 M 0" 0- 1% -15 +14 #331000 -1A +1< 1" 1- #332000 0" 0- #333000 -1> -1@ -16 +19 +1; +15 1" 1- #334000 0" 0- #335000 -17 -b0 T -b0 S -b11111111 H -b11111111 9 -b11111111 G -b11111111 I -b11111111 M -0@ -06 +b1 N +0; +05 1" 1- #336000 0" 0- #337000 -z! -0Q -0) 1" 1- #338000 @@ -1627,28 +1596,26 @@ z! 0" 0- 0% -05 +04 #341000 -0A +0< 1" 1- #342000 0" 0- #343000 -0> -1? -14 +09 +1: +13 1" 1- #344000 0" 0- #345000 -0? -04 -1K -13 +0: +03 1" 1- #346000 @@ -1667,27 +1634,27 @@ z! 0" 0- 1% -15 +14 #351000 -1A +1< 1" 1- #352000 0" 0- #353000 -1> -1@ -16 +19 +1; +15 1" 1- #354000 0" 0- #355000 -b1 T -0@ -06 +b10 N +0; +05 1" 1- #356000 @@ -1706,26 +1673,26 @@ b1 T 0" 0- 0% -05 +04 #361000 -0A +0< 1" 1- #362000 0" 0- #363000 -0> -1? -14 +09 +1: +13 1" 1- #364000 0" 0- #365000 -0? -04 +0: +03 1" 1- #366000 @@ -1744,27 +1711,27 @@ b1 T 0" 0- 1% -15 +14 #371000 -1A +1< 1" 1- #372000 0" 0- #373000 -1> -1@ -16 +19 +1; +15 1" 1- #374000 0" 0- #375000 -b1 S -0@ -06 +b11 N +0; +05 1" 1- #376000 From db424576f2d6dbeb48a852cc0816a78299a756d4 Mon Sep 17 00:00:00 2001 From: dpapp Date: Wed, 1 Nov 2017 19:22:30 -0400 Subject: [PATCH 49/50] changes to fsm --- datamemory.v | 4 +- fsm.v | 40 +- spimemory.t.v | 40 +- spimemory.v | 9 +- spimemory.vcd | 1926 +++++++++++++++++++++++++++++++++++++++++-------- 5 files changed, 1706 insertions(+), 313 deletions(-) diff --git a/datamemory.v b/datamemory.v index b3469c8..bfc8238 100644 --- a/datamemory.v +++ b/datamemory.v @@ -22,9 +22,9 @@ module datamemory reg [width-1:0] memory [depth-1:0]; - initial begin + /*initial begin memory[0] = 8'b11111111; - end + end*/ always @(posedge clk) begin if(writeEnable) diff --git a/fsm.v b/fsm.v index ba9c43f..6378ff9 100644 --- a/fsm.v +++ b/fsm.v @@ -12,7 +12,7 @@ module finiteStateMachine( output reg ADDR_WE, output reg SR_WE ); - + localparam addressLoad = 1; localparam branch = 2; localparam write = 3; @@ -20,6 +20,7 @@ module finiteStateMachine( localparam reset = 0; localparam dataLoad = 5; localparam dataLoad2 = 6; + localparam writeFinish = 7; reg[7:0] state = reset; @@ -30,9 +31,11 @@ module finiteStateMachine( // Some state transitions should happen immediately if ((state == reset) && (chip_select == 0)) begin + $display("start"); state <= addressLoad; end - if (state == branch) begin + else if (state == branch) begin + $display("branch"); if (r_w == 0) begin // write state <= write; end @@ -40,12 +43,18 @@ module finiteStateMachine( state <= dataLoad; end end - if (state == dataLoad) begin + else if (state == dataLoad) begin + $display("dataLoad1"); state <= dataLoad2; end - if (state == dataLoad2) begin + else if (state == dataLoad2) begin + $display("dataLoad2"); state <= read; end + else if (state == writeFinish) begin + $display("write finish"); + state <= reset; + end // Some states need to wait a given tim based on the serial clock. if (sclk_posedge) begin @@ -58,7 +67,8 @@ module finiteStateMachine( counter <= counter + 1; end end - else if ((state == read) || (state == write)) begin + else if (state == read) begin + $display("read"); if (counter == 7) begin counter <= 0; state <= reset; @@ -67,7 +77,19 @@ module finiteStateMachine( counter <= counter + 1; end end + else if (state == write) begin + $display("write"); + if (counter == 8) begin + counter <= 0; + state <= writeFinish; + end + else begin + counter <= counter + 1; + end + end end + + case (state) addressLoad: begin MISO_BUFE <= 0; @@ -100,11 +122,17 @@ module finiteStateMachine( SR_WE <= 0; end dataLoad2: begin - MISO_BUFE <= 1; + MISO_BUFE <= 0; DM_WE <= 0; ADDR_WE <= 0; SR_WE <= 1; end + writeFinish: begin + MISO_BUFE <= 0; + DM_WE <= 1; + ADDR_WE <= 0; + SR_WE <= 0; + end reset: begin MISO_BUFE <= 0; DM_WE <= 0; diff --git a/spimemory.t.v b/spimemory.t.v index 12e2f37..b947e55 100644 --- a/spimemory.t.v +++ b/spimemory.t.v @@ -23,7 +23,7 @@ module testSPIMemory(); $dumpvars; //#50; - // Push input + cs_pin = 0; mosi_pin = 0; sclk_pin = 0; #10 sclk_pin = 1; #10; // 1 @@ -39,7 +39,45 @@ module testSPIMemory(); sclk_pin = 0; #10 sclk_pin = 1; #10; // 6 mosi_pin = 0; sclk_pin = 0; #10 sclk_pin = 1; #10; // 7 + mosi_pin = 0; // write + sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 + + cs_pin = 1; + mosi_pin = 0; + // Read output + sclk_pin = 0; #10 sclk_pin = 1; #10; // 1 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 2 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 3 mosi_pin = 1; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 4 + mosi_pin = 1; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 5 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 6 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 7 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 + + // Push input + cs_pin = 0; + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 1 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 2 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 3 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 4 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 5 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 6 + mosi_pin = 0; + sclk_pin = 0; #10 sclk_pin = 1; #10; // 7 + mosi_pin = 1; // read sclk_pin = 0; #10 sclk_pin = 1; #10; // 8 mosi_pin = 1'bX; diff --git a/spimemory.v b/spimemory.v index a60d058..b9a00ff 100644 --- a/spimemory.v +++ b/spimemory.v @@ -53,7 +53,14 @@ module spiMemory .address(address[7:1]), .writeEnable(DM_WE)); - finiteStateMachine fsm(clk, sclk_pos, chip_select, shiftRegOut[0], MISO_BUFE, DM_WE, ADDR_WE, SR_WE); + finiteStateMachine fsm(.clk(clk), + .sclk_posedge(sclk_pos), + .chip_select(chip_select), + .r_w(shiftRegOutP[0]), + .MISO_BUFE(MISO_BUFE), + .DM_WE(DM_WE), + .ADDR_WE(ADDR_WE), + .SR_WE(SR_WE)); endmodule diff --git a/spimemory.vcd b/spimemory.vcd index 142be4f..22d4483 100644 --- a/spimemory.vcd +++ b/spimemory.vcd @@ -1,5 +1,5 @@ $date - Wed Nov 1 18:25:27 2017 + Wed Nov 1 19:22:08 2017 $end $version Icarus Verilog @@ -32,57 +32,56 @@ $var wire 1 3 sclk_neg $end $var wire 1 4 sclk_pin $end $var wire 1 5 sclk_pos $end $var wire 1 6 serialOut $end -$var wire 1 7 shiftRegOut $end -$var wire 8 8 shiftRegOutP [7:0] $end +$var wire 8 7 shiftRegOutP [7:0] $end $scope module c2 $end $var wire 1 - clk $end $var wire 1 4 noisysignal $end -$var reg 1 9 conditioned $end -$var reg 1 : negativeedge $end -$var reg 1 ; positiveedge $end -$var reg 1 < prev_vals $end +$var reg 1 8 conditioned $end +$var reg 1 9 negativeedge $end +$var reg 1 : positiveedge $end +$var reg 1 ; prev_vals $end $upscope $end $scope module c3 $end $var wire 1 - clk $end $var wire 1 . noisysignal $end -$var reg 1 = conditioned $end -$var reg 1 > negativeedge $end -$var reg 1 ? positiveedge $end -$var reg 3 @ prev_vals [2:0] $end +$var reg 1 < conditioned $end +$var reg 1 = negativeedge $end +$var reg 1 > positiveedge $end +$var reg 3 ? prev_vals [2:0] $end $upscope $end $scope module sr $end $var wire 1 - clk $end -$var wire 8 A parallelDataIn [7:0] $end -$var wire 8 B parallelDataOut [7:0] $end +$var wire 8 @ parallelDataIn [7:0] $end +$var wire 8 A parallelDataOut [7:0] $end $var wire 1 * parallelLoad $end $var wire 1 5 peripheralClkEdge $end $var wire 1 1 serialDataIn $end $var wire 1 6 serialDataOut $end -$var reg 8 C data [7:0] $end +$var reg 8 B data [7:0] $end $upscope $end $scope module dff1 $end -$var wire 8 D d [7:0] $end +$var wire 8 C d [7:0] $end $var wire 1 ' enable $end $var wire 1 - trigger $end -$var reg 8 E q [7:0] $end +$var reg 8 D q [7:0] $end $upscope $end $scope module dff2 $end $var wire 1 6 d $end $var wire 1 3 enable $end $var wire 1 - trigger $end -$var reg 1 F q $end +$var reg 1 E q $end $upscope $end $scope module dataMemory $end -$var wire 7 G address [6:0] $end +$var wire 7 F address [6:0] $end $var wire 1 - clk $end -$var wire 8 H dataIn [7:0] $end +$var wire 8 G dataIn [7:0] $end $var wire 1 ( writeEnable $end -$var reg 8 I dataOut [7:0] $end +$var reg 8 H dataOut [7:0] $end $upscope $end $scope module fsm $end $var wire 1 , chip_select $end $var wire 1 - clk $end -$var wire 1 7 r_w $end +$var wire 1 I r_w $end $var wire 1 5 sclk_posedge $end $var reg 1 J ADDR_WE $end $var reg 1 K DM_WE $end @@ -102,25 +101,25 @@ xM xL xK xJ -bx I +xI bx H bx G -xF -bx E +bx F +xE bx D bx C bx B bx A bx @ -x? +bx ? x> x= x< x; x: x9 -bx 8 -z7 +x8 +bx 7 x6 x5 04 @@ -146,8 +145,8 @@ x! $end #1000 z! -0< -bx0 @ +0; +bx0 ? 0M 0* 0J @@ -162,9 +161,9 @@ bx0 @ 0" 0- #3000 -bx00 @ +bx00 ? +08 09 -0: 03 1" 1- @@ -172,16 +171,16 @@ bx00 @ 0" 0- #5000 -b0 @ +b0 ? 1" 1- #6000 0" 0- #7000 -0= +0< 0, -0> +0= 1" 1- #8000 @@ -197,15 +196,15 @@ b1 O 1% 14 #11000 -1< +1; 1" 1- #12000 0" 0- #13000 -19 -1; +18 +1: 15 1" 1- @@ -213,13 +212,14 @@ b1 O 0" 0- #15000 +0I b1 N -bx0 C -bx0 8 bx0 B -bx0 D -bx0 H -0; +bx0 7 +bx0 A +bx0 C +bx0 G +0: 05 1" 1- @@ -241,15 +241,15 @@ bx0 H 0% 04 #21000 -0< +0; 1" 1- #22000 0" 0- #23000 -09 -1: +08 +19 13 1" 1- @@ -257,7 +257,7 @@ bx0 H 0" 0- #25000 -0: +09 03 1" 1- @@ -279,15 +279,15 @@ bx0 H 1% 14 #31000 -1< +1; 1" 1- #32000 0" 0- #33000 -19 -1; +18 +1: 15 1" 1- @@ -296,12 +296,12 @@ bx0 H 0- #35000 b10 N -bx00 C -bx00 8 bx00 B -bx00 D -bx00 H -0; +bx00 7 +bx00 A +bx00 C +bx00 G +0: 05 1" 1- @@ -323,15 +323,15 @@ bx00 H 0% 04 #41000 -0< +0; 1" 1- #42000 0" 0- #43000 -09 -1: +08 +19 13 1" 1- @@ -339,7 +339,7 @@ bx00 H 0" 0- #45000 -0: +09 03 1" 1- @@ -361,15 +361,15 @@ bx00 H 1% 14 #51000 -1< +1; 1" 1- #52000 0" 0- #53000 -19 -1; +18 +1: 15 1" 1- @@ -378,12 +378,12 @@ bx00 H 0- #55000 b11 N -bx000 C -bx000 8 bx000 B -bx000 D -bx000 H -0; +bx000 7 +bx000 A +bx000 C +bx000 G +0: 05 1" 1- @@ -405,15 +405,15 @@ bx000 H 0% 04 #61000 -0< +0; 1" 1- #62000 0" 0- #63000 -09 -1: +08 +19 13 1" 1- @@ -421,7 +421,7 @@ bx000 H 0" 0- #65000 -0: +09 03 1" 1- @@ -443,15 +443,15 @@ bx000 H 1% 14 #71000 -1< +1; 1" 1- #72000 0" 0- #73000 -19 -1; +18 +1: 15 1" 1- @@ -460,12 +460,12 @@ bx000 H 0- #75000 b100 N -bx0000 C -bx0000 8 bx0000 B -bx0000 D -bx0000 H -0; +bx0000 7 +bx0000 A +bx0000 C +bx0000 G +0: 05 1" 1- @@ -487,15 +487,15 @@ bx0000 H 0% 04 #81000 -0< +0; 1" 1- #82000 0" 0- #83000 -09 -1: +08 +19 13 1" 1- @@ -503,7 +503,7 @@ bx0000 H 0" 0- #85000 -0: +09 03 1" 1- @@ -525,15 +525,15 @@ bx0000 H 1% 14 #91000 -1< +1; 1" 1- #92000 0" 0- #93000 -19 -1; +18 +1: 15 1" 1- @@ -542,12 +542,12 @@ bx0000 H 0- #95000 b101 N -bx00000 C -bx00000 8 bx00000 B -bx00000 D -bx00000 H -0; +bx00000 7 +bx00000 A +bx00000 C +bx00000 G +0: 05 1" 1- @@ -569,15 +569,15 @@ bx00000 H 0% 04 #101000 -0< +0; 1" 1- #102000 0" 0- #103000 -09 -1: +08 +19 13 1" 1- @@ -585,7 +585,7 @@ bx00000 H 0" 0- #105000 -0: +09 03 1" 1- @@ -607,15 +607,15 @@ bx00000 H 1% 14 #111000 -1< +1; 1" 1- #112000 0" 0- #113000 -19 -1; +18 +1: 15 1" 1- @@ -624,12 +624,12 @@ bx00000 H 0- #115000 b110 N -bx000000 C -bx000000 8 bx000000 B -bx000000 D -bx000000 H -0; +bx000000 7 +bx000000 A +bx000000 C +bx000000 G +0: 05 1" 1- @@ -651,15 +651,15 @@ bx000000 H 0% 04 #121000 -0< +0; 1" 1- #122000 0" 0- #123000 -09 -1: +08 +19 13 1" 1- @@ -667,7 +667,7 @@ bx000000 H 0" 0- #125000 -0: +09 03 1" 1- @@ -689,15 +689,15 @@ bx000000 H 1% 14 #131000 -1< +1; 1" 1- #132000 0" 0- #133000 -19 -1; +18 +1: 15 1" 1- @@ -706,12 +706,12 @@ bx000000 H 0- #135000 b111 N -bx0000000 C -bx0000000 8 bx0000000 B -bx0000000 D -bx0000000 H -0; +bx0000000 7 +bx0000000 A +bx0000000 C +bx0000000 G +0: 05 1" 1- @@ -732,18 +732,16 @@ bx0000000 H 0- 0% 04 -1$ -11 #141000 -0< +0; 1" 1- #142000 0" 0- #143000 -09 -1: +08 +19 13 1" 1- @@ -751,7 +749,7 @@ bx0000000 H 0" 0- #145000 -0: +09 03 1" 1- @@ -773,15 +771,15 @@ bx0000000 H 1% 14 #151000 -1< +1; 1" 1- #152000 0" 0- #153000 -19 -1; +18 +1: 15 1" 1- @@ -792,12 +790,12 @@ bx0000000 H 06 b10 O b0 N -b1 C -b1 8 -b1 B -b1 D -b1 H -0; +b0 B +b0 7 +b0 A +b0 C +b0 G +0: 05 1" 1- @@ -807,19 +805,20 @@ b1 H #157000 1J 1' -b101 O +b11 O 1" 1- #158000 0" 0- #159000 -b0 G +b0 F 0J 0' -b110 O -b1 E -b1 + +1K +1( +b0 D +b0 + 1" 1- #160000 @@ -827,35 +826,23 @@ b1 + 0- 0% 04 -x$ -x1 +1# +1. #161000 -x! -0< -b11111111 I -b11111111 / -b11111111 A -1M -1* -1L -1) -b100 O +0; +b1 ? 1" 1- #162000 0" 0- #163000 -16 -0M -0* -b11111111 C -b11111111 8 -b11111111 B -b11111111 D -b11111111 H -09 -1: +b0 H +b0 / +b0 @ +b11 ? +08 +19 13 1" 1- @@ -863,23 +850,27 @@ b11111111 H 0" 0- #165000 -1! -0: +09 03 -1F -12 +b111 ? +0E +02 1" 1- #166000 0" 0- #167000 +1< +1, +1> 1" 1- #168000 0" 0- #169000 +0> 1" 1- #170000 @@ -888,15 +879,15 @@ b11111111 H 1% 14 #171000 -1< +1; 1" 1- #172000 0" 0- #173000 -19 -1; +18 +1: 15 1" 1- @@ -905,12 +896,7 @@ b11111111 H 0- #175000 b1 N -b1111111x C -b1111111x 8 -b1111111x B -b1111111x D -b1111111x H -0; +0: 05 1" 1- @@ -931,17 +917,16 @@ b1111111x H 0- 0% 04 -bx1 & #181000 -0< +0; 1" 1- #182000 0" 0- #183000 -09 -1: +08 +19 13 1" 1- @@ -949,7 +934,7 @@ bx1 & 0" 0- #185000 -0: +09 03 1" 1- @@ -971,15 +956,15 @@ bx1 & 1% 14 #191000 -1< +1; 1" 1- #192000 0" 0- #193000 -19 -1; +18 +1: 15 1" 1- @@ -988,12 +973,7 @@ bx1 & 0- #195000 b10 N -b111111xx C -b111111xx 8 -b111111xx B -b111111xx D -b111111xx H -0; +0: 05 1" 1- @@ -1014,17 +994,16 @@ b111111xx H 0- 0% 04 -bx11 & #201000 -0< +0; 1" 1- #202000 0" 0- #203000 -09 -1: +08 +19 13 1" 1- @@ -1032,7 +1011,7 @@ bx11 & 0" 0- #205000 -0: +09 03 1" 1- @@ -1054,15 +1033,15 @@ bx11 & 1% 14 #211000 -1< +1; 1" 1- #212000 0" 0- #213000 -19 -1; +18 +1: 15 1" 1- @@ -1071,12 +1050,7 @@ bx11 & 0- #215000 b11 N -b11111xxx C -b11111xxx 8 -b11111xxx B -b11111xxx D -b11111xxx H -0; +0: 05 1" 1- @@ -1097,17 +1071,18 @@ b11111xxx H 0- 0% 04 -bx111 & +1$ +11 #221000 -0< +0; 1" 1- #222000 0" 0- #223000 -09 -1: +08 +19 13 1" 1- @@ -1115,7 +1090,7 @@ bx111 & 0" 0- #225000 -0: +09 03 1" 1- @@ -1137,15 +1112,15 @@ bx111 & 1% 14 #231000 -1< +1; 1" 1- #232000 0" 0- #233000 -19 -1; +18 +1: 15 1" 1- @@ -1153,13 +1128,14 @@ bx111 & 0" 0- #235000 +1I b100 N -b1111xxxx C -b1111xxxx 8 -b1111xxxx B -b1111xxxx D -b1111xxxx H -0; +b1 B +b1 7 +b1 A +b1 C +b1 G +0: 05 1" 1- @@ -1173,6 +1149,9 @@ b1111xxxx H 0" 0- #239000 +b1 H +b1 / +b1 @ 1" 1- #240000 @@ -1180,17 +1159,16 @@ b1111xxxx H 0- 0% 04 -bx1111 & #241000 -0< +0; 1" 1- #242000 0" 0- #243000 -09 -1: +08 +19 13 1" 1- @@ -1198,7 +1176,7 @@ bx1111 & 0" 0- #245000 -0: +09 03 1" 1- @@ -1220,15 +1198,15 @@ bx1111 & 1% 14 #251000 -1< +1; 1" 1- #252000 0" 0- #253000 -19 -1; +18 +1: 15 1" 1- @@ -1237,12 +1215,12 @@ bx1111 & 0- #255000 b101 N -b111xxxxx C -b111xxxxx 8 -b111xxxxx B -b111xxxxx D -b111xxxxx H -0; +b11 B +b11 7 +b11 A +b11 C +b11 G +0: 05 1" 1- @@ -1256,6 +1234,9 @@ b111xxxxx H 0" 0- #259000 +b11 H +b11 / +b11 @ 1" 1- #260000 @@ -1263,17 +1244,18 @@ b111xxxxx H 0- 0% 04 -bx11111 & +0$ +01 #261000 -0< +0; 1" 1- #262000 0" 0- #263000 -09 -1: +08 +19 13 1" 1- @@ -1281,7 +1263,7 @@ bx11111 & 0" 0- #265000 -0: +09 03 1" 1- @@ -1303,15 +1285,15 @@ bx11111 & 1% 14 #271000 -1< +1; 1" 1- #272000 0" 0- #273000 -19 -1; +18 +1: 15 1" 1- @@ -1319,13 +1301,14 @@ bx11111 & 0" 0- #275000 +0I b110 N -b11xxxxxx C -b11xxxxxx 8 -b11xxxxxx B -b11xxxxxx D -b11xxxxxx H -0; +b110 B +b110 7 +b110 A +b110 C +b110 G +0: 05 1" 1- @@ -1339,6 +1322,9 @@ b11xxxxxx H 0" 0- #279000 +b110 H +b110 / +b110 @ 1" 1- #280000 @@ -1346,17 +1332,16 @@ b11xxxxxx H 0- 0% 04 -bx111111 & #281000 -0< +0; 1" 1- #282000 0" 0- #283000 -09 -1: +08 +19 13 1" 1- @@ -1364,7 +1349,7 @@ bx111111 & 0" 0- #285000 -0: +09 03 1" 1- @@ -1386,15 +1371,15 @@ bx111111 & 1% 14 #291000 -1< +1; 1" 1- #292000 0" 0- #293000 -19 -1; +18 +1: 15 1" 1- @@ -1403,12 +1388,12 @@ bx111111 & 0- #295000 b111 N -b1xxxxxxx C -b1xxxxxxx 8 -b1xxxxxxx B -b1xxxxxxx D -b1xxxxxxx H -0; +b1100 B +b1100 7 +b1100 A +b1100 C +b1100 G +0: 05 1" 1- @@ -1422,6 +1407,9 @@ b1xxxxxxx H 0" 0- #299000 +b1100 H +b1100 / +b1100 @ 1" 1- #300000 @@ -1429,17 +1417,16 @@ b1xxxxxxx H 0- 0% 04 -bx1111111 & #301000 -0< +0; 1" 1- #302000 0" 0- #303000 -09 -1: +08 +19 13 1" 1- @@ -1447,7 +1434,7 @@ bx1111111 & 0" 0- #305000 -0: +09 03 1" 1- @@ -1469,15 +1456,15 @@ bx1111111 & 1% 14 #311000 -1< +1; 1" 1- #312000 0" 0- #313000 -19 -1; +18 +1: 15 1" 1- @@ -1485,15 +1472,13 @@ bx1111111 & 0" 0- #315000 -x6 -b0 O -b0 N -bx C -bx 8 -bx B -bx D -bx H -0; +b1000 N +b11000 B +b11000 7 +b11000 A +b11000 C +b11000 G +0: 05 1" 1- @@ -1501,16 +1486,15 @@ bx H 0" 0- #317000 -z! -0L -0) -b1 O 1" 1- #318000 0" 0- #319000 +b11000 H +b11000 / +b11000 @ 1" 1- #320000 @@ -1518,16 +1502,20 @@ b1 O 0- 0% 04 +0# +0. #321000 -0< +0; +b110 ? 1" 1- #322000 0" 0- #323000 -09 -1: +b100 ? +08 +19 13 1" 1- @@ -1535,22 +1523,25 @@ b1 O 0" 0- #325000 -0: +09 03 -xF -x2 +b0 ? 1" 1- #326000 0" 0- #327000 +0< +0, +1= 1" 1- #328000 0" 0- #329000 +0= 1" 1- #330000 @@ -1559,15 +1550,15 @@ x2 1% 14 #331000 -1< +1; 1" 1- #332000 0" 0- #333000 -19 -1; +18 +1: 15 1" 1- @@ -1575,8 +1566,14 @@ x2 0" 0- #335000 -b1 N -0; +b111 O +b0 N +b110000 B +b110000 7 +b110000 A +b110000 C +b110000 G +0: 05 1" 1- @@ -1584,12 +1581,19 @@ b1 N 0" 0- #337000 +b0 O 1" 1- #338000 0" 0- #339000 +0K +0( +b1 O +b110000 H +b110000 / +b110000 @ 1" 1- #340000 @@ -1598,15 +1602,15 @@ b1 N 0% 04 #341000 -0< +0; 1" 1- #342000 0" 0- #343000 -09 -1: +08 +19 13 1" 1- @@ -1614,7 +1618,7 @@ b1 N 0" 0- #345000 -0: +09 03 1" 1- @@ -1636,15 +1640,15 @@ b1 N 1% 14 #351000 -1< +1; 1" 1- #352000 0" 0- #353000 -19 -1; +18 +1: 15 1" 1- @@ -1652,8 +1656,13 @@ b1 N 0" 0- #355000 -b10 N -0; +b1 N +b1100000 B +b1100000 7 +b1100000 A +b1100000 C +b1100000 G +0: 05 1" 1- @@ -1675,15 +1684,15 @@ b10 N 0% 04 #361000 -0< +0; 1" 1- #362000 0" 0- #363000 -09 -1: +08 +19 13 1" 1- @@ -1691,7 +1700,7 @@ b10 N 0" 0- #365000 -0: +09 03 1" 1- @@ -1713,15 +1722,15 @@ b10 N 1% 14 #371000 -1< +1; 1" 1- #372000 0" 0- #373000 -19 -1; +18 +1: 15 1" 1- @@ -1729,8 +1738,14 @@ b10 N 0" 0- #375000 -b11 N -0; +16 +b10 N +b11000000 B +b11000000 7 +b11000000 A +b11000000 C +b11000000 G +0: 05 1" 1- @@ -1749,5 +1764,1310 @@ b11 N #380000 0" 0- +0% +04 +#381000 +0; +1" +1- +#382000 +0" +0- +#383000 +08 +19 +13 +1" +1- +#384000 +0" +0- +#385000 +09 +03 +1E +12 +1" +1- +#386000 +0" +0- +#387000 +1" +1- +#388000 +0" +0- +#389000 +1" +1- +#390000 +0" +0- +1% +14 +#391000 +1; +1" +1- +#392000 +0" +0- +#393000 +18 +1: +15 +1" +1- +#394000 +0" +0- +#395000 +b11 N +b10000000 B +b10000000 7 +b10000000 A +b10000000 C +b10000000 G +0: +05 +1" +1- +#396000 +0" +0- +#397000 +1" +1- +#398000 +0" +0- +#399000 +1" +1- +#400000 +0" +0- +0% +04 +#401000 +0; +1" +1- +#402000 +0" +0- +#403000 +08 +19 +13 +1" +1- +#404000 +0" +0- +#405000 +09 +03 +1" +1- +#406000 +0" +0- +#407000 +1" +1- +#408000 +0" +0- +#409000 +1" +1- +#410000 +0" +0- +1% +14 +#411000 +1; +1" +1- +#412000 +0" +0- +#413000 +18 +1: +15 +1" +1- +#414000 +0" +0- +#415000 +06 +b100 N +b0 B +b0 7 +b0 A +b0 C +b0 G +0: +05 +1" +1- +#416000 +0" +0- +#417000 +1" +1- +#418000 +0" +0- +#419000 +1" +1- +#420000 +0" +0- +0% +04 +#421000 +0; +1" +1- +#422000 +0" +0- +#423000 +08 +19 +13 +1" +1- +#424000 +0" +0- +#425000 +09 +03 +0E +02 +1" +1- +#426000 +0" +0- +#427000 +1" +1- +#428000 +0" +0- +#429000 +1" +1- +#430000 +0" +0- +1% +14 +#431000 +1; +1" +1- +#432000 +0" +0- +#433000 +18 +1: +15 +1" +1- +#434000 +0" +0- +#435000 +b101 N +0: +05 +1" +1- +#436000 +0" +0- +#437000 +1" +1- +#438000 +0" +0- +#439000 +1" +1- +#440000 +0" +0- +0% +04 +#441000 +0; +1" +1- +#442000 +0" +0- +#443000 +08 +19 +13 +1" +1- +#444000 +0" +0- +#445000 +09 +03 +1" +1- +#446000 +0" +0- +#447000 +1" +1- +#448000 +0" +0- +#449000 +1" +1- +#450000 +0" +0- +1% +14 +#451000 +1; +1" +1- +#452000 +0" +0- +#453000 +18 +1: +15 +1" +1- +#454000 +0" +0- +#455000 +b110 N +0: +05 +1" +1- +#456000 +0" +0- +#457000 +1" +1- +#458000 +0" +0- +#459000 +1" +1- +#460000 +0" +0- +0% +04 +1$ +11 +#461000 +0; +1" +1- +#462000 +0" +0- +#463000 +08 +19 +13 +1" +1- +#464000 +0" +0- +#465000 +09 +03 +1" +1- +#466000 +0" +0- +#467000 +1" +1- +#468000 +0" +0- +#469000 +1" +1- +#470000 +0" +0- +1% +14 +#471000 +1; +1" +1- +#472000 +0" +0- +#473000 +18 +1: +15 +1" +1- +#474000 +0" +0- +#475000 +1I +b111 N +b1 B +b1 7 +b1 A +b1 C +b1 G +0: +05 +1" +1- +#476000 +0" +0- +#477000 +1" +1- +#478000 +0" +0- +#479000 +1" +1- +#480000 +0" +0- +0% +04 +x$ +x1 +#481000 +0; +1" +1- +#482000 +0" +0- +#483000 +08 +19 +13 +1" +1- +#484000 +0" +0- +#485000 +09 +03 +1" +1- +#486000 +0" +0- +#487000 +1" +1- +#488000 +0" +0- +#489000 +1" +1- +#490000 +0" +0- +1% +14 +#491000 +1; +1" +1- +#492000 +0" +0- +#493000 +18 +1: +15 +1" +1- +#494000 +0" +0- +#495000 +xI +b10 O +b0 N +b1x B +b1x 7 +b1x A +b1x C +b1x G +0: +05 +1" +1- +#496000 +0" +0- +#497000 +1J +1' +b101 O +1" +1- +#498000 +0" +0- +#499000 +b1 F +0J +0' +b110 O +b1x D +b1x + +1" +1- +#500000 +0" +0- +0% +04 +bxz & +#501000 +0; +bx H +bx / +bx @ +1M +1* +b100 O +1" +1- +#502000 +0" +0- +#503000 +0! +x6 +0M +0* +1L +1) +bx B +bx 7 +bx A +bx C +bx G +08 +19 +13 +1" +1- +#504000 +0" +0- +#505000 +x! +09 +03 +xE +x2 +1" +1- +#506000 +0" +0- +#507000 +1" +1- +#508000 +0" +0- +#509000 +1" +1- +#510000 +0" +0- +1% +14 +#511000 +1; +1" +1- +#512000 +0" +0- +#513000 +18 +1: +15 +1" +1- +#514000 +0" +0- +#515000 +b1 N +0: +05 +1" +1- +#516000 +0" +0- +#517000 +1" +1- +#518000 +0" +0- +#519000 +1" +1- +#520000 +0" +0- +0% +04 +bxz & +#521000 +0; +1" +1- +#522000 +0" +0- +#523000 +08 +19 +13 +1" +1- +#524000 +0" +0- +#525000 +09 +03 +1" +1- +#526000 +0" +0- +#527000 +1" +1- +#528000 +0" +0- +#529000 +1" +1- +#530000 +0" +0- +1% +14 +#531000 +1; +1" +1- +#532000 +0" +0- +#533000 +18 +1: +15 +1" +1- +#534000 +0" +0- +#535000 +b10 N +0: +05 +1" +1- +#536000 +0" +0- +#537000 +1" +1- +#538000 +0" +0- +#539000 +1" +1- +#540000 +0" +0- +0% +04 +bxz & +#541000 +0; +1" +1- +#542000 +0" +0- +#543000 +08 +19 +13 +1" +1- +#544000 +0" +0- +#545000 +09 +03 +1" +1- +#546000 +0" +0- +#547000 +1" +1- +#548000 +0" +0- +#549000 +1" +1- +#550000 +0" +0- +1% +14 +#551000 +1; +1" +1- +#552000 +0" +0- +#553000 +18 +1: +15 +1" +1- +#554000 +0" +0- +#555000 +b11 N +0: +05 +1" +1- +#556000 +0" +0- +#557000 +1" +1- +#558000 +0" +0- +#559000 +1" +1- +#560000 +0" +0- +0% +04 +bxz & +#561000 +0; +1" +1- +#562000 +0" +0- +#563000 +08 +19 +13 +1" +1- +#564000 +0" +0- +#565000 +09 +03 +1" +1- +#566000 +0" +0- +#567000 +1" +1- +#568000 +0" +0- +#569000 +1" +1- +#570000 +0" +0- +1% +14 +#571000 +1; +1" +1- +#572000 +0" +0- +#573000 +18 +1: +15 +1" +1- +#574000 +0" +0- +#575000 +b100 N +0: +05 +1" +1- +#576000 +0" +0- +#577000 +1" +1- +#578000 +0" +0- +#579000 +1" +1- +#580000 +0" +0- +0% +04 +bxz & +#581000 +0; +1" +1- +#582000 +0" +0- +#583000 +08 +19 +13 +1" +1- +#584000 +0" +0- +#585000 +09 +03 +1" +1- +#586000 +0" +0- +#587000 +1" +1- +#588000 +0" +0- +#589000 +1" +1- +#590000 +0" +0- +1% +14 +#591000 +1; +1" +1- +#592000 +0" +0- +#593000 +18 +1: +15 +1" +1- +#594000 +0" +0- +#595000 +b101 N +0: +05 +1" +1- +#596000 +0" +0- +#597000 +1" +1- +#598000 +0" +0- +#599000 +1" +1- +#600000 +0" +0- +0% +04 +bxz & +#601000 +0; +1" +1- +#602000 +0" +0- +#603000 +08 +19 +13 +1" +1- +#604000 +0" +0- +#605000 +09 +03 +1" +1- +#606000 +0" +0- +#607000 +1" +1- +#608000 +0" +0- +#609000 +1" +1- +#610000 +0" +0- +1% +14 +#611000 +1; +1" +1- +#612000 +0" +0- +#613000 +18 +1: +15 +1" +1- +#614000 +0" +0- +#615000 +b110 N +0: +05 +1" +1- +#616000 +0" +0- +#617000 +1" +1- +#618000 +0" +0- +#619000 +1" +1- +#620000 +0" +0- +0% +04 +bxz & +#621000 +0; +1" +1- +#622000 +0" +0- +#623000 +08 +19 +13 +1" +1- +#624000 +0" +0- +#625000 +09 +03 +1" +1- +#626000 +0" +0- +#627000 +1" +1- +#628000 +0" +0- +#629000 +1" +1- +#630000 +0" +0- +1% +14 +#631000 +1; +1" +1- +#632000 +0" +0- +#633000 +18 +1: +15 +1" +1- +#634000 +0" +0- +#635000 +b111 N +0: +05 +1" +1- +#636000 +0" +0- +#637000 +1" +1- +#638000 +0" +0- +#639000 +1" +1- +#640000 +0" +0- +0% +04 +#641000 +0; +1" +1- +#642000 +0" +0- +#643000 +08 +19 +13 +1" +1- +#644000 +0" +0- +#645000 +09 +03 +1" +1- +#646000 +0" +0- +#647000 +1" +1- +#648000 +0" +0- +#649000 +1" +1- +#650000 +0" +0- +1% +14 +#651000 +1; +1" +1- +#652000 +0" +0- +#653000 +18 +1: +15 +1" +1- +#654000 +0" +0- +#655000 +b0 O +b0 N +0: +05 +1" +1- +#656000 +0" +0- +#657000 +z! +0L +0) +b1 O +1" +1- +#658000 +0" +0- +#659000 +1" +1- +#660000 +0" +0- +0% +04 +#661000 +0; +1" +1- +#662000 +0" +0- +#663000 +08 +19 +13 +1" +1- +#664000 +0" +0- +#665000 +09 +03 +1" +1- +#666000 +0" +0- +#667000 +1" +1- +#668000 +0" +0- +#669000 +1" +1- +#670000 +0" +0- +1% +14 +#671000 +1; +1" +1- +#672000 +0" +0- +#673000 +18 +1: +15 +1" +1- +#674000 +0" +0- +#675000 +b1 N +0: +05 +1" +1- +#676000 +0" +0- +#677000 +1" +1- +#678000 +0" +0- +#679000 +1" +1- +#680000 +0" +0- +0% +04 +#681000 +0; +1" +1- +#682000 +0" +0- +#683000 +08 +19 +13 +1" +1- +#684000 +0" +0- +#685000 +09 +03 +1" +1- +#686000 +0" +0- +#687000 +1" +1- +#688000 +0" +0- +#689000 +1" +1- +#690000 +0" +0- +1% +14 +#691000 +1; +1" +1- +#692000 +0" +0- +#693000 +18 +1: +15 +1" +1- +#694000 +0" +0- +#695000 +b10 N +0: +05 +1" +1- +#696000 +0" +0- +#697000 +1" +1- +#698000 +0" +0- +#699000 +1" +1- +#700000 +0" +0- 1# 1. From 84d122c1770d95743fdbdb8a8ec71ad2782f793c Mon Sep 17 00:00:00 2001 From: David Papp Date: Sun, 3 Dec 2017 16:56:26 -0500 Subject: [PATCH 50/50] Report --- Lab-2-Report.md | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Lab-2-Report.md diff --git a/Lab-2-Report.md b/Lab-2-Report.md new file mode 100644 index 0000000..3861bff --- /dev/null +++ b/Lab-2-Report.md @@ -0,0 +1,64 @@ +# Lab 2 Report +Jonah Spear, David Papp + + +# Note: + +We never finished this lab and at this point we’re submitting for partial credit. + + +# Input Conditioning + +Our waveform illustrates the three desired characteristics: + +![](https://d2mxuefqeaa7sj.cloudfront.net/s_B9532690B10F570C9A4A02C57E09079770E739AAA391501DF085C097B989418B_1508953194069_input_fixed.png) + + +**Input synchronisation:** The conditioned input is synchronised with the noisy input with the clock. This part was already done for us. + +**Input debouncing:** We create a noisy signal with several bounces prior to stabilisation in both the positive and negative directions. It is evident from the waveform image that the conditioned input only changes if the input pin is stable for at least three cycles. Because of this, there is a three cycle delay between when the noisy signal changes to when conditioned registers this change. + +**Edge detection:** It is evident from the waveform image that rising rises for exactly one clock cycle when conditioned switches from 0 to 1. Conversely, falling rises for exactly one clock cycle when conditioned switches from 1 to 0. Rising and falling flip at the exact time that condition flips. + + + + + +**Circuit diagram:** + + + +**Question:** If the main system clock is running at 50MHz, what is the maximum length input glitch that will be suppressed by this design for a `waittime` of 10? Include the analysis in your report. + +With a *waittime* of 10, the noisy signal needs to be steady for 10 cycles before the conditioned input changes. With a 50MHz clock, each cycle takes 2e-8 seconds. Ten cycles will thus take 2e-7 seconds. + + +---------- +# Shift Register + +**Test bench for shiftregister.v:** We tested three properties of our shift register. First, we tested that parallel load was working properly. We confirmed that parallelDataOut was the same as the parallelDataIn when parallel load was enabled. +Next, we confirmed that the shift register advances one position and appends the correct serialDataIn value. We did this by manually setting the peripheralClkEdge and adding ones and zeros in manual clock cycles and verifying parallelDataOut in each iteration. +Finally, we made sure that serialDataOut was correct. This was simple to test, since we essentially just needed to make sure that we were reading the right value. + + + +---------- +# Midpoint + + +Pressing and releasing the button will reset the LEDs to the binary representation of hA5, which is b10101001. + +Switch 0 will provide the serialBitIn. It will update when switch 1 is toggled from 0 to 1. + +Switching switch 1 to from 0 to 1 will trigger a Clk Edge in the shift register, which will cause the register to shift. + + +We will confirm that our FPGA works by first initialising our LEDs to 0. We will then toggle switch 0 to ON, and proceeded to toggle switch 1 off and on several times. This will push a few 1s into our LED queue. We will then toggle switch 0 to OFF. Now, when we toggle switch 1 off and on, it will push 0s into our LED queue. +Finally, we will check that parallel load works as expected. When we press the button, the LEDs are set to the sequence 10101001. + + + +---------- + + +

    GK#7P0#5J2bm!Oi=R`cr|sucCo_cj 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 literal 0 HcmV?d00001 diff --git a/sim/sim.runs/impl_1/midpoint_timing_summary_routed.rpt b/sim/sim.runs/impl_1/midpoint_timing_summary_routed.rpt new file mode 100644 index 0000000..b498b98 --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint_timing_summary_routed.rpt @@ -0,0 +1,173 @@ +Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. +--------------------------------------------------------------------------------------------------------------------------------------------------------- +| Tool Version : Vivado v.2017.2 (lin64) Build 1909853 Thu Jun 15 18:39:10 MDT 2017 +| Date : Wed Oct 25 21:40:50 2017 +| Host : Kreyshawn running 64-bit Ubuntu 14.04.5 LTS +| Command : report_timing_summary -warn_on_violation -max_paths 10 -file midpoint_timing_summary_routed.rpt -rpx midpoint_timing_summary_routed.rpx +| Design : midpoint +| Device : 7z010-clg400 +| Speed File : -1 PRODUCTION 1.11 2014-09-11 +--------------------------------------------------------------------------------------------------------------------------------------------------------- + +Timing Summary Report + +------------------------------------------------------------------------------------------------ +| Timer Settings +| -------------- +------------------------------------------------------------------------------------------------ + + Enable Multi Corner Analysis : Yes + Enable Pessimism Removal : Yes + Pessimism Removal Resolution : Nearest Common Node + Enable Input Delay Default Clock : No + Enable Preset / Clear Arcs : No + Disable Flight Delays : No + Ignore I/O Paths : No + Timing Early Launch at Borrowing Latches : false + + Corner Analyze Analyze + Name Max Paths Min Paths + ------ --------- --------- + Slow Yes Yes + Fast Yes Yes + + + +check_timing report + +Table of Contents +----------------- +1. checking no_clock +2. checking constant_clock +3. checking pulse_width_clock +4. checking unconstrained_internal_endpoints +5. checking no_input_delay +6. checking no_output_delay +7. checking multiple_clock +8. checking generated_clocks +9. checking loops +10. checking partial_input_delay +11. checking partial_output_delay +12. checking latch_loops + +1. checking no_clock +-------------------- + There are 28 register/latch pins with no clock driven by root clock pin: clk (HIGH) + + +2. checking constant_clock +-------------------------- + There are 0 register/latch pins with constant_clock. + + +3. checking pulse_width_clock +----------------------------- + There are 0 register/latch pins which need pulse_width check + + +4. checking unconstrained_internal_endpoints +-------------------------------------------- + There are 54 pins that are not constrained for maximum delay. (HIGH) + + There are 0 pins that are not constrained for maximum delay due to constant clock. + + +5. checking no_input_delay +-------------------------- + There are 3 input ports with no input delay specified. (HIGH) + + There are 0 input ports with no input delay but user has a false path constraint. + + +6. checking no_output_delay +--------------------------- + There are 8 ports with no output delay specified. (HIGH) + + There are 0 ports with no output delay but user has a false path constraint + + There are 0 ports with no output delay but with a timing clock defined on it or propagating through it + + +7. checking multiple_clock +-------------------------- + There are 0 register/latch pins with multiple clocks. + + +8. checking generated_clocks +---------------------------- + There are 0 generated clocks that are not connected to a clock source. + + +9. checking loops +----------------- + There are 0 combinational loops in the design. + + +10. checking partial_input_delay +-------------------------------- + There are 0 input ports with partial input delay specified. + + +11. checking partial_output_delay +--------------------------------- + There are 0 ports with partial output delay specified. + + +12. checking latch_loops +------------------------ + There are 0 combinational latch loops in the design through latch input + + + +------------------------------------------------------------------------------------------------ +| Design Timing Summary +| --------------------- +------------------------------------------------------------------------------------------------ + + WNS(ns) TNS(ns) TNS Failing Endpoints TNS Total Endpoints WHS(ns) THS(ns) THS Failing Endpoints THS Total Endpoints WPWS(ns) TPWS(ns) TPWS Failing Endpoints TPWS Total Endpoints + ------- ------- --------------------- ------------------- ------- ------- --------------------- ------------------- -------- -------- ---------------------- -------------------- + NA NA NA NA NA NA NA NA NA NA NA NA + + +There are no user specified timing constraints. + + +------------------------------------------------------------------------------------------------ +| Clock Summary +| ------------- +------------------------------------------------------------------------------------------------ + + +------------------------------------------------------------------------------------------------ +| Intra Clock Table +| ----------------- +------------------------------------------------------------------------------------------------ + +Clock WNS(ns) TNS(ns) TNS Failing Endpoints TNS Total Endpoints WHS(ns) THS(ns) THS Failing Endpoints THS Total Endpoints WPWS(ns) TPWS(ns) TPWS Failing Endpoints TPWS Total Endpoints +----- ------- ------- --------------------- ------------------- ------- ------- --------------------- ------------------- -------- -------- ---------------------- -------------------- + + +------------------------------------------------------------------------------------------------ +| Inter Clock Table +| ----------------- +------------------------------------------------------------------------------------------------ + +From Clock To Clock WNS(ns) TNS(ns) TNS Failing Endpoints TNS Total Endpoints WHS(ns) THS(ns) THS Failing Endpoints THS Total Endpoints +---------- -------- ------- ------- --------------------- ------------------- ------- ------- --------------------- ------------------- + + +------------------------------------------------------------------------------------------------ +| Other Path Groups Table +| ----------------------- +------------------------------------------------------------------------------------------------ + +Path Group From Clock To Clock WNS(ns) TNS(ns) TNS Failing Endpoints TNS Total Endpoints WHS(ns) THS(ns) THS Failing Endpoints THS Total Endpoints +---------- ---------- -------- ------- ------- --------------------- ------------------- ------- ------- --------------------- ------------------- + + +------------------------------------------------------------------------------------------------ +| Timing Details +| -------------- +------------------------------------------------------------------------------------------------ + + diff --git a/sim/sim.runs/impl_1/midpoint_timing_summary_routed.rpx b/sim/sim.runs/impl_1/midpoint_timing_summary_routed.rpx new file mode 100644 index 0000000000000000000000000000000000000000..80bece16ceef5717223eb647f9f9f9c050abe05d GIT binary patch literal 6591 zcmds6O>7&-72a7{Kbap5Tw6jD*~pZaT*#u62ajVue4{L{1sy&^~4t(Lo+ z-KBm41ZWRM-J8)OsEmD0)cW><_uS99r_NC;<_} zc|Y^boA=(#d-|>a)EXb#=8%?_<~ES+_j;j$Jrn5%1!o87(?$iXV)Z|K8uSf%nR`J}x?YsMtosG#Uq*sVlB#8gv$v zH7vzd9a_lK**#5Xw4=2wQ!|p{4cqJjwybTrbk??xPUbs$jHJ(y^b|>-Bk2nyJwwuS zguX=5-w}E!qen7&EK8rs(oYic9h2R8&6Qlk# zCU~sM9Ib7TiO>l61AJynv0buSWd~Z5Ezf_P2TRc{Fu&4f%T2vq&cp9*i?P=7Y=KU1 z)o)a9uI|)sY|=uuP@vpLX7h`)g~ANp!Q;1>?SSP;?Ur_+v`l&c^!aR&PS2HRcQtng zRNba4T}^M%!eV}Lp;Dr7PCIIs{-A5nLWLFeb%hDkjZ+Oo9+X3*VZYMZ7TOak8$4ELwy;-_Qy z;she+wL-3G8ZC`GK5I2>*3PZsOF+2*6oa)PA`ajX+blt{Ygur5I7Koz+qkpd>~m1fhW0yz>`cu;5_dOfdfGZ9Oi|<2QCUB@FbTIc#=s7oZmS@ z;6M-phxvMD6Q6~*pk`QIx8YqP=}TKs+VtOm9;tV~T*2cL5*gWb4g572j5>$#VCxMF zcQe04_#2=QN}0aKbX=oP>#4lsi~of6G{LYCD1~9MKP>f!<^HhJAI|lM^LP0L-0AAB z26bO>*Akp+GlSXins512PG%gB>ZWNqnG1N*f=Wb#i#KAA%oIK!PDgi@c^!WpioB)@ zDHx=e{(Kgn^PbvJsKVRX*N)%lO~s!AINc)*ya@12k9N|#Afi8hiuhtrN8&UhB5~v3 zOFfaKje;VA@66jQzT9ICO%t&g{^kHRYB+qpM~>K!bOh!jckm9BX3S<(fxqGcg$lv1 zRy@&Hu2$&udhOc!OlpVhMC=eh8nTEhkwx>v*Nn?$Qx(#9*}0Odc==?-ss>e<0d*3M zI0p4hmRcr%La*Q*q=wfb3s%a$y~ClPmIvVz}@ELx&|F5;~hVSb{H#hTil22GR@_`Bp5u19p_ zPt>v7b!pdOHdPgeDs&I(Qbu_Pr*A4Zo2rwC^6(fV%Xl%e=mL#HjwV0>=0&oFHzML- z?AVTD;-`U|+93P5{VE#027p5S{#MuqV0*ke;oTC=rBHiVwrMH6s)w}Ts?fb^t3XM$ z$<4@##&Zl=!gDbkL*qG=^A~rrsX3y)Btwx8@U@uYUJ45o0K&M}8?4DYf#8!$utCS{ z+D(>CT_bDBghxs^7gOIfJG+|U_4pLsPm17Kun2>Djd!@RsT{fY@;pi2!|%kD4!C!a zTmzr=uIGrqq~0MvJ|WkV@8S8_5)n@dmB-wvA3>>k(i)PgH}HB)X~Gy@AIZBX;wI@i ziJ!Z@-KN&l-^LO&B4xwLj9g#;czPr+txS69E@-bp{^h7welr3EPzs;f*3CmQ@S!JXu|puW?AnAkL14E90;tu_9lqE%j&!}p#7Na!l>xDk2N zOjDc=R|g%;r8yviK6=$|Iv&TH_(D~4yj{GnYi%{qje6bg=SccXkM@E$y`_Kme*a7krS8kp137GNe+7N<{`gU3{5UdRkUo4Wr=Q4} uZ1HXlz0JEdLW`iKe<6Ii*Y+0h|KIk!SEk^9CH@-)`o-KpzBk-Ms`OudVJ(RO literal 0 HcmV?d00001 diff --git a/sim/sim.runs/impl_1/midpoint_utilization_placed.pb b/sim/sim.runs/impl_1/midpoint_utilization_placed.pb new file mode 100644 index 0000000000000000000000000000000000000000..f057bc8951e80cba15c21f28e95298cba6267a17 GIT binary patch literal 224 zcmd;LGcqtV*E5>LtPxzAo10ivsgR$hP+F3ilUbEml9`_e;%28-Dioy_=a&{Grxxp- z2-;P@9vo^U#<0Ain21&Pm9V_+z7dI}^N7(l;NdXIio+??&D}X9$mgsbNXcA#AmQ*7L^8Z}0g-!MfrLY=8;A`6-ex?_ literal 0 HcmV?d00001 diff --git a/sim/sim.runs/impl_1/midpoint_utilization_placed.rpt b/sim/sim.runs/impl_1/midpoint_utilization_placed.rpt new file mode 100644 index 0000000..c5ff784 --- /dev/null +++ b/sim/sim.runs/impl_1/midpoint_utilization_placed.rpt @@ -0,0 +1,201 @@ +Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. +------------------------------------------------------------------------------------------------------------- +| Tool Version : Vivado v.2017.2 (lin64) Build 1909853 Thu Jun 15 18:39:10 MDT 2017 +| Date : Wed Oct 25 21:40:39 2017 +| Host : Kreyshawn running 64-bit Ubuntu 14.04.5 LTS +| Command : report_utilization -file midpoint_utilization_placed.rpt -pb midpoint_utilization_placed.pb +| Design : midpoint +| Device : 7z010clg400-1 +| Design State : Fully Placed +------------------------------------------------------------------------------------------------------------- + +Utilization Design Information + +Table of Contents +----------------- +1. Slice Logic +1.1 Summary of Registers by Type +2. Slice Logic Distribution +3. Memory +4. DSP +5. IO and GT Specific +6. Clocking +7. Specific Feature +8. Primitives +9. Black Boxes +10. Instantiated Netlists + +1. Slice Logic +-------------- + ++-------------------------+------+-------+-----------+-------+ +| Site Type | Used | Fixed | Available | Util% | ++-------------------------+------+-------+-----------+-------+ +| Slice LUTs | 5 | 0 | 17600 | 0.03 | +| LUT as Logic | 5 | 0 | 17600 | 0.03 | +| LUT as Memory | 0 | 0 | 6000 | 0.00 | +| Slice Registers | 28 | 0 | 35200 | 0.08 | +| Register as Flip Flop | 28 | 0 | 35200 | 0.08 | +| Register as Latch | 0 | 0 | 35200 | 0.00 | +| F7 Muxes | 0 | 0 | 8800 | 0.00 | +| F8 Muxes | 0 | 0 | 4400 | 0.00 | ++-------------------------+------+-------+-----------+-------+ + + +1.1 Summary of Registers by Type +-------------------------------- + ++-------+--------------+-------------+--------------+ +| Total | Clock Enable | Synchronous | Asynchronous | ++-------+--------------+-------------+--------------+ +| 0 | _ | - | - | +| 0 | _ | - | Set | +| 0 | _ | - | Reset | +| 0 | _ | Set | - | +| 0 | _ | Reset | - | +| 0 | Yes | - | - | +| 0 | Yes | - | Set | +| 0 | Yes | - | Reset | +| 0 | Yes | Set | - | +| 28 | Yes | Reset | - | ++-------+--------------+-------------+--------------+ + + +2. Slice Logic Distribution +--------------------------- + ++-------------------------------------------+------+-------+-----------+-------+ +| Site Type | Used | Fixed | Available | Util% | ++-------------------------------------------+------+-------+-----------+-------+ +| Slice | 9 | 0 | 4400 | 0.20 | +| SLICEL | 3 | 0 | | | +| SLICEM | 6 | 0 | | | +| LUT as Logic | 5 | 0 | 17600 | 0.03 | +| using O5 output only | 0 | | | | +| using O6 output only | 3 | | | | +| using O5 and O6 | 2 | | | | +| LUT as Memory | 0 | 0 | 6000 | 0.00 | +| LUT as Distributed RAM | 0 | 0 | | | +| LUT as Shift Register | 0 | 0 | | | +| LUT Flip Flop Pairs | 4 | 0 | 17600 | 0.02 | +| fully used LUT-FF pairs | 2 | | | | +| LUT-FF pairs with one unused LUT output | 2 | | | | +| LUT-FF pairs with one unused Flip Flop | 2 | | | | +| Unique Control Sets | 2 | | | | ++-------------------------------------------+------+-------+-----------+-------+ +* Note: Review the Control Sets Report for more information regarding control sets. + + +3. Memory +--------- + ++----------------+------+-------+-----------+-------+ +| Site Type | Used | Fixed | Available | Util% | ++----------------+------+-------+-----------+-------+ +| Block RAM Tile | 0 | 0 | 60 | 0.00 | +| RAMB36/FIFO* | 0 | 0 | 60 | 0.00 | +| RAMB18 | 0 | 0 | 120 | 0.00 | ++----------------+------+-------+-----------+-------+ +* Note: Each Block RAM Tile only has one FIFO logic available and therefore can accommodate only one FIFO36E1 or one FIFO18E1. However, if a FIFO18E1 occupies a Block RAM Tile, that tile can still accommodate a RAMB18E1 + + +4. DSP +------ + ++-----------+------+-------+-----------+-------+ +| Site Type | Used | Fixed | Available | Util% | ++-----------+------+-------+-----------+-------+ +| DSPs | 0 | 0 | 80 | 0.00 | ++-----------+------+-------+-----------+-------+ + + +5. IO and GT Specific +--------------------- + ++-----------------------------+------+-------+-----------+-------+ +| Site Type | Used | Fixed | Available | Util% | ++-----------------------------+------+-------+-----------+-------+ +| Bonded IOB | 12 | 12 | 100 | 12.00 | +| IOB Master Pads | 5 | | | | +| IOB Slave Pads | 6 | | | | +| Bonded IPADs | 0 | 0 | 2 | 0.00 | +| Bonded IOPADs | 0 | 0 | 130 | 0.00 | +| PHY_CONTROL | 0 | 0 | 2 | 0.00 | +| PHASER_REF | 0 | 0 | 2 | 0.00 | +| OUT_FIFO | 0 | 0 | 8 | 0.00 | +| IN_FIFO | 0 | 0 | 8 | 0.00 | +| IDELAYCTRL | 0 | 0 | 2 | 0.00 | +| IBUFDS | 0 | 0 | 96 | 0.00 | +| PHASER_OUT/PHASER_OUT_PHY | 0 | 0 | 8 | 0.00 | +| PHASER_IN/PHASER_IN_PHY | 0 | 0 | 8 | 0.00 | +| IDELAYE2/IDELAYE2_FINEDELAY | 0 | 0 | 100 | 0.00 | +| ILOGIC | 0 | 0 | 100 | 0.00 | +| OLOGIC | 0 | 0 | 100 | 0.00 | ++-----------------------------+------+-------+-----------+-------+ + + +6. Clocking +----------- + ++------------+------+-------+-----------+-------+ +| Site Type | Used | Fixed | Available | Util% | ++------------+------+-------+-----------+-------+ +| BUFGCTRL | 1 | 0 | 32 | 3.13 | +| BUFIO | 0 | 0 | 8 | 0.00 | +| MMCME2_ADV | 0 | 0 | 2 | 0.00 | +| PLLE2_ADV | 0 | 0 | 2 | 0.00 | +| BUFMRCE | 0 | 0 | 4 | 0.00 | +| BUFHCE | 0 | 0 | 48 | 0.00 | +| BUFR | 0 | 0 | 8 | 0.00 | ++------------+------+-------+-----------+-------+ + + +7. Specific Feature +------------------- + ++-------------+------+-------+-----------+-------+ +| Site Type | Used | Fixed | Available | Util% | ++-------------+------+-------+-----------+-------+ +| BSCANE2 | 0 | 0 | 4 | 0.00 | +| CAPTUREE2 | 0 | 0 | 1 | 0.00 | +| DNA_PORT | 0 | 0 | 1 | 0.00 | +| EFUSE_USR | 0 | 0 | 1 | 0.00 | +| FRAME_ECCE2 | 0 | 0 | 1 | 0.00 | +| ICAPE2 | 0 | 0 | 2 | 0.00 | +| STARTUPE2 | 0 | 0 | 1 | 0.00 | +| XADC | 0 | 0 | 1 | 0.00 | ++-------------+------+-------+-----------+-------+ + + +8. Primitives +------------- + ++----------+------+---------------------+ +| Ref Name | Used | Functional Category | ++----------+------+---------------------+ +| FDRE | 28 | Flop & Latch | +| OBUF | 8 | IO | +| LUT4 | 4 | LUT | +| IBUF | 4 | IO | +| LUT5 | 2 | LUT | +| LUT2 | 1 | LUT | +| BUFG | 1 | Clock | ++----------+------+---------------------+ + + +9. Black Boxes +-------------- + ++----------+------+ +| Ref Name | Used | ++----------+------+ + + +10. Instantiated Netlists +------------------------- + ++----------+------+ +| Ref Name | Used | ++----------+------+ + + diff --git a/sim/sim.runs/impl_1/opt_design.pb b/sim/sim.runs/impl_1/opt_design.pb new file mode 100644 index 0000000000000000000000000000000000000000..90b8ab915c4d93134cf507f32bce1d0748262e6f GIT binary patch literal 7790 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 $HD_LOG 2>&1 + if [ $? -ne 0 ] + then + exit + fi +} + +# pre-commands: +/bin/touch .write_bitstream.begin.rst +EAStep vivado -log midpoint.vdi -applog -m64 -product Vivado -messageDb vivado.pb -mode batch -source midpoint.tcl -notrace + + diff --git a/sim/sim.runs/impl_1/usage_statistics_webtalk.html b/sim/sim.runs/impl_1/usage_statistics_webtalk.html new file mode 100644 index 0000000..d22e639 --- /dev/null +++ b/sim/sim.runs/impl_1/usage_statistics_webtalk.html @@ -0,0 +1,456 @@ +Device Usage Statistics Report +