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

Subversion Repositories myblaze

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

Show entire file | Details | Blame | View Log

Rev 5 Rev 6
Line 6... Line 6...
    MyBlaze Core, top level entity
    MyBlaze Core, top level entity
 
 
    :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: core.py 5 2010-11-21 10:59:30Z rockee $
    :revision: $Id: core.py 6 2010-11-21 23:18:44Z rockee $
"""
"""
 
 
from myhdl import *
from myhdl import *
from defines import *
from defines import *
from functions import *
from functions import *
Line 33... Line 33...
        dmem_ena_out,
        dmem_ena_out,
        imem_data_in,
        imem_data_in,
        imem_addr_out,
        imem_addr_out,
        imem_ena_out,
        imem_ena_out,
 
 
        # if __debug__:
        # Ports only for debug
        #debug_if_program_counter,
        debug_if_program_counter=0,
 
 
        #debug_of_alu_op,
        debug_of_alu_op=0,
        #debug_of_alu_src_a,
        debug_of_alu_src_a=0,
        #debug_of_alu_src_b,
        debug_of_alu_src_b=0,
        #debug_of_branch_cond,
        debug_of_branch_cond=0,
        #debug_of_carry,
        debug_of_carry=0,
        #debug_of_carry_keep,
        debug_of_carry_keep=0,
        #debug_of_delay,
        debug_of_delay=0,
        #debug_of_hazard,
        debug_of_hazard=0,
        #debug_of_immediate,
        debug_of_immediate=0,
        #debug_of_instruction,
        debug_of_instruction=0,
        #debug_of_mem_read,
        debug_of_mem_read=0,
        #debug_of_mem_write,
        debug_of_mem_write=0,
        #debug_of_operation,
        debug_of_operation=0,
        #debug_of_program_counter,
        debug_of_program_counter=0,
        #debug_of_reg_a,
        debug_of_reg_a=0,
        #debug_of_reg_b,
        debug_of_reg_b=0,
        #debug_of_reg_d,
        debug_of_reg_d=0,
        #debug_of_reg_write,
        debug_of_reg_write=0,
        #debug_of_transfer_size,
        debug_of_transfer_size=0,
 
 
        #debug_of_fwd_mem_result,
        debug_of_fwd_mem_result=0,
        #debug_of_fwd_reg_d,
        debug_of_fwd_reg_d=0,
        #debug_of_fwd_reg_write,
        debug_of_fwd_reg_write=0,
 
 
        #debug_gprf_dat_a,
        debug_gprf_dat_a=0,
        #debug_gprf_dat_b,
        debug_gprf_dat_b=0,
        #debug_gprf_dat_d,
        debug_gprf_dat_d=0,
 
 
        #debug_ex_alu_result,
        debug_ex_alu_result=0,
        #debug_ex_reg_d,
        debug_ex_reg_d=0,
        #debug_ex_reg_write,
        debug_ex_reg_write=0,
 
 
        #debug_ex_branch,
        debug_ex_branch=0,
        #debug_ex_dat_d,
        debug_ex_dat_d=0,
        #debug_ex_flush_id,
        debug_ex_flush_id=0,
        #debug_ex_mem_read,
        debug_ex_mem_read=0,
        #debug_ex_mem_write,
        debug_ex_mem_write=0,
        #debug_ex_program_counter,
        debug_ex_program_counter=0,
        #debug_ex_transfer_size,
        debug_ex_transfer_size=0,
 
 
        #debug_ex_dat_a,
        debug_ex_dat_a=0,
        #debug_ex_dat_b,
        debug_ex_dat_b=0,
        #debug_ex_instruction,
        debug_ex_instruction=0,
        #debug_ex_reg_a,
        debug_ex_reg_a=0,
        #debug_ex_reg_b,
        debug_ex_reg_b=0,
 
 
        #debug_mm_alu_result,
        debug_mm_alu_result=0,
        #debug_mm_mem_read,
        debug_mm_mem_read=0,
        #debug_mm_reg_d,
        debug_mm_reg_d=0,
        #debug_mm_reg_write,
        debug_mm_reg_write=0,
        #debug_mm_transfer_size,
        debug_mm_transfer_size=0,
 
 
 
        DEBUG=True,
        ):
        ):
    """
    """
    """
    """
    #of_instruction = Signal(False)
    # Ports only for debug
    #if __debug__:
    of_instruction = 0
        #of_instruction = Signal(intbv(0)[CFG_IMEM_WIDTH:])
    if __debug__:
 
        of_instruction = Signal(intbv(0)[CFG_IMEM_WIDTH:])
 
    # End Ports only for debug
 
 
    if_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
    if_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
 
 
    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:])
