OpenCores
URL https://opencores.org/ocsvn/versatile_io/versatile_io/trunk

Subversion Repositories versatile_io

[/] [versatile_io/] [trunk/] [rtl/] [verilog/] [top/] [versatile_io_top.v] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 unneback
`include "include/versatile_io_defines.v"
2
`ifdef UART0
3
`include "uart16550_ip.v"
4
`endif
5
module versatile_io (
6
    input [31:0] wbs_dat_i,
7
    input [31:0] wbs_adr_i,
8
    input [3:0] wbs_sel_i,
9
    input wbs_we_i, wbs_stb_i, wbs_cyc_i,
10
    output [31:0] wbs_dat_o,
11
    output wbs_ack_o;
12
`ifdef B4
13
    output wbs_stall_o,
14
`endif
15
`include "versatile_io_module.v"
16
`ifdef UART0
17
    output uart0_irq,
18
`endif
19
    input wbs_clk, wbs_rst,
20
    input clk, rst
21
);
22
 
23
function [7:0] tobyte;
24
input [3:0] sel_i;
25
input [31:0] dat_i;
26
begin
27
    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]);
28
endfunction
29
 
30
function [31:0] toword;
31
input [7:0] dat_i;
32
begin
33
    toword = {4{dat_i}};
34
endfunction
35
 
36
function [31:0] mask;
37
input [31:0] dat_i;
38
input sel;
39
begin
40
    mask = {32{sel}} & dat_i;
41
end
42
 
43
function cs;
44
input [31:0] adr;
45
input [31:0] mem_map;
46
input [4:0] mem_map_hi;
47
input [4:0] mem_map_lo;
48
begin
49
    cs = adr[mem_map_hi:mem_map_lo] == mem_map[mem_map_hi:mem_map_lo];
50
endfunction
51
 
52
`ifdef UART0
53
wire uart0_cs = cs( wbs_adr_i, `UART0_BASE, `UART0_MEM_MAP_HI, `UART0_MEM_MAP_LO);
54
wire [7:0] uart0_temp;
55
wire uart0_ack_o;
56
uart_top uart0  (
57
    .wb_clk_i(wbs_clk), wb_rst_i(wbs_rst),
58
    // Wishbone signals
59
    .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),
60
    .int_o(uart0_irq), // interrupt request
61
    // UART     signals
62
    // serial input/output
63
    .stx_pad_o(uart0_tx_pad_i), .srx_pad_i(uart0_rx_pad_i),
64
    // modem signals
65
    .rts_pad_o(), .cts_pad_i(1'b0), .dtr_pad_o(), .dsr_pad_i(1'b0), .ri_pad_i(1'b0), .dcd_pad_i(1'b0) );
66
assign uart0_dat_o = mask( toword(uart0_temp), uart0_ack_o);
67
`else
68
assign uart0_dat_o = 32'h0;
69
assign uart0_ack_o = 1'b0;
70
`endif
71
 
72
assign wbs_dat_o = uart0_dat_o;
73
assign wbs_ack_o = uart0_ack_o;
74
`ifdef WB4
75
assign wbs_stall_o = 1'b0;
76
`endif
77
 
78
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.