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

Subversion Repositories myblaze

[/] [myblaze/] [trunk/] [rtl/] [decoder.py] - Diff between revs 5 and 6

Show entire file | Details | Blame | View Log

Rev 5 Rev 6
Line 6... Line 6...
    Instruction Decoder
    Instruction Decoder
 
 
    :copyright: Copyright (c) 2010 Jian Luo
    :copyright: Copyright (c) 2010 Jian Luo
    :author-email: jian.luo.cn(at_)gmail.com
    :author-email: jian.luo.cn(at_)gmail.com
    :license: LGPL, see LICENSE for details
    :license: LGPL, see LICENSE for details
    :revision: $Id: decoder.py 5 2010-11-21 10:59:30Z rockee $
    :revision: $Id: decoder.py 6 2010-11-21 23:18:44Z rockee $
"""
"""
 
 
from random import randrange
from random import randrange
from myhdl import *
from myhdl import *
from defines import *
from defines import *
from functions import *
from functions import *
from gprf import *
from gprf import *
from debug import *
#from debug import *
 
 
def Decoder(
def Decoder(
        # Inputs
        # Inputs
        clock,
        clock,
        reset,
        reset,
Line 59... Line 59...
        # Write back stage outputs
        # Write back stage outputs
        of_fwd_mem_result,
        of_fwd_mem_result,
        of_fwd_reg_d,
        of_fwd_reg_d,
        of_fwd_reg_write,
        of_fwd_reg_write,
 
 
        # XXX: if __debug__:
        # Ports only for debug
        #of_instruction=False,
        of_instruction=0,
    ):
    ):
    """
    """
    Python System Model of the OF Stage
    Python System Model of the OF Stage
    """
    """
    of_comb_r_has_imm_high = Signal(False)
    of_comb_r_has_imm_high = Signal(False)
Line 176... Line 176...
            #if cfg_reg_fwd_wrb == True:
            #if cfg_reg_fwd_wrb == True:
            of_fwd_mem_result.next = wb_dat_d
            of_fwd_mem_result.next = wb_dat_d
            of_fwd_reg_d.next = mm_reg_d
            of_fwd_reg_d.next = mm_reg_d
            of_fwd_reg_write.next = mm_reg_write
            of_fwd_reg_write.next = mm_reg_write
 
 
        #if __debug__:
 
            #if 0: # DEBUG_VERBOSE:
 
                #print 'OF reged:', of_reg_write, of_reg_d,' ra:', of_reg_a
 
                #print 'OF reged pc:', of_r_program_counter
 
                #print 'OF rd:', mm_reg_write, mm_reg_d, wb_dat_d,
 
                #print ' ra:', imem_data_in[21:16]
 
                #print 'OF pc:', of_comb_program_counter
 
 
 
    @always_comb
    @always_comb
    def regout():
    def regout():
        of_hazard.next = of_r_hazard
        of_hazard.next = of_r_hazard
        of_mem_read.next = of_r_mem_read
        of_mem_read.next = of_r_mem_read
        of_reg_d.next = of_r_reg_d
        of_reg_d.next = of_r_reg_d
        #if __debug__:
        if __debug__:
        #of_instruction.next = of_r_instruction
            of_instruction.next = of_r_instruction
 
 
    @always_comb
    @always_comb
    def comb():
    def comb():
        # XXX intbvs should be explicitly declared
        # XXX intbvs should be explicitly declared
        # Register
        # Register
Line 203... Line 195...
        r_program_counter = intbv(0)[CFG_IMEM_SIZE:]
        r_program_counter = intbv(0)[CFG_IMEM_SIZE:]
        r_program_counter[:] = if_program_counter
        r_program_counter[:] = if_program_counter
        r_immediate_high = intbv(0)[16:]
        r_immediate_high = intbv(0)[16:]
        r_has_imm_high = False
        r_has_imm_high = False
        r_reg_d = intbv(0)[5:]
        r_reg_d = intbv(0)[5:]
        # Local
        # Local Variables
        r_hazard = False
        r_hazard = False
        immediate = intbv(0)[32:]
        immediate = intbv(0)[32:]
        #r_immediate_high = intbv(0)[16:]
 
        immediate_low = intbv(0)[16:]
        immediate_low = intbv(0)[16:]
        instruction = intbv(0)[32:]
        instruction = intbv(0)[32:]
        mem_result = intbv(0)[32:]
        mem_result = intbv(0)[32:]
        opcode = intbv(0)[6:]
        opcode = intbv(0)[6:]
        opgroup = intbv(0)[5:]
        opgroup = intbv(0)[5:]
Line 219... Line 210...
        reg_b = intbv(0)[5:]
        reg_b = intbv(0)[5:]
 
 
        if mm_mem_read:
        if mm_mem_read:
            mem_result[:] = align_mem_load(dmem_data_in, mm_transfer_size,
            mem_result[:] = align_mem_load(dmem_data_in, mm_transfer_size,
                                           mm_alu_result[2:])
                                           mm_alu_result[2:])
            #print 'of: load %x' % mem_result
 
        else:
        else:
            mem_result[:] = mm_alu_result
            mem_result[:] = mm_alu_result
 
 
        wb_dat_d.next = mem_result
        wb_dat_d.next = mem_result
 
 