Line 113... Line 117...
    of_immediate = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    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)
 
 
    # Write back stage forwards
    # Write back stage forwards
    of_fwd_mem_result = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    of_fwd_mem_result = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    of_fwd_reg_d = Signal(intbv(0)[5:])
    of_fwd_reg_d = Signal(intbv(0)[CFG_GPRF_SIZE:])
    of_fwd_reg_write = Signal(False)
    of_fwd_reg_write = Signal(False)
 
 
    ex_alu_result = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    ex_alu_result = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    ex_reg_d = Signal(intbv(0)[5:])
    ex_reg_d = Signal(intbv(0)[CFG_GPRF_SIZE:])
    ex_reg_write = Signal(False)
    ex_reg_write = Signal(False)
 
 
    ex_branch = Signal(False)
    ex_branch = Signal(False)
    ex_dat_d = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    ex_dat_d = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    ex_flush_id = Signal(False)
    ex_flush_id = Signal(False)
    ex_mem_read = Signal(False)
    ex_mem_read = Signal(False)
    ex_mem_write = Signal(False)
    ex_mem_write = Signal(False)
    ex_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
    ex_program_counter = Signal(intbv(0)[CFG_IMEM_SIZE:])
    ex_transfer_size = Signal(transfer_size_type.WORD)
    ex_transfer_size = Signal(transfer_size_type.WORD)
 
 
    # if __debug__:
    # Ports only for debug
    #ex_dat_a = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    ex_dat_a = 0
    #ex_dat_b = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    ex_dat_b = 0
    #ex_instruction = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    ex_instruction = 0
    #ex_reg_a = Signal(intbv(0)[5:])
    ex_reg_a = 0
    #ex_reg_b = Signal(intbv(0)[5:])
    ex_reg_b = 0
 
    if __debug__:
 
        ex_dat_a = Signal(intbv(0)[CFG_DMEM_WIDTH:])
 
        ex_dat_b = Signal(intbv(0)[CFG_DMEM_WIDTH:])
 
        ex_instruction = Signal(intbv(0)[CFG_DMEM_WIDTH:])
 
        ex_reg_a = Signal(intbv(0)[CFG_GPRF_SIZE:])
 
        ex_reg_b = Signal(intbv(0)[CFG_GPRF_SIZE:])
 
    # End Ports only for debug
 
 
    mm_alu_result = Signal(intbv(0)[CFG_DMEM_WIDTH:])
    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)
 
 
    ftch = FetchUnit(
    ftch = FetchUnit(
        clock=clock,
        clock=clock,
Line 201... Line 212...
        # Write back stage output
        # Write back stage output
        of_fwd_mem_result=of_fwd_mem_result,
        of_fwd_mem_result=of_fwd_mem_result,
        of_fwd_reg_d=of_fwd_reg_d,
        of_fwd_reg_d=of_fwd_reg_d,
        of_fwd_reg_write=of_fwd_reg_write,
        of_fwd_reg_write=of_fwd_reg_write,
 
 
        # if __debug__:
        # Ports only for debug
        #of_instruction=of_instruction,
        of_instruction=of_instruction,
 
 
    )
    )
 
 
    exeu = ExecuteUnit(
    exeu = ExecuteUnit(
        # Inputs
        # Inputs
Line 256... Line 267...
        ex_mem_read=ex_mem_read,
        ex_mem_read=ex_mem_read,
        ex_mem_write=ex_mem_write,
        ex_mem_write=ex_mem_write,
        ex_program_counter=ex_program_counter,
        ex_program_counter=ex_program_counter,
        ex_transfer_size=ex_transfer_size,
        ex_transfer_size=ex_transfer_size,
 
 
        # if __debug__
        # Ports only for debug
        #of_instruction=of_instruction,
        of_instruction=of_instruction,
        #ex_dat_a=ex_dat_a,
        ex_dat_a=ex_dat_a,
        #ex_dat_b=ex_dat_b,
        ex_dat_b=ex_dat_b,
        #ex_instruction=ex_instruction,
        ex_instruction=ex_instruction,
        #ex_reg_a=ex_reg_a,
        ex_reg_a=ex_reg_a,
        #ex_reg_b=ex_reg_b,
        ex_reg_b=ex_reg_b,
    )
    )
 
 
    memu = MemUnit(
    memu = MemUnit(
        # Inputs
        # Inputs
        clock=clock,
        clock=clock,
Line 292... Line 303...
        dmem_we_out=dmem_we_out,
        dmem_we_out=dmem_we_out,
        dmem_addr_out=dmem_addr_out,
        dmem_addr_out=dmem_addr_out,
        dmem_ena_out=dmem_ena_out,
        dmem_ena_out=dmem_ena_out,
    )
    )
 
 
    #@always_comb
    @always_comb
    #def debug_output():
    def debug_output():
        #debug_if_program_counter.next = if_program_counter
        debug_if_program_counter.next = if_program_counter
 
 
        #debug_of_alu_op.next = of_alu_op
        debug_of_alu_op.next = of_alu_op
        #debug_of_alu_src_a.next = of_alu_src_a
        debug_of_alu_src_a.next = of_alu_src_a
        #debug_of_alu_src_b.next = of_alu_src_b
        debug_of_alu_src_b.next = of_alu_src_b
        #debug_of_branch_cond.next = of_branch_cond
        debug_of_branch_cond.next = of_branch_cond
        #debug_of_carry.next = of_carry
        debug_of_carry.next = of_carry
        #debug_of_carry_keep.next = of_carry_keep
        debug_of_carry_keep.next = of_carry_keep
        #debug_of_delay.next = of_delay
        debug_of_delay.next = of_delay
        #debug_of_hazard.next = of_hazard
        debug_of_hazard.next = of_hazard
        #debug_of_immediate.next = of_immediate
        debug_of_immediate.next = of_immediate
        #debug_of_instruction.next = of_instruction
        debug_of_instruction.next = of_instruction
        #debug_of_mem_read.next = of_mem_read
        debug_of_mem_read.next = of_mem_read
        #debug_of_mem_write.next = of_mem_write
        debug_of_mem_write.next = of_mem_write
        #debug_of_operation.next = of_operation
        debug_of_operation.next = of_operation
        #debug_of_program_counter.next = of_program_counter
        debug_of_program_counter.next = of_program_counter
        #debug_of_reg_a.next = of_reg_a
        debug_of_reg_a.next = of_reg_a
        #debug_of_reg_b.next = of_reg_b
        debug_of_reg_b.next = of_reg_b
        #debug_of_reg_d.next = of_reg_d
        debug_of_reg_d.next = of_reg_d
        #debug_of_reg_write.next = of_reg_write
        debug_of_reg_write.next = of_reg_write
        #debug_of_transfer_size.next = of_transfer_size
        debug_of_transfer_size.next = of_transfer_size
 
 
        #debug_of_fwd_mem_result.next = of_fwd_mem_result
        debug_of_fwd_mem_result.next = of_fwd_mem_result
        #debug_of_fwd_reg_d.next = of_fwd_reg_d
        debug_of_fwd_reg_d.next = of_fwd_reg_d
        #debug_of_fwd_reg_write.next = of_fwd_reg_write
        debug_of_fwd_reg_write.next = of_fwd_reg_write
 
 
        #debug_gprf_dat_a.next = gprf_dat_a
        debug_gprf_dat_a.next = gprf_dat_a
        #debug_gprf_dat_b.next = gprf_dat_b
        debug_gprf_dat_b.next = gprf_dat_b
        #debug_gprf_dat_d.next = gprf_dat_d
        debug_gprf_dat_d.next = gprf_dat_d
 
 
        #debug_ex_alu_result.next = ex_alu_result
        debug_ex_alu_result.next = ex_alu_result
        #debug_ex_reg_d.next = ex_reg_d
        debug_ex_reg_d.next = ex_reg_d
        #debug_ex_reg_write.next = ex_reg_write
        debug_ex_reg_write.next = ex_reg_write
 
 
        #debug_ex_branch.next = ex_branch
        debug_ex_branch.next = ex_branch
        #debug_ex_dat_d.next = ex_dat_d
        debug_ex_dat_d.next = ex_dat_d
        #debug_ex_flush_id.next = ex_flush_id
        debug_ex_flush_id.next = ex_flush_id
        #debug_ex_mem_read.next = ex_mem_read
        debug_ex_mem_read.next = ex_mem_read
        #debug_ex_mem_write.next = ex_mem_write
        debug_ex_mem_write.next = ex_mem_write
        #debug_ex_program_counter.next = ex_program_counter
        debug_ex_program_counter.next = ex_program_counter
        #debug_ex_transfer_size.next = ex_transfer_size
        debug_ex_transfer_size.next = ex_transfer_size
 
 
        #debug_ex_dat_a.next = ex_dat_a
        debug_ex_dat_a.next = ex_dat_a
        #debug_ex_dat_b.next = ex_dat_b
        debug_ex_dat_b.next = ex_dat_b
        #debug_ex_instruction.next = ex_instruction
        debug_ex_instruction.next = ex_instruction
        #debug_ex_reg_a.next = ex_reg_a
        debug_ex_reg_a.next = ex_reg_a
        #debug_ex_reg_b.next = ex_reg_b
        debug_ex_reg_b.next = ex_reg_b
 
 
        #debug_mm_alu_result.next = mm_alu_result
        debug_mm_alu_result.next = mm_alu_result
        #debug_mm_mem_read.next = mm_mem_read
        debug_mm_mem_read.next = mm_mem_read
        #debug_mm_reg_d.next = mm_reg_d
        debug_mm_reg_d.next = mm_reg_d
        #debug_mm_reg_write.next = mm_reg_write
        debug_mm_reg_write.next = mm_reg_write
        #debug_mm_transfer_size.next = mm_transfer_size
        debug_mm_transfer_size.next = mm_transfer_size
 
 
    return instances()
    if DEBUG:
 
        return ftch, deco, exeu, memu, debug_output
 
    return ftch, deco, exeu, memu
 
 
