(1) Added a wrapper interface between the top level verilog and the user project
example.
(2) Corrected broken directory references in README.md
(3) Added the caravel.pdf document (first draft, mostly just figures and no text).
diff --git a/verilog/rtl/README b/verilog/rtl/README
index 1ac0025..5c05935 100644
--- a/verilog/rtl/README
+++ b/verilog/rtl/README
@@ -4,17 +4,30 @@
Caravel pinout:
---------------
- vdd3v3
- vdd1v8
- vss
- gpio 1 bit, mainly used for external LDO control of user power supply
+ vddio 3.3V supply for all I/O and ESD
+ vssio Ground for all I/O and ESD
+ vdda 3.3V supply for management area
+ vssa Ground for management area
+ vccd 1.8V supply for management area
+ vssd Digital ground for management area
+
+ vdda1 3.3V supply for user area 1
+ vdda2 3.3V supply for user area 2
+ vssa1 Ground for user area 1
+ vssa2 Ground for user area 2
+ vccd1 1.8 supply for user area 1
+ vccd2 1.8 supply for user area 2
+ vssd1 Digital ground for user area 1
+ vssd2 Digital ground for user area 2
+
clock Master clock input
+ gpio 1 bit, mainly used for external LDO control of user power supply
+ mprj_io 32 bits general purpose programmable digital or analog I/O
resetb Master reset (sense inverted) input
flash_csb SPI flash controller chip select (sense inverted)
flash_clk SPI flash controller clock
flash_io0 SPI flash controller data out
flash_io1 SPI flash controller data in
- mprj_io 32 bits general purpose programmable digital or analog I/O
Special-use pins for the management SoC:
----------------------------------------
@@ -80,38 +93,40 @@
UART: Clock divider: 2000 0000
Data: 2000 0004
+ Enable 2000 0008
GPIO: Data: 2100 0000
Output enable: 2100 0004
Pullup 2100 0008
Pulldown 2100 000c
- Counter 1: Config: 2110 0000
- Value: 2110 0004
- Data: 2110 0008
+ Counter 1: Config: 2200 0000
+ Value: 2200 0004
+ Data: 2200 0008
- Counter 2: Config: 2120 0000
- Value: 2120 0004
- Data: 2120 0008
+ Counter 2: Config: 2300 0000
+ Value: 2300 0004
+ Data: 2300 0008
- SPI master: Config: 2130 0000
- Data: 2130 0004
+ SPI master: Config: 2400 0000
+ Data: 2400 0004
- Logic analyzer: Data 0: 2200 0000
- Data 1: 2200 0004
- Data 2: 2200 0008
- Data 3: 2200 000c
- Enable 0: 2200 0010
- Enable 1: 2200 0014
- Enable 2: 2200 0018
- Enable 3: 2200 001c
+ Logic analyzer: Data 0: 2500 0000
+ Data 1: 2500 0004
+ Data 2: 2500 0008
+ Data 3: 2500 000c
+ Enable 0: 2500 0010
+ Enable 1: 2500 0014
+ Enable 2: 2500 0018
+ Enable 3: 2500 001c
- Project ctrl: Data: 2300 0000
- Transfer: 2300 0004
- I/O Config: 2300 0008
- to 2300 0084
- Power Config: 2300 0088
- to 2300 0104
+ Project ctrl: Data (L): 2600 0000
+ Data (H): 2600 0004
+ Transfer: 2600 0008
+ I/O Config: 2600 000c
+ to 2600 009c
+ Power Config: 2600 00a0
+ to 2600 0130
Flash ctrl: Config: 2D00 0000
diff --git a/verilog/rtl/caravel.v b/verilog/rtl/caravel.v
index 433dd91..b5fcff9 100644
--- a/verilog/rtl/caravel.v
+++ b/verilog/rtl/caravel.v
@@ -40,6 +40,7 @@
`include "mprj_io.v"
`include "chip_io.v"
`include "user_id_programming.v"
+`include "user_project_wrapper.v"
`include "gpio_control_block.v"
`include "clock_div.v"
`include "simple_por.v"
@@ -420,11 +421,11 @@
);
- /*--------------------------------------*/
- /* User project is instantiated here */
- /*--------------------------------------*/
+ /*----------------------------------------------*/
+ /* Wrapper module around the user project */
+ /*----------------------------------------------*/
- user_proj_example #(
+ user_project_wrapper #(
.IO_PADS(`MPRJ_IO_PADS),
.PWR_PADS(`MPRJ_PWR_PADS)
) mprj (
@@ -455,7 +456,9 @@
// IO Pads
.io_in (user_io_in),
.io_out(user_io_out),
- .io_oeb(user_io_oeb)
+ .io_oeb(user_io_oeb),
+ // Independent clock
+ .user_clock2(mprj_clock2)
);
/*--------------------------------------*/
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
new file mode 100644
index 0000000..8b143db
--- /dev/null
+++ b/verilog/rtl/user_project_wrapper.v
@@ -0,0 +1,102 @@
+/*
+ *-------------------------------------------------------------
+ *
+ * user_project_wrapper
+ *
+ * This wrapper enumerates all of the pins available to the
+ * user for the user project.
+ *
+ * An example user project is provided in this wrapper. The
+ * example should be removed and replaced with the actual
+ * user project.
+ *
+ *-------------------------------------------------------------
+ */
+
+module user_project_wrapper #(
+ parameter IO_PADS = 37,
+ parameter PWR_PADS = 4,
+ parameter BITS = 32
+)(
+ inout vdda1, // User area 1 3.3V supply
+ inout vdda2, // User area 2 3.3V supply
+ inout vssa1, // User area 1 analog ground
+ inout vssa2, // User area 2 analog ground
+ inout vccd1, // User area 1 1.8V supply
+ inout vccd2, // User area 2 1.8v supply
+ inout vssd1, // User area 1 digital ground
+ inout vssd2, // User area 2 digital ground
+
+ // Wishbone Slave ports (WB MI A)
+ input wb_clk_i,
+ input wb_rst_i,
+ input wbs_stb_i,
+ input wbs_cyc_i,
+ input wbs_we_i,
+ input [3:0] wbs_sel_i,
+ input [31:0] wbs_dat_i,
+ input [31:0] wbs_adr_i,
+ output wbs_ack_o,
+ output [31:0] wbs_dat_o,
+
+ // Logic Analyzer Signals
+ input [127:0] la_data_in,
+ output [127:0] la_data_out,
+ input [127:0] la_oen,
+
+ // IOs
+ input [IO_PADS-1:0] io_in,
+ output [IO_PADS-1:0] io_out,
+ output [IO_PADS-1:0] io_oeb,
+
+ // Independent clock (on independent integer divider)
+ input user_clock2
+);
+
+ /*--------------------------------------*/
+ /* User project is instantiated here */
+ /*--------------------------------------*/
+
+ user_proj_example #(
+ .IO_PADS(`MPRJ_IO_PADS),
+ .PWR_PADS(`MPRJ_PWR_PADS)
+ ) mprj (
+ .vdda1(vdda1), // User area 1 3.3V power
+ .vdda2(vdda2), // User area 2 3.3V power
+ .vssa1(vssa1), // User area 1 analog ground
+ .vssa2(vssa2), // User area 2 analog ground
+ .vccd1(vccd1), // User area 1 1.8V power
+ .vccd2(vccd2), // User area 2 1.8V power
+ .vssd1(vssd1), // User area 1 digital ground
+ .vssd2(vssd2), // User area 2 digital ground
+
+ // MGMT core clock and reset
+
+ .wb_clk_i(wb_clk_i),
+ .wb_rst_i(wb_rst_i),
+
+ // MGMT SoC Wishbone Slave
+
+ .wbs_cyc_i(wbs_cyc_i),
+ .wbs_stb_i(wbs_stb_i),
+ .wbs_we_i(wbs_we_i),
+ .wbs_sel_i(wbs_sel_i),
+ .wbs_adr_i(wbs_adr_i),
+ .wbs_dat_i(wbs_dat_i),
+ .wbs_ack_o(wbs_ack_o),
+ .wbs_dat_o(wbs_dat_o),
+
+ // Logic Analyzer
+
+ .la_data_in(la_data_in),
+ .la_data_out(la_data_out),
+ .la_oen (la_oen),
+
+ // IO Pads
+
+ .io_in (io_in),
+ .io_out(io_out),
+ .io_oeb(io_oeb)
+ );
+
+endmodule // user_project_wrapper