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

Subversion Repositories myblaze

[/] [myblaze/] [trunk/] [rtl/] [fetch.py] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 rockee
# -*- coding: utf-8 -*-
2
"""
3
    fetch.py
4
    ========
5
 
6
    Fetch Unit
7
 
8 5 rockee
    :copyright: Copyright (c) 2010 Jian Luo
9
    :author-email: jian.luo.cn(at_)gmail.com
10
    :license: LGPL, see LICENSE for details
11 2 rockee
    :revision: $Id: fetch.py 6 2010-11-21 23:18:44Z rockee $
12
"""
13
 
14
from myhdl import *
15
from defines import *
16
from functions import *
17
 
18
def FetchUnit(
19
        clock,
20
        reset,
21
        enable,
22
        of_hazard,
23
        ex_alu_result,
24
        ex_branch,
25
        if_program_counter,
26
        imem_addr_out,
27
        imem_ena_out,
28
        ):
29
    """
30
    """
31
    MAX_IMEM_ADDR = 2**CFG_IMEM_SIZE
32
    if_comb_r_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
33
    if_r_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
34
 
35
    @always_comb
36
    def comb():
37
        program_counter = intbv(0)[CFG_IMEM_SIZE:]
38
        if reset:
39
            program_counter[:] = 0
40
        elif of_hazard:
41
            program_counter[:] = if_r_program_counter
42
        elif ex_branch:
43
            program_counter[:] = ex_alu_result[CFG_IMEM_SIZE:]
44
        else:
45
            #program_counter[:] = ((if_r_program_counter[CFG_IMEM_SIZE:2]+1)
46
                                    #<< 2) % MAX_IMEM_ADDR
47
            program_counter[:] = (if_r_program_counter+4) % MAX_IMEM_ADDR
48
        if_comb_r_program_counter.next = program_counter
49
        #if ex_branch:
50
            #program_counter[:] = ex_alu_result[CFG_IMEM_SIZE:]
51
        #else:
52
            #program_counter[:] = if_r_program_counter
53
            ###program_counter[:] = ((if_r_program_counter[CFG_IMEM_SIZE:2]+1)
54
                                    ###<< 2) % MAX_IMEM_ADDR
55
            ##program_counter[:] = (if_r_program_counter+4) % MAX_IMEM_ADDR
56
        #if_program_counter.next = program_counter
57
        #imem_addr_out.next = program_counter
58
        #if of_hazard:
59
            #if_comb_r_program_counter.next = program_counter
60
        #else:
61
            #if_comb_r_program_counter.next = (program_counter+4) % MAX_IMEM_ADDR
62
 
63
    @always(clock.posedge)
64
    def seq():
65
        if reset:
66
            if_r_program_counter.next = 0
67
        elif enable:
68
            if_r_program_counter.next = if_comb_r_program_counter
69
 
70
    @always_comb
71
    def regout():
72
        imem_ena_out.next = enable
73
        imem_addr_out.next = if_comb_r_program_counter
74
        #if __debug__:
75
            #imem_addr_out.next = if_r_program_counter
76
 
77
        if_program_counter.next = if_r_program_counter
78
 
79
    return instances()
80
 
81
if __name__ == '__main__':
82
    clock = Signal(False)
83
    reset = Signal(False)
84
    enable = Signal(False)
85
    imem_addr_out = Signal(intbv(0)[CFG_IMEM_SIZE:])
86
    imem_ena_out = Signal(False)
87
    if_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
88
    of_hazard = Signal(False)
89
    ex_alu_result = Signal(intbv(0)[32:])
90
    ex_branch = Signal(False)
91
 
92
    args = [
93
        FetchUnit,
94
        clock,
95
        reset,
96
        enable,
97
        of_hazard,
98
        ex_alu_result,
99
        ex_branch,
100
        if_program_counter,
101
        imem_addr_out,
102
        imem_ena_out,
103
    ]
104
    toVHDL(*args)
105
    toVerilog(*args)
106
 
107
### EOF ###
108
# vim:smarttab:sts=4:ts=4:sw=4:et:ai:tw=80:
109
 

powered by: WebSVN 2.1.0

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