Line 6... |
Line 6... |
input [31:0] wbs_dat_i,
|
input [31:0] wbs_dat_i,
|
input [31:0] wbs_adr_i,
|
input [31:0] wbs_adr_i,
|
input [3:0] wbs_sel_i,
|
input [3:0] wbs_sel_i,
|
input wbs_we_i, wbs_stb_i, wbs_cyc_i,
|
input wbs_we_i, wbs_stb_i, wbs_cyc_i,
|
output [31:0] wbs_dat_o,
|
output [31:0] wbs_dat_o,
|
output wbs_ack_o;
|
output wbs_ack_o,
|
`ifdef B4
|
`ifdef B4
|
output wbs_stall_o,
|
output wbs_stall_o,
|
`endif
|
`endif
|
`include "versatile_io_module.v"
|
`include "versatile_io_module.v"
|
`ifdef UART0
|
`ifdef UART0
|
Line 18... |
Line 18... |
`endif
|
`endif
|
input wbs_clk, wbs_rst,
|
input wbs_clk, wbs_rst,
|
input clk, rst
|
input clk, rst
|
);
|
);
|
|
|
|
`ifdef UART0
|
|
parameter uart0_mem_map_hi = `UART0_MEM_MAP_HI;
|
|
parameter uart0_mem_map_lo = `UART0_MEM_MAP_LO;
|
|
parameter [31:0] uart0_base_adr = `UART0_BASE_ADR;
|
|
`endif
|
function [7:0] tobyte;
|
function [7:0] tobyte;
|
input [3:0] sel_i;
|
input [3:0] sel_i;
|
input [31:0] dat_i;
|
input [31:0] dat_i;
|
begin
|
begin
|
tobyte = ({8{sel_i[3]}} & dat_i[31:24]) | ({8{sel_i[2]}} & dat_i[23:16]) | ({8{sel_i[1]}} & dat_i[15:8]) | ({8{sel_i[0]}} & dat_i[7:0]);
|
tobyte = ({8{sel_i[3]}} & dat_i[31:24]) | ({8{sel_i[2]}} & dat_i[23:16]) | ({8{sel_i[1]}} & dat_i[15:8]) | ({8{sel_i[0]}} & dat_i[7:0]);
|
|
end
|
endfunction
|
endfunction
|
|
|
function [31:0] toword;
|
function [31:0] toword;
|
input [7:0] dat_i;
|
input [7:0] dat_i;
|
begin
|
begin
|
toword = {4{dat_i}};
|
toword = {4{dat_i}};
|
|
end
|
endfunction
|
endfunction
|
|
|
function [31:0] mask;
|
function [31:0] mask;
|
input [31:0] dat_i;
|
input [31:0] dat_i;
|
input sel;
|
input sel;
|
begin
|
begin
|
mask = {32{sel}} & dat_i;
|
mask = {32{sel}} & dat_i;
|
end
|
end
|
|
|
function cs;
|
|
input [31:0] adr;
|
|
input [31:0] mem_map;
|
|
input [4:0] mem_map_hi;
|
|
input [4:0] mem_map_lo;
|
|
begin
|
|
cs = adr[mem_map_hi:mem_map_lo] == mem_map[mem_map_hi:mem_map_lo];
|
|
endfunction
|
endfunction
|
|
|
`ifdef UART0
|
`ifdef UART0
|
wire uart0_cs = cs( wbs_adr_i, `UART0_BASE, `UART0_MEM_MAP_HI, `UART0_MEM_MAP_LO);
|
wire uart0_cs;
|
|
assign uart0_cs = wbs_adr_i[uart0_mem_map_hi:uart0_mem_map_lo] == uart0_base_adr[uart0_mem_map_hi:uart0_mem_map_lo];
|
wire [7:0] uart0_temp;
|
wire [7:0] uart0_temp;
|
wire uart0_ack_o;
|
wire uart0_ack_o;
|
uart_top uart0 (
|
uart_top uart0 (
|
.wb_clk_i(wbs_clk), wb_rst_i(wbs_rst),
|
.wb_clk_i(wbs_clk), .wb_rst_i(wbs_rst),
|
// Wishbone signals
|
// Wishbone signals
|
.wb_adr_i(wbs_adr_i[2:0]), .wb_dat_i(tobyte(wbs_sel_i,wbs_dat_i)), .wb_dat_o(uart0_temp), .wb_we_i(wbs_we_i), .wb_stb_i(wbs_stb_i), .wb_cyc_i(wbs_cyc_i & uart0_cs), .wb_ack_o(uart0_ack_o), .wb_sel_i(4'b0),
|
.wb_adr_i(wbs_adr_i[2:0]), .wb_dat_i(tobyte(wbs_sel_i,wbs_dat_i)), .wb_dat_o(uart0_temp), .wb_we_i(wbs_we_i), .wb_stb_i(wbs_stb_i), .wb_cyc_i(wbs_cyc_i & uart0_cs), .wb_ack_o(uart0_ack_o), .wb_sel_i(4'b0),
|
.int_o(uart0_irq), // interrupt request
|
.int_o(uart0_irq), // interrupt request
|
// UART signals
|
// UART signals
|
// serial input/output
|
// serial input/output
|