mirror of
https://github.com/olofk/serv.git
synced 2026-01-15 15:56:04 +00:00
177 lines
4.2 KiB
Verilog
177 lines
4.2 KiB
Verilog
`default_nettype none
|
|
module serv_wrapper
|
|
(
|
|
input wire i_clk,
|
|
output wire q);
|
|
|
|
parameter memfile = "zephyr_hello.hex";
|
|
parameter memsize = 8192;
|
|
parameter PLL = "NONE";
|
|
|
|
wire wb_clk;
|
|
wire wb_rst;
|
|
|
|
serv_clock_gen #(.PLL (PLL))
|
|
clock_gen
|
|
(.i_clk (i_clk),
|
|
.o_clk (wb_clk),
|
|
.o_rst (wb_rst));
|
|
|
|
wire timer_irq;
|
|
|
|
wire [31:0] wb_cpu_ibus_adr;
|
|
wire wb_cpu_ibus_cyc;
|
|
wire [31:0] wb_cpu_ibus_rdt;
|
|
wire wb_cpu_ibus_ack;
|
|
|
|
wire [31:0] wb_cpu_dbus_adr;
|
|
wire [31:0] wb_cpu_dbus_dat;
|
|
wire [3:0] wb_cpu_dbus_sel;
|
|
wire wb_cpu_dbus_we;
|
|
wire wb_cpu_dbus_cyc;
|
|
wire [31:0] wb_cpu_dbus_rdt;
|
|
wire wb_cpu_dbus_ack;
|
|
|
|
wire [31:0] wb_cpu_adr;
|
|
wire [31:0] wb_cpu_dat;
|
|
wire [3:0] wb_cpu_sel;
|
|
wire wb_cpu_we;
|
|
wire wb_cpu_cyc;
|
|
wire [31:0] wb_cpu_rdt;
|
|
wire wb_cpu_ack;
|
|
|
|
wire [31:0] wb_mem_adr;
|
|
wire [31:0] wb_mem_dat;
|
|
wire [3:0] wb_mem_sel;
|
|
wire wb_mem_we;
|
|
wire wb_mem_cyc;
|
|
wire [31:0] wb_mem_rdt;
|
|
wire wb_gpio_dat;
|
|
wire wb_gpio_cyc;
|
|
wire [31:0] wb_timer_dat;
|
|
wire wb_timer_we;
|
|
wire wb_timer_cyc;
|
|
wire [31:0] wb_timer_rdt;
|
|
|
|
serv_arbiter serv_arbiter
|
|
(
|
|
.i_ibus_active (wb_cpu_ibus_cyc),
|
|
.i_wb_cpu_dbus_adr (wb_cpu_dbus_adr),
|
|
.i_wb_cpu_dbus_dat (wb_cpu_dbus_dat),
|
|
.i_wb_cpu_dbus_sel (wb_cpu_dbus_sel),
|
|
.i_wb_cpu_dbus_we (wb_cpu_dbus_we ),
|
|
.i_wb_cpu_dbus_cyc (wb_cpu_dbus_cyc),
|
|
.o_wb_cpu_dbus_rdt (wb_cpu_dbus_rdt),
|
|
.o_wb_cpu_dbus_ack (wb_cpu_dbus_ack),
|
|
|
|
.i_wb_cpu_ibus_adr (wb_cpu_ibus_adr),
|
|
.i_wb_cpu_ibus_cyc (wb_cpu_ibus_cyc),
|
|
.o_wb_cpu_ibus_rdt (wb_cpu_ibus_rdt),
|
|
.o_wb_cpu_ibus_ack (wb_cpu_ibus_ack),
|
|
|
|
.o_wb_cpu_adr (wb_cpu_adr),
|
|
.o_wb_cpu_dat (wb_cpu_dat),
|
|
.o_wb_cpu_sel (wb_cpu_sel),
|
|
.o_wb_cpu_we (wb_cpu_we ),
|
|
.o_wb_cpu_cyc (wb_cpu_cyc),
|
|
.i_wb_cpu_rdt (wb_cpu_rdt),
|
|
.i_wb_cpu_ack (wb_cpu_ack));
|
|
|
|
|
|
`ifdef VERILATOR
|
|
parameter sim = 1;
|
|
`else
|
|
parameter sim = 0;
|
|
`endif
|
|
serv_mux #(sim) serv_mux
|
|
(
|
|
.i_clk (wb_clk),
|
|
.i_rst (wb_rst),
|
|
.i_wb_cpu_adr (wb_cpu_adr),
|
|
.i_wb_cpu_dat (wb_cpu_dat),
|
|
.i_wb_cpu_sel (wb_cpu_sel),
|
|
.i_wb_cpu_we (wb_cpu_we),
|
|
.i_wb_cpu_cyc (wb_cpu_cyc),
|
|
.o_wb_cpu_rdt (wb_cpu_rdt),
|
|
.o_wb_cpu_ack (wb_cpu_ack),
|
|
|
|
.o_wb_mem_adr (wb_mem_adr),
|
|
.o_wb_mem_dat (wb_mem_dat),
|
|
.o_wb_mem_sel (wb_mem_sel),
|
|
.o_wb_mem_we (wb_mem_we),
|
|
.o_wb_mem_cyc (wb_mem_cyc),
|
|
.i_wb_mem_rdt (wb_mem_rdt),
|
|
|
|
.o_wb_gpio_dat (wb_gpio_dat),
|
|
.o_wb_gpio_cyc (wb_gpio_cyc),
|
|
|
|
.o_wb_timer_dat (wb_timer_dat),
|
|
.o_wb_timer_we (wb_timer_we),
|
|
.o_wb_timer_cyc (wb_timer_cyc),
|
|
.i_wb_timer_rdt (wb_timer_rdt));
|
|
|
|
`ifndef SYNTHESIS
|
|
//synthesis translate_off
|
|
reg [1023:0] firmware_file;
|
|
initial
|
|
if ($value$plusargs("firmware=%s", firmware_file)) begin
|
|
$display("Loading RAM from %0s", firmware_file);
|
|
$readmemh(firmware_file, ram.ram0.mem);
|
|
end
|
|
//synthesis translate_on
|
|
`endif
|
|
|
|
wb_ram
|
|
#(
|
|
`ifdef SYNTHESIS
|
|
.memfile (memfile),
|
|
`endif
|
|
.depth (memsize))
|
|
ram
|
|
(// Wishbone interface
|
|
.wb_clk_i (wb_clk),
|
|
.wb_adr_i (wb_mem_adr[$clog2(memsize)-1:0]),
|
|
.wb_cyc_i (wb_mem_cyc),
|
|
.wb_we_i (wb_mem_we) ,
|
|
.wb_sel_i (wb_mem_sel),
|
|
.wb_dat_i (wb_mem_dat),
|
|
.wb_dat_o (wb_mem_rdt));
|
|
|
|
riscv_timer riscv_timer
|
|
(.i_clk (wb_clk),
|
|
.i_rst (wb_rst),
|
|
.o_irq (timer_irq),
|
|
.i_wb_cyc (wb_timer_cyc),
|
|
.i_wb_we (wb_timer_we) ,
|
|
.i_wb_dat (wb_timer_dat),
|
|
.o_wb_dat (wb_timer_rdt));
|
|
|
|
wb_gpio gpio
|
|
(.i_wb_clk (wb_clk),
|
|
.i_wb_dat (wb_gpio_dat),
|
|
.i_wb_cyc (wb_gpio_cyc),
|
|
.o_gpio (q));
|
|
|
|
serv_top
|
|
#(.RESET_PC (32'h0000_0000))
|
|
cpu
|
|
(
|
|
.clk (wb_clk),
|
|
.i_rst (wb_rst),
|
|
.i_timer_irq (timer_irq),
|
|
|
|
.o_ibus_adr (wb_cpu_ibus_adr),
|
|
.o_ibus_cyc (wb_cpu_ibus_cyc),
|
|
.i_ibus_rdt (wb_cpu_ibus_rdt),
|
|
.i_ibus_ack (wb_cpu_ibus_ack),
|
|
|
|
.o_dbus_adr (wb_cpu_dbus_adr),
|
|
.o_dbus_dat (wb_cpu_dbus_dat),
|
|
.o_dbus_sel (wb_cpu_dbus_sel),
|
|
.o_dbus_we (wb_cpu_dbus_we),
|
|
.o_dbus_cyc (wb_cpu_dbus_cyc),
|
|
.i_dbus_rdt (wb_cpu_dbus_rdt),
|
|
.i_dbus_ack (wb_cpu_dbus_ack));
|
|
|
|
endmodule
|