tb wip
diff --git a/rapcores b/rapcores
index b7587ab..af0fa8a 160000
--- a/rapcores
+++ b/rapcores
@@ -1 +1 @@
-Subproject commit b7587ab780f9b5c5c3a264019ab4ee1e8c0964fd
+Subproject commit af0fa8a9764b66a8737bf6f1ab3b89956ffd4c71
diff --git a/verilog/dv/caravel/user_proj_example/io_ports/Makefile b/verilog/dv/caravel/user_proj_example/io_ports/Makefile
index 2f91b86..8237f6f 100644
--- a/verilog/dv/caravel/user_proj_example/io_ports/Makefile
+++ b/verilog/dv/caravel/user_proj_example/io_ports/Makefile
@@ -1,4 +1,5 @@
FIRMWARE_PATH = ../..
+VERILOG_PATH = ../../../..
RTL_PATH = ../../../../rtl
IP_PATH = ../../../../ip
BEHAVIOURAL_MODELS = ../../
@@ -21,16 +22,14 @@
%.vvp: %_tb.v %.hex
ifeq ($(SIM),RTL)
iverilog -DFUNCTIONAL -DSIM -I $(BEHAVIOURAL_MODELS) \
- -I $(PDK_PATH) -I $(IP_PATH) -I $(RTL_PATH) -I $(RAPCORES_PATH)/.. -I $(RAPCORES_PATH)/src \
- -I $(RAPCORES_PATH)/testbench -I $(RAPCORES_PATH)/boards \
+ -I $(PDK_PATH) -I $(IP_PATH) -I $(RTL_PATH) -I $(RAPCORES_PATH)/.. -I $(RAPCORES_PATH)/src -I $(RAPCORES_PATH)/testbench -I $(RAPCORES_PATH)/boards \
-o $@ $<
else
- iverilog -DFUNCTIONAL -DSIM -DGL -I $(BEHAVIOURAL_MODELS) -I $(RAPCORES_PATH)/boards \
- -I $(PDK_PATH) -I $(IP_PATH) -I $(RTL_PATH) -I $(VERILOG_PATH) -I $(RAPCORES_PATH)/.. -I $(RAPCORES_PATH)/src \
- -I $(RAPCORES_PATH)/testbench -I $(RAPCORES_PATH)/boards \
- $< -o $@
+ iverilog -DPROJ_GL -DFUNCTIONAL -DSIM -I $(BEHAVIOURAL_MODELS) \
+ -I $(PDK_PATH) -I $(IP_PATH) -I $(VERILOG_PATH) -I $(RTL_PATH) -I $(RAPCORES_PATH)/.. -I $(RAPCORES_PATH)/src \
+ -o $@ $<
endif
-# MERGE: -I $(VERILOG_PATH) maybe needed for GL
+
%.vcd: %.vvp
vvp $<
diff --git a/verilog/dv/caravel/user_proj_example/io_ports/io_ports.c b/verilog/dv/caravel/user_proj_example/io_ports/io_ports.c
index add8845..19c3652 100644
--- a/verilog/dv/caravel/user_proj_example/io_ports/io_ports.c
+++ b/verilog/dv/caravel/user_proj_example/io_ports/io_ports.c
@@ -8,7 +8,7 @@
void main()
{
- /*
+ /*
IO Control Registers
| DM | VTRIP | SLOW | AN_POL | AN_SEL | AN_EN | MOD_SEL | INP_DIS | HOLDH | OEB_N | MGMT_EN |
| 3-bits | 1-bit | 1-bit | 1-bit | 1-bit | 1-bit | 1-bit | 1-bit | 1-bit | 1-bit | 1-bit |
@@ -16,8 +16,8 @@
Output: 0000_0110_0000_1110 (0x1808) = GPIO_MODE_USER_STD_OUTPUT
| DM | VTRIP | SLOW | AN_POL | AN_SEL | AN_EN | MOD_SEL | INP_DIS | HOLDH | OEB_N | MGMT_EN |
| 110 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
-
-
+
+
Input: 0000_0001_0000_1111 (0x0402) = GPIO_MODE_USER_STD_INPUT_NOPULL
| DM | VTRIP | SLOW | AN_POL | AN_SEL | AN_EN | MOD_SEL | INP_DIS | HOLDH | OEB_N | MGMT_EN |
| 001 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
@@ -65,7 +65,7 @@
reg_mprj_xfer = 1;
while (reg_mprj_xfer == 1);
- // Configure LA probes [31:0], [127:64] as inputs to the cpu
+ // Configure LA probes [31:0], [127:64] as inputs to the cpu
// Configure LA probes [63:32] as outputs from the cpu
reg_la0_ena = 0xFFFFFFFF; // [31:0]
reg_la1_ena = 0x00000000; // [95:64]
@@ -76,4 +76,3 @@
reg_la2_data = 0x00000003;
}
-
diff --git a/verilog/dv/caravel/user_proj_example/io_ports/io_ports.hex b/verilog/dv/caravel/user_proj_example/io_ports/io_ports.hex
new file mode 100755
index 0000000..246493d
--- /dev/null
+++ b/verilog/dv/caravel/user_proj_example/io_ports/io_ports.hex
@@ -0,0 +1,56 @@
+@00000000
+81 40 81 41 01 42 81 42 01 43 81 43 01 44 81 44
+01 45 81 45 01 46 81 46 01 47 81 47 01 48 81 48
+01 49 81 49 01 4A 81 4A 01 4B 81 4B 01 4C 81 4C
+01 4D 81 4D 01 4E 81 4E 01 4F 81 4F 17 05 00 00
+13 05 45 33 93 05 00 00 13 06 00 00 63 D8 C5 00
+14 41 94 C1 11 05 91 05 E3 CC C5 FE 13 05 00 00
+93 05 00 00 63 57 B5 00 23 20 05 00 11 05 E3 4D
+B5 FE 71 28 01 A0 01 00 B7 02 00 28 13 03 00 12
+23 90 62 00 A3 81 02 00 05 C6 21 4F 93 73 F6 0F
+93 DE 73 00 23 80 D2 01 93 EE 0E 01 23 80 D2 01
+86 03 93 F3 F3 0F 7D 1F E3 14 0F FE 23 80 62 00
+A1 C9 13 0F 00 02 83 23 05 00 A1 4F 93 DE F3 01
+23 80 D2 01 93 EE 0E 01 23 80 D2 01 83 CE 02 00
+93 FE 2E 00 93 DE 1E 00 86 03 B3 E3 D3 01 7D 1F
+63 17 0F 00 23 20 75 00 11 05 83 23 05 00 FD 1F
+E3 96 0F FC FD 15 F1 F1 63 04 0F 00 23 20 75 00
+13 03 00 08 A3 81 62 00 82 80 01 00 00 00 41 11
+22 C6 00 08 B7 07 00 26 93 87 07 02 09 67 13 07
+87 80 98 C3 B7 07 00 26 93 87 47 02 09 67 13 07
+87 80 98 C3 B7 07 00 26 93 87 87 02 09 67 13 07
+87 80 98 C3 B7 07 00 26 93 87 C7 02 09 67 13 07
+87 80 98 C3 B7 07 00 26 93 87 07 03 09 67 13 07
+87 80 98 C3 B7 07 00 26 93 87 47 03 09 67 13 07
+87 80 98 C3 B7 07 00 26 93 87 87 03 13 07 20 40
+98 C3 B7 07 00 26 93 87 C7 03 13 07 20 40 98 C3
+B7 07 00 26 93 87 C7 05 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 07 06 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 87 05 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 C7 05 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 07 06 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 47 06 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 87 06 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 C7 06 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 07 07 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 47 07 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 87 07 13 07 20 40 98 C3 B7 07
+00 26 93 87 C7 07 09 67 13 07 87 80 98 C3 B7 07
+00 26 93 87 07 08 09 67 13 07 87 80 98 C3 B7 07
+00 26 93 87 47 08 13 07 20 40 98 C3 B7 07 00 26
+93 87 87 08 13 07 20 40 98 C3 B7 07 00 26 93 87
+C7 08 09 67 13 07 87 80 98 C3 B7 07 00 26 93 87
+07 09 09 67 13 07 87 80 98 C3 B7 07 00 26 93 87
+47 09 13 07 20 40 98 C3 B7 07 00 26 93 87 87 09
+09 67 13 07 87 80 98 C3 B7 07 00 26 93 87 C7 09
+09 67 13 07 87 80 98 C3 B7 07 00 26 93 87 07 0A
+13 07 20 40 98 C3 B7 07 00 26 93 87 47 0A 13 07
+20 40 98 C3 B7 07 00 26 93 87 87 0A 13 07 20 40
+98 C3 B7 07 00 26 93 87 C7 0A 13 07 20 40 98 C3
+B7 07 00 26 93 87 07 0B 09 67 13 07 87 80 98 C3
+B7 07 00 26 93 87 47 0B 09 67 13 07 87 80 98 C3
+B7 07 00 26 05 47 98 C3 01 00 B7 07 00 26 98 43
+85 47 E3 0C F7 FE B7 07 00 25 C1 07 7D 57 98 C3
+B7 07 00 25 D1 07 23 A0 07 00 B7 07 00 25 E1 07
+23 A0 07 00 B7 07 00 25 F1 07 7D 57 98 C3 B7 07
+00 25 A1 07 0D 47 98 C3 01 00 32 44 41 01 82 80
diff --git a/verilog/dv/caravel/user_proj_example/io_ports/io_ports.vvp b/verilog/dv/caravel/user_proj_example/io_ports/io_ports.vvp
new file mode 100755
index 0000000..07064c5
--- /dev/null
+++ b/verilog/dv/caravel/user_proj_example/io_ports/io_ports.vvp
Binary files differ
diff --git a/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v b/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v
index 5148a69..79aaa81 100644
--- a/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v
+++ b/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v
@@ -2,9 +2,6 @@
`timescale 1 ns / 1 ps
-//`define USE_POWER_PINS
-
-
`include "defines.v"
`include "mpw_one_defines.v"
`include "macro_params.v"
@@ -24,9 +21,12 @@
`include "rapcore.v"
`include "hbridge_coil.v"
`include "pwm_duty.v"
+`include "rapcore_harness_tb.v"
-`ifdef GL
- `include "gl/rapcores.v"
+//`define USE_POWER_PINS
+
+`ifdef PROJ_GL
+ `include "gl/rapcore.v"
`else
`include "rapcores.v"
`endif
@@ -135,86 +135,40 @@
wire signed [12:0] current1;
wire signed [12:0] current2;
- wire analog_out1;
- wire analog_out2;
- reg analog_cmp1;
- reg analog_cmp2;
- reg [40:0] step_clock;
- reg [20:0] cnt;
- reg [12:0] current_abs1;
- reg [12:0] current_abs2;
- wire phase_a1_l;
- wire phase_a2_l;
- wire phase_b1_l;
- wire phase_b2_l;
- wire phase_a1_h;
- wire phase_a2_h;
- wire phase_b1_h;
- wire phase_b2_h;
- wire resetn;
+ //assign resetn = RSTB;
-// assign CHARGEPUMP = mprj_io[15];
- assign analog_out1 = mprj_io[27];
- assign analog_out2 = mprj_io[28];
- assign phase_a1_l = mprj_io[23];
- assign phase_a2_l = mprj_io[19];
- assign phase_b1_l = mprj_io[16];
- assign phase_b2_l = mprj_io[20];
- assign phase_a1_h = mprj_io[21];
- assign phase_a2_h = mprj_io[18];
- assign phase_b1_h = mprj_io[14];
- assign phase_b2_h = mprj_io[17];
-// assign BUFFER_DTR = mprj_io[37];
-// assign MOVE_DONE = mprj_io[24];
-// assign CIPO = mprj_io[36];
-// assign STEPOUTPUT = mprj_io[30];
-// assign DIROUTPUT = mprj_io[31];
- assign mprj_io[25] = analog_cmp1;
- assign mprj_io[26] = analog_cmp2;
-// assign mprj_io[18] = ENC_B;
-// assign mprj_io[19] = ENC_A;
-// assign mprj_io[29] = HALT;
-// assign mprj_io[35] = SCK;
-// assign mprj_io[34] = CS;
-// assign mprj_io[22] = COPI;
- assign mprj_io[32] = step;
- assign mprj_io[33] = dir;
- assign resetn = RSTB;
-
- always @(posedge clock) begin
- if (!resetn) begin
- cnt <= 0;
- analog_cmp1 <= 1;
- analog_cmp2 <= 1;
- step <= 1;
- step_clock <= 40'b0;
- end
- else begin
- cnt <= cnt + 1;
- enable_in <= 1;
- if (current1[12] == 1'b1) begin
- current_abs1 = -current1;
- end
- else begin
- current_abs1 = current1;
- end
- if (current2[12] == 1'b1) begin
- current_abs2 = -current2;
- end
- else begin
- current_abs2 = current2;
- end
- step_clock <= step_clock + 1;
- step <= step_clock[10];
- analog_cmp1 <= (current_abs1[11:0] >= target_current1[11:0]); // compare unsigned
- analog_cmp2 <= (current_abs2[11:0] >= target_current2[11:0]);
- if (cnt <= 20'hC400) begin
- dir <= 1;
- end
- else
- dir <= 0;
- end
- end
+ rapcore_harness harness0 (
+ .CLK(clock),
+ //.resetn_in(resetn),
+ .CHARGEPUMP(mprj_io[15]),
+ .analog_cmp1(mprj_io[25]),
+ .analog_out1(mprj_io[27]),
+ .analog_cmp2(mprj_io[26]),
+ .analog_out2(mprj_io[28]),
+ .PHASE_A1(mprj_io[23]),
+ .PHASE_A2(mprj_io[19]),
+ .PHASE_B1(mprj_io[16]),
+ .PHASE_B2(mprj_io[20]),
+ .PHASE_A1_H(mprj_io[21]),
+ .PHASE_A2_H(mprj_io[18]),
+ .PHASE_B1_H(mprj_io[14]),
+ .PHASE_B2_H(mprj_io[17]),
+ .ENC_B(mprj_io[12]),
+ .ENC_A(mprj_io[13]),
+ .BUFFER_DTR(mprj_io[37]),
+ .MOVE_DONE(mprj_io[24]),
+ .HALT(mprj_io[29]),
+ .SCK(mprj_io[35]),
+ .CS(mprj_io[34]),
+ .COPI(mprj_io[22]),
+ .CIPO(mprj_io[36]),
+ .STEPOUTPUT(mprj_io[30]),
+ .DIROUTPUT(mprj_io[31]),
+ .STEPINPUT(mprj_io[32]),
+ .DIRINPUT(mprj_io[33]),
+ .ENINPUT(mprj_io[11]),
+ .ENOUTPUT(mprj_io[10])
+ );
caravel uut (
.vddio (VDD3V3),
@@ -253,37 +207,5 @@
.io3() // not used
);
- pwm_duty duty1(
- .clk(clock),
- .resetn(resetn),
- .pwm(analog_out1),
- .duty(target_current1)
- );
- pwm_duty duty2(
- .clk(clock),
- .resetn(resetn),
- .pwm(analog_out2),
- .duty(target_current2)
- );
- hbridge_coil hbridge_coil1(
- .clk(clock),
- .resetn(resetn),
- .low_1(phase_a1_l),
- .high_1(phase_a1_h),
- .low_2(phase_a2_l),
- .high_2(phase_a2_h),
- .current(current1),
- .polarity_invert_config(1'b0)
- );
- hbridge_coil hbridge_coil2(
- .clk(clock),
- .resetn(resetn),
- .low_1(phase_b1_l),
- .high_1(phase_b1_h),
- .low_2(phase_b2_l),
- .high_2(phase_b2_h),
- .current(current2),
- .polarity_invert_config(1'b0)
- );
endmodule
`default_nettype wire