def bench():
def bench():
    clock = Signal(False)
    clock = Signal(False)
    reset = Signal(False)
    reset = Signal(False)
 
 
Line 468... Line 481...
        #for i in range(len(imem)):
        #for i in range(len(imem)):
        while 1:
        while 1:
            iaddr = int(imem_addr_out)
            iaddr = int(imem_addr_out)
            if iaddr >= len(imem):
            if iaddr >= len(imem):
                break
                break
            #print 'cycle %d: imem addr:=0x%x code:=0x%08x\n' % (
 
                    #i, iaddr, imem[iaddr/4])
 
            word = (((imem[iaddr]%256)<<24)
            word = (((imem[iaddr]%256)<<24)
                   +((imem[iaddr+1]%256)<<16)
                   +((imem[iaddr+1]%256)<<16)
                   +((imem[iaddr+2]%256)<<8)
                   +((imem[iaddr+2]%256)<<8)
                   +(imem[iaddr+3]%256))
                   +(imem[iaddr+3]%256))
            #print 'imem addr:=0x%x code:=0x%08x' % (iaddr, word)
            #print 'imem addr:=0x%x code:=0x%08x' % (iaddr, word)
Line 505... Line 516...
    imem_data_in = Signal(intbv(0)[CFG_IMEM_WIDTH:])
    imem_data_in = Signal(intbv(0)[CFG_IMEM_WIDTH:])
    imem_addr_out = Signal(intbv(0)[CFG_IMEM_SIZE:])
    imem_addr_out = Signal(intbv(0)[CFG_IMEM_SIZE:])
    imem_ena_out = Signal(False)
    imem_ena_out = Signal(False)
 
 
    kw = dict(
    kw = dict(
        func=MyBlazeCore,
 
        clock=clock,
        clock=clock,
        reset=reset,
        reset=reset,
        dmem_ena_in=dmem_ena_in,
        dmem_ena_in=dmem_ena_in,
 
 
        dmem_data_in=dmem_data_in,
        dmem_data_in=dmem_data_in,
Line 520... Line 530...
        dmem_ena_out=dmem_ena_out,
        dmem_ena_out=dmem_ena_out,
        imem_data_in=imem_data_in,
        imem_data_in=imem_data_in,
        imem_addr_out=imem_addr_out,
        imem_addr_out=imem_addr_out,
        imem_ena_out=imem_ena_out,
        imem_ena_out=imem_ena_out,
    )
    )
    toVHDL(**kw)
    toVHDL(MyBlazeCore, **kw)
    toVerilog(**kw)
    toVerilog(MyBlazeCore, **kw)
  else:
  else:
    tb = bench()
    tb = bench()
    #tb = traceSignals(bench)
    #tb = traceSignals(bench)
    Simulation(tb).run(2000000)
    Simulation(tb).run(2000000)
 
 

powered by: WebSVN 2.1.0

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