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

Subversion Repositories minirisc

[/] [minirisc/] [trunk/] [verilog/] [core/] [presclr_wdt.v] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 lampret
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  Mini-RISC-1                                                ////
4
////  Prescaler and Wachdog Counter                              ////
5
////                                                             ////
6 5 rudi
////                                                             ////
7 2 lampret
////  Author: Rudolf Usselmann                                   ////
8 5 rudi
////          rudi@asics.ws                                      ////
9 2 lampret
////                                                             ////
10 5 rudi
////                                                             ////
11
////  D/L from: http://www.opencores.org/cores/minirisc/         ////
12
////                                                             ////
13 2 lampret
/////////////////////////////////////////////////////////////////////
14
////                                                             ////
15 5 rudi
//// Copyright (C) 2000-2002 Rudolf Usselmann                    ////
16
////                         www.asics.ws                        ////
17
////                         rudi@asics.ws                       ////
18 2 lampret
////                                                             ////
19
//// This source file may be used and distributed without        ////
20
//// restriction provided that this copyright statement is not   ////
21
//// removed from the file and that any derivative work contains ////
22
//// the original copyright notice and the associated disclaimer.////
23
////                                                             ////
24 5 rudi
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
25
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
26
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
27
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
28
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
29
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
30
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
31
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
32
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
33
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
34
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
35
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
36
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
37 2 lampret
////                                                             ////
38
/////////////////////////////////////////////////////////////////////
39
 
40 5 rudi
//  CVS Log
41
//
42
//  $Id: presclr_wdt.v,v 1.2 2002-09-27 15:35:40 rudi Exp $
43
//
44
//  $Date: 2002-09-27 15:35:40 $
45
//  $Revision: 1.2 $
46
//  $Author: rudi $
47
//  $Locker:  $
48
//  $State: Exp $
49
//
50
// Change History:
51
//               $Log: not supported by cvs2svn $
52
//
53
//
54
//
55
//
56
//
57
//
58
//
59
//
60
//
61
//
62
 
63
 
64 2 lampret
`timescale 1ns / 10ps
65
 
66
// Prescaler and Wachdog Counter
67
module presclr_wdt(clk, rst, tcki, option, tmr0_we, tmr0_cnt_en, wdt_en, wdt_clr, wdt_to);
68
input           clk;
69
input           rst;
70
input           tcki;
71
input   [5:0]    option;
72
input           tmr0_we;
73
output          tmr0_cnt_en;
74
input           wdt_en, wdt_clr;
75
output          wdt_to;
76
 
77
 
78
reg     [7:0]    prescaler;
79
reg     [7:0]    wdt;
80
reg             tmr0_cnt_en;
81
reg             tcki_r;
82
reg             wdt_to;
83
wire            tose;
84
wire            tosc;
85
wire            psa;
86
wire    [2:0]    ps;
87
wire            tcki_a, tcki_b;
88
wire            presclr_ce;
89
wire            prsclr_clr;
90
wire            wdt_to_direct;
91
reg             presclr_out, presclr_out_r1;
92 5 rudi
reg             presclr_out_next;
93 2 lampret
wire    [7:0]    presclr_plus_1, wdt_plus_1;
94
wire    [7:0]    prescaler_next, prescaler_next1;
95
wire    [7:0]    wdt_next, wdt_next1;
96
 
97
// Inputs select
98
assign  ps = option[2:0];
99
assign  psa = option[3];
100
assign  tose = option[4];
101
assign  tosc = option[5];
102
 
103
always @(posedge clk)
104
        tcki_r <= #1 tcki;
105
 
106
assign  tcki_a = tose ^ tcki_r;
107
assign  tcki_b = tosc ? tcki_a : 1'b1;
108
assign  presclr_ce = psa ? wdt_to_direct : tcki_b;
109
 
110
always @(posedge clk)
111
        tmr0_cnt_en <= #1 psa ? tcki_b : presclr_out;
112
 
113
// Prescaler
114
assign  prsclr_clr = psa ? wdt_clr : tmr0_we;
115
 
116
always @(posedge clk)
117 5 rudi
        if(rst | prsclr_clr)    prescaler <= #1 8'h00;
118
        else
119
        if(presclr_ce)          prescaler <= #1 prescaler + 8'h01;
120 2 lampret
 
121 5 rudi
always @(ps or prescaler)
122
        case(ps)
123
           3'd0:        presclr_out_next = prescaler[0];
124
           3'd1:        presclr_out_next = prescaler[1];
125
           3'd2:        presclr_out_next = prescaler[2];
126
           3'd3:        presclr_out_next = prescaler[3];
127
           3'd4:        presclr_out_next = prescaler[4];
128
           3'd5:        presclr_out_next = prescaler[5];
129
           3'd6:        presclr_out_next = prescaler[6];
130
           3'd7:        presclr_out_next = prescaler[7];
131
        endcase
132 2 lampret
 
133
always @(posedge clk)
134
        presclr_out_r1 <= #1 presclr_out_next;
135
 
136
always @(posedge clk)   // Edge detector for prescaler output
137
        presclr_out <= #1 presclr_out_next & ~presclr_out_r1 & ~prsclr_clr;
138
 
139
// Wachdog timer
140
always @(posedge clk)
141
        wdt_to <= #1 psa ? presclr_out : wdt_to_direct;
142
 
143
always @(posedge clk)
144 5 rudi
        if(rst | wdt_clr)       wdt <= #1 8'h00;
145
        else
146
        if(wdt_en)              wdt <= #1 wdt + 8'h01;  // wdt_plus_1;
147 2 lampret
 
148
assign  wdt_to_direct = (wdt == 8'hff);
149
 
150
endmodule

powered by: WebSVN 2.1.0

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