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

Subversion Repositories mips789

[/] [mips789/] [branches/] [avendor/] [rtl/] [verilog/] [mips_dvc.v] - Blame information for rev 15

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

Line No. Rev Author Line
1 10 mcupro
`include "include.h"
2
 
3
module mips_dvc (
4
 
5
        input [31:0]din,
6
        input clk,
7
        input rst,
8
        input [31:0]addr ,
9
        input [3:0]mem_ctl,
10
 
11
        output reg [31:0]dout ,
12
 
13
        output reg[7:0] lcd_data,
14
        output lcd_rs,
15
        output lcd_rw,
16
        output lcd_en,
17
 
18
        input  ser_rxd,
19
        output ser_txd,
20
 
21
        output [6:0]seg7led1,
22
        output [6:0]seg7led2     ,
23
        output led1,
24
        output led2               ,
25
        input key1,
26
        input key2 ,
27
 
28
        output reg[31:0]irq_addr_o,  //not registed
29
        output irq_req_o
30
    );
31
 
32
    reg r_key1;
33
    reg r_key2;
34
 
35
    reg rr_key1;
36
    reg rr_key2;
37
 
38
    always @(posedge clk)
39
    begin
40
        r_key1<=key1;
41
        r_key2<=key2;
42
    end
43
 
44
    always @(posedge clk)
45
    begin
46
        rr_key1<=r_key1;
47
        rr_key2<=r_key2;
48
    end
49
 
50
 
51
    wire sv_byte = (mem_ctl==`DMEM_SB);
52
    wire ld_byte = mem_ctl==`DMEM_LBS||mem_ctl==`DMEM_LBU;
53
 
54
    wire sv_wd = (mem_ctl==`DMEM_SW);
55
    wire ld_wd = (mem_ctl==`DMEM_LW);
56
 
57
 
58
    wire wr_uartdata   =          addr==`UART_DATA_ADDR         &&              sv_byte;
59
    wire wr_lcddata    =          addr==`LCD_DATA_ADDR          &&              sv_byte;
60
    wire rd_uartdata   =          addr==`UART_DATA_ADDR         &&              ld_byte;
61
    wire rd_status         =      addr==`STATUS_ADDR            &&              ld_wd;
62
    wire wr_cmd        =          addr==`CMD_ADDR                       &&              sv_wd;
63
    wire rd_cmd        =          addr==`CMD_ADDR                       &&              ld_wd;
64
    wire wr_seg7       =          addr==`SEG7LED_ADDR           &&              sv_byte  ;
65
 
66
    wire set_tmr_addr  = addr==`TMR_IRQ_ADDR    &&     sv_wd;
67
    wire set_key1_addr = addr==`KEY1_IRQ_ADDR   &&     sv_wd;
68
    wire set_key2_addr = addr==`KEY2_IRQ_ADDR   &&     sv_wd;
69
    wire wr_tmr_data   = addr==`TMR_DATA_ADDR   &&     sv_wd;
70
    wire rd_tmr_data   = addr==`TMR_DATA_ADDR   &&     ld_wd;
71
 
72
    wire w_tmr_req;
73
    wire [31:0]w_tmr_data;
74
 
75
    reg [31:0] tmr_addr;
76
    reg [31:0] key1_addr;
77
    reg [31:0] key2_addr;
78
 
79
    reg [31:0] cmd ;
80
 
81
    // wire w_txd_ld            =               cmd[0]  ;
82
    wire w_rxd_ft               =               cmd[1]  ;
83
 
84
    assign lcd_rs               =               cmd[2]  ;
85
    assign lcd_rw               =               cmd[3]  ;
86
    assign lcd_en               =               cmd[4]  ;
87
 
88
    assign led1                 =               cmd[5]  ;
89
    assign led2                 =               cmd[6]  ;
90
 
91
    wire  tmr_clr               =       cmd[7]  ;
92
    wire  tmr_en                =               cmd[8]  ;
93
 
94
    reg [7:0] seg7data;
95
    wire [7:0] uart_dout;
96
    wire w_txd_busy;
97
    wire w_rx_rdy;
98
 
99
    always@(posedge clk )
100 15 mcupro
        if (~rst)
101 10 mcupro
        begin
102
            dout<=0;
103
        end
104
        else
105
        begin
106
            if (rd_status) dout<={28'b0,/*added here*/w_rx_rdy,w_txd_busy,rr_key1,rr_key2};else
107
            if (rd_cmd)dout<=cmd;else
108
            if (rd_uartdata)dout<={24'b0,uart_dout};else
109
            if ( rd_tmr_data )dout<=w_tmr_data; else
110
            dout<=0;
111
        end
112
 
113
    always @(posedge clk)
114 15 mcupro
        if (~rst)
115 10 mcupro
        begin
116
            cmd<=0;
117
            seg7data<=0;
118
            tmr_addr<=32'BX      ;
119
            key1_addr<=32'BX;
120
            key2_addr<=32'BX;
121
        end
122
        else
123
        begin
124
            if (wr_cmd)   cmd<=din;
125
            if (wr_seg7) seg7data<=din[7:0];
126
            if (wr_lcddata)        lcd_data<=din[7:0];
127
 
128
            if (set_tmr_addr)tmr_addr<=din;
129
            if (set_key1_addr)key1_addr<=din;
130
            if (set_key2_addr)key2_addr<=din;
131
 
132
        end
133
 
134
    uart0 iuart0(
135
 
136
              .clk(clk),
137
              .rst(rst),
138
              .ser_rxd(ser_rxd),
139
              .ser_txd(ser_txd),
140
 
141
              .rxd_ft(w_rxd_ft),
142
              .txd_ld(wr_uartdata),
143
 
144
              .din(din[7:0]),
145
 
146
              .rxd_rdy(w_rx_rdy),
147
              .txd_busy(w_txd_busy),
148
 
149
              .dout(uart_dout)
150
          ) ;
151
 
152
    seg7led_cv iseg7_cv (
153
                   .data(seg7data),
154
                   .seg7led1(seg7led1),
155
                   .seg7led2(seg7led2)
156
               );
157
 
158
    tmr0 mips_tmr0(
159
             .clk(clk),
160
             .clr( tmr_clr),
161
             .din(din) ,
162
             .ld(wr_tmr_data),
163
             .tmr_en(tmr_en),
164
             .tmr_req(w_tmr_req),
165
             .cntr_o(w_tmr_data)
166
         );
167
 
168
 
169
    //interrupt control
170
    wire tmr_irq_bit  =       cmd[31] ;
171
    wire key1_irq_bit =       cmd[30] ;
172
    wire key2_irq_bit =       cmd[29] ;
173
 
174
    wire tmr_req_do =   w_tmr_req & tmr_irq_bit;
175
    wire key1_req_do = rr_key1 & key1_irq_bit;
176
    wire key2_req_do = rr_key2 & key2_irq_bit;
177
 
178
    assign irq_req_o = 0;//tmr_req_do;
179
 
180
    always @(*)
181
        if       (tmr_req_do)         irq_addr_o = tmr_addr;else
182
    if (key1_req_do)     irq_addr_o = key1_addr;else
183
    if (key2_req_do)      irq_addr_o = key2_addr ;
184
    else                      irq_addr_o = 0;
185
 
186
endmodule

powered by: WebSVN 2.1.0

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