Line 491... Line 481...
if __name__ == '__main__':
if __name__ == '__main__':
    clock = Signal(False)
    clock = Signal(False)
    reset = Signal(False)
    reset = Signal(False)
    enable = Signal(False)
    enable = Signal(False)
 
 
    dmem_data_in = Signal(intbv(0)[32:])
    dmem_data_in = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    imem_data_in = Signal(intbv(0)[32:])
    imem_data_in = Signal(intbv(0)[CFG_IMEM_WIDTH:])
    if_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
    if_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
    ex_flush_id = Signal(False)
    ex_flush_id = Signal(False)
    mm_alu_result = Signal(intbv(0)[32:])
    mm_alu_result = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    mm_mem_read = Signal(False)
    mm_mem_read = Signal(False)
    mm_reg_d = Signal(intbv(0)[5:])
    mm_reg_d = Signal(intbv(0)[CFG_GPRF_SIZE:])
    mm_reg_write = Signal(False)
    mm_reg_write = Signal(False)
    mm_transfer_size = Signal(transfer_size_type.WORD)
    mm_transfer_size = Signal(transfer_size_type.WORD)
    gprf_dat_a = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    gprf_dat_a = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    gprf_dat_b = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    gprf_dat_b = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    gprf_dat_d = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    gprf_dat_d = Signal(intbv(0)[CFG_DMEM_WIDTH:])
Line 511... Line 501...
    of_branch_cond = Signal(branch_condition.NOP)
    of_branch_cond = Signal(branch_condition.NOP)
    of_carry = Signal(carry_type.C_ZERO)
    of_carry = Signal(carry_type.C_ZERO)
    of_carry_keep = Signal(False)
    of_carry_keep = Signal(False)
    of_delay = Signal(False)
    of_delay = Signal(False)
    of_hazard = Signal(False)
    of_hazard = Signal(False)
    of_immediate = Signal(intbv(0)[32:])
    of_immediate = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    of_mem_read = Signal(False)
    of_mem_read = Signal(False)
    of_mem_write = Signal(False)
    of_mem_write = Signal(False)
    of_operation = Signal(False)
    of_operation = Signal(False)
    of_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
    of_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
    of_reg_a = Signal(intbv(0)[5:])
    of_reg_a = Signal(intbv(0)[CFG_GPRF_SIZE:])
    of_reg_b = Signal(intbv(0)[5:])
    of_reg_b = Signal(intbv(0)[CFG_GPRF_SIZE:])
    of_reg_d = Signal(intbv(0)[5:])
    of_reg_d = Signal(intbv(0)[CFG_GPRF_SIZE:])
    of_reg_write = Signal(False)
    of_reg_write = Signal(False)
    of_transfer_size = Signal(transfer_size_type.WORD)
    of_transfer_size = Signal(transfer_size_type.WORD)
 
    of_fwd_mem_result = Signal(intbv(0)[CFG_DMEM_WIDTH:])
 
    of_fwd_reg_d = Signal(intbv(0)[CFG_GPRF_SIZE:])
 
    of_fwd_reg_write = Signal(False)
 
    if __debug__:
 
        of_instruction = Signal(intbv(0)[CFG_IMEM_WIDTH:])
 
    # End Ports only for debug
 
 
 
 
    kw = dict(
    kw = dict(
        Decoder,
 
        clock=clock,
        clock=clock,
        reset=reset,
        reset=reset,
        enable=enable,
        enable=enable,
        dmem_data_in=dmem_data_in,
        dmem_data_in=dmem_data_in,
        imem_data_in=imem_data_in,
        imem_data_in=imem_data_in,
Line 557... Line 553...
        of_reg_a=of_reg_a,
        of_reg_a=of_reg_a,
        of_reg_b=of_reg_b,
        of_reg_b=of_reg_b,
        of_reg_d=of_reg_d,
        of_reg_d=of_reg_d,
        of_reg_write=of_reg_write,
        of_reg_write=of_reg_write,
        of_transfer_size=of_transfer_size,
        of_transfer_size=of_transfer_size,
 
        of_fwd_mem_result=of_fwd_mem_result,
 
        of_fwd_reg_d=of_fwd_reg_d,
 
        of_fwd_reg_write=of_fwd_reg_write,
 
 
    )
    )
    toVerilog(**kw)
    toVerilog(Decoder, **kw)
    toVHDL(**kw)
    toVHDL(Decoder, **kw)
 
 
 
 
### EOF ###
### EOF ###
# vim:smarttab:sts=4:ts=4:sw=4:et:ai:tw=80:
# vim:smarttab:sts=4:ts=4:sw=4:et:ai:tw=80:
 
 

powered by: WebSVN 2.1.0

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