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

Subversion Repositories myblaze

[/] [myblaze/] [trunk/] [rtl/] [top.py] - Diff between revs 3 and 6

Show entire file | Details | Blame | View Log

Rev 3 Rev 6
Line 6... Line 6...
    Top Level of the System Design
    Top Level of the System Design
 
 
    :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: top.py 3 2010-11-21 07:17:00Z rockee $
    :revision: $Id: top.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 40... Line 40...
            data_out.next = imem[address[:2]]
            data_out.next = imem[address[:2]]
    return instances()
    return instances()
 
 
def SysTop(txd_line, rxd_line, txd_line2, rxd_line2, leds, reset, clock,
def SysTop(txd_line, rxd_line, txd_line2, rxd_line2, leds, reset, clock,
 
 
        # if __debug__:
        # Ports only for debug
        debug_if_program_counter,
        debug_if_program_counter=0,
 
 
        debug_of_alu_op,
 
        debug_of_alu_src_a,
 
        debug_of_alu_src_b,
 
        debug_of_branch_cond,
 
        debug_of_carry,
 
        debug_of_carry_keep,
 
        debug_of_delay,
 
        debug_of_hazard,
 
        debug_of_immediate,
 
        debug_of_instruction,
 
        debug_of_mem_read,
 
        debug_of_mem_write,
 
        debug_of_operation,
 
        debug_of_program_counter,
 
        debug_of_reg_a,
 
        debug_of_reg_b,
 
        debug_of_reg_d,
 
        debug_of_reg_write,
 
        debug_of_transfer_size,
 
 
 
        debug_of_fwd_mem_result,
 
        debug_of_fwd_reg_d,
 
        debug_of_fwd_reg_write,
 
 
 
        debug_gprf_dat_a,
 
        debug_gprf_dat_b,
 
        debug_gprf_dat_d,
 
 
 
        debug_ex_alu_result,
 
        debug_ex_reg_d,
 
        debug_ex_reg_write,
 
 
 
        debug_ex_branch,
 
        debug_ex_dat_d,
 
        debug_ex_flush_id,
 
        debug_ex_mem_read,
 
        debug_ex_mem_write,
 
        debug_ex_program_counter,
 
        debug_ex_transfer_size,
 
 
 
        debug_ex_dat_a,
        debug_of_alu_op=0,
        debug_ex_dat_b,
        debug_of_alu_src_a=0,
        debug_ex_instruction,
        debug_of_alu_src_b=0,
        debug_ex_reg_a,
        debug_of_branch_cond=0,
        debug_ex_reg_b,
        debug_of_carry=0,
 
        debug_of_carry_keep=0,
 
        debug_of_delay=0,
 
        debug_of_hazard=0,
 
        debug_of_immediate=0,
 
        debug_of_instruction=0,
 
        debug_of_mem_read=0,
 
        debug_of_mem_write=0,
 
        debug_of_operation=0,
 
        debug_of_program_counter=0,
 
        debug_of_reg_a=0,
 
        debug_of_reg_b=0,
 
        debug_of_reg_d=0,
 
        debug_of_reg_write=0,
 
        debug_of_transfer_size=0,
 
 
 
        debug_of_fwd_mem_result=0,
 
        debug_of_fwd_reg_d=0,
 
        debug_of_fwd_reg_write=0,
 
 
 
        debug_gprf_dat_a=0,
 
        debug_gprf_dat_b=0,
 
        debug_gprf_dat_d=0,
 
 
 
        debug_ex_alu_result=0,
 
        debug_ex_reg_d=0,
 
        debug_ex_reg_write=0,
 
 
 
        debug_ex_branch=0,
 
        debug_ex_dat_d=0,
 
        debug_ex_flush_id=0,
 
        debug_ex_mem_read=0,
 
        debug_ex_mem_write=0,
 
        debug_ex_program_counter=0,
 
        debug_ex_transfer_size=0,
 
 
 
        debug_ex_dat_a=0,
 
        debug_ex_dat_b=0,
 
        debug_ex_instruction=0,
 
        debug_ex_reg_a=0,
 
        debug_ex_reg_b=0,
 
 
 
        debug_mm_alu_result=0,
 
        debug_mm_mem_read=0,
 
        debug_mm_reg_d=0,
 
        debug_mm_reg_write=0,
 
        debug_mm_transfer_size=0,
 
 
 
        debug_dmem_ena_in=0,
 
        debug_dmem_data_in=0,
 
        debug_dmem_data_out=0,
 
        debug_dmem_sel_out=0,
 
        debug_dmem_we_out=0,
 
        debug_dmem_addr_out=0,
 
        debug_dmem_ena_out=0,
 
        debug_dmem_ena=0,
 
 
 
        debug_imem_data_in=0,
 
        debug_imem_data_out=0,
 
        debug_imem_sel_out=0,
 
        debug_imem_we_out=0,
 
        debug_imem_addr_out=0,
 
        debug_imem_ena=0,
 
        debug_imem_ena_out=0,
 
 
        debug_mm_alu_result,
        size=4, DEBUG=True):
        debug_mm_mem_read,
 
        debug_mm_reg_d,
 
        debug_mm_reg_write,
 
        debug_mm_transfer_size,
 
 
 
        debug_dmem_ena_in,
 
        debug_dmem_data_in,
 
        debug_dmem_data_out,
 
        debug_dmem_sel_out,
 
        debug_dmem_we_out,
 
        debug_dmem_addr_out,
 
        debug_dmem_ena_out,
 
        debug_dmem_ena,
 
 
 
        debug_imem_data_in,
 
        debug_imem_data_out,
 
        debug_imem_sel_out,
 
        debug_imem_we_out,
 
        debug_imem_addr_out,
 
        debug_imem_ena,
 
        debug_imem_ena_out,
 
 
 
        size=4):
 
    rx_data = Signal(intbv(0)[32:])
    rx_data = Signal(intbv(0)[32:])
    rx_avail = Signal(False)
    rx_avail = Signal(False)
    rx_error = Signal(False)
    rx_error = Signal(False)
    read_en = Signal(False)
    read_en = Signal(False)
    tx_data = Signal(intbv(0)[32:])
    tx_data = Signal(intbv(0)[32:])
Line 182... Line 182...
        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,
 
 
        # if __debug__:
        # Ports only for debug
        debug_if_program_counter=debug_if_program_counter,
        debug_if_program_counter=debug_if_program_counter,
 
 
        debug_of_alu_op=debug_of_alu_op,
        debug_of_alu_op=debug_of_alu_op,
        debug_of_alu_src_a=debug_of_alu_src_a,
        debug_of_alu_src_a=debug_of_alu_src_a,
        debug_of_alu_src_b=debug_of_alu_src_b,
        debug_of_alu_src_b=debug_of_alu_src_b,
Line 236... Line 236...
        debug_mm_alu_result=debug_mm_alu_result,
        debug_mm_alu_result=debug_mm_alu_result,
        debug_mm_mem_read=debug_mm_mem_read,
        debug_mm_mem_read=debug_mm_mem_read,
        debug_mm_reg_d=debug_mm_reg_d,
        debug_mm_reg_d=debug_mm_reg_d,
        debug_mm_reg_write=debug_mm_reg_write,
        debug_mm_reg_write=debug_mm_reg_write,
        debug_mm_transfer_size=debug_mm_transfer_size,
        debug_mm_transfer_size=debug_mm_transfer_size,
 
 
 
        DEBUG=DEBUG,
    )
    )
 
 
    uart = UART(rx_data, rx_avail, rx_error, read_en,
    uart = UART(rx_data, rx_avail, rx_error, read_en,
           tx_data, tx_busy, write_en,
           tx_data, tx_busy, write_en,
           uart_rxd, uart_txd, reset, clock,
           uart_rxd, uart_txd, reset, clock,
Line 258... Line 260...
        else:
        else:
            dmem_sel.next = 0
            dmem_sel.next = 0
        tx_data.next = dmem_data_out
        tx_data.next = dmem_data_out
        if dmem_addr_out < 2**size:
        if dmem_addr_out < 2**size:
            dmem_ena.next = dmem_ena_out
            dmem_ena.next = dmem_ena_out
            #dmem_ena_in.next = True
 
            write_en.next = False
            write_en.next = False
        elif dmem_we_out and dmem_addr_out[28:] >= 0xfffffb0:
        elif dmem_we_out and dmem_addr_out[28:] >= 0xfffffc0:
            dmem_ena.next = False
            dmem_ena.next = False
            #dmem_ena_in.next = not tx_busy
            dmem_ena_in.next = not tx_busy
            write_en.next = True
            write_en.next = True
        else:
        else:
            write_en.next = False
            write_en.next = False
            dmem_ena.next = False
            dmem_ena.next = False
            #dmem_ena_in.next = True
 
 
 
        #leds.next = concat(led_reg[4:], led_low[4:])
        #leds.next = concat(led_reg[4:], led_low[4:])
        leds.next = led_reg[8:]
        leds.next = led_reg[8:]
 
 
    count = Signal(intbv(0)[20:])
    count = Signal(intbv(0)[20:])
Line 295... Line 295...
            uart_rxd.next = rxd_line
            uart_rxd.next = rxd_line
            txd_line2.next = uart_txd2
            txd_line2.next = uart_txd2
            uart_rxd2.next = rxd_line2
            uart_rxd2.next = rxd_line2
            read_en.next = False
            read_en.next = False
            count.next = (count+1)%(2**20)
            count.next = (count+1)%(2**20)
            if count == 0:
            #if count == 0:
                led_low.next = concat(led_low[31:], led_low[31])
                #led_low.next = concat(led_low[31:], led_low[31])
 
 
            #if write_en and not tx_busy:
            #if write_en and not tx_busy:
                #led_reg.next = concat(led_reg[31:], led_reg[31])
                #led_reg.next = concat(led_reg[31:], led_reg[31])
            #if dmem_we_out and dmem_addr_out[28:] == 0xFFFFFB0:
            if dmem_we_out and dmem_addr_out[28:] == 0xFFFFFB0:
                #led_reg.next = dmem_data_out
                led_reg.next = dmem_data_out
            #else:
            else:
                #led_reg.next = led_reg
                led_reg.next = led_reg
            #led_reg.next = concat(dmem_ena_in, dmem_we_out, dmem_ena_out,
            #led_reg.next = concat(dmem_ena_in, dmem_we_out, dmem_ena_out,
                #write_en,)
                #write_en,)
            if imem_addr_out == 0x244:
            #if imem_addr_out == 0x244:
                led_reg.next = 0xff
                #led_reg.next = 0xff
 
 
 
 
    @always_comb
    @always_comb
    def debug_output():
    def debug_output():
        debug_dmem_ena_in.next = dmem_ena_in
        debug_dmem_ena_in.next = dmem_ena_in
Line 329... Line 329...
        debug_imem_we_out.next = imem_we_out
        debug_imem_we_out.next = imem_we_out
        debug_imem_addr_out.next = imem_addr_out
        debug_imem_addr_out.next = imem_addr_out
        debug_imem_ena.next = imem_ena
        debug_imem_ena.next = imem_ena
        debug_imem_ena_out.next = imem_ena_out
        debug_imem_ena_out.next = imem_ena_out
 
 
    return instances()
    if DEBUG:
 
        return imem, dmem, core, uart, uart2, glue, run, debug_output
 
 
 
    return imem, dmem, core, uart, uart2, glue, run
 
 
import sys
import sys
from numpy import log2
from numpy import log2
 
 
def TopBench():
def TopBench():
Line 422... Line 425...
    debug_imem_ena = Signal(True)
    debug_imem_ena = Signal(True)
    debug_imem_ena_out = Signal(False)
    debug_imem_ena_out = Signal(False)
 
 
    top = SysTop(txd_line, rxd_line, txd_line2, rxd_line2, leds, reset, clock,
    top = SysTop(txd_line, rxd_line, txd_line2, rxd_line2, leds, reset, clock,
 
 
        # if __debug__:
        # Ports only for debug
        debug_if_program_counter,
        debug_if_program_counter,
 
 
        debug_of_alu_op,
        debug_of_alu_op,
        debug_of_alu_src_a,
        debug_of_alu_src_a,
        debug_of_alu_src_b,
        debug_of_alu_src_b,
Line 511... Line 514...
        reset.next = False
        reset.next = False
        yield delay(37)
        yield delay(37)
        reset.next = True
        reset.next = True
        yield delay(53)
        yield delay(53)
        reset.next = False
        reset.next = False
        for i in range(2000):
        for i in range(3000):
            yield clock.negedge
            yield clock.negedge
        reset.next = False
        reset.next = False
        yield delay(37)
        yield delay(37)
        reset.next = True
        reset.next = True
        yield delay(53)
        yield delay(53)
        reset.next = False
        reset.next = False
        for i in range(2000):
        for i in range(3000):
            yield clock.negedge
            yield clock.negedge
 
 
        raise StopSimulation
        raise StopSimulation
 
 
    @instance
    @instance
Line 537... Line 540...
            #if debug_ex_program_counter == 0x244:
            #if debug_ex_program_counter == 0x244:
                #print 'reach the second xil_print call'
                #print 'reach the second xil_print call'
            if debug_dmem_addr_out == 0xffffffc0:
            if debug_dmem_addr_out == 0xffffffc0:
                #if debug_dmem_sel_out == 0b1000:
                #if debug_dmem_sel_out == 0b1000:
                if debug_dmem_we_out:
                if debug_dmem_we_out:
                    #sys.stdout.write(chr(int(debug_dmem_data_out[8:])))
                    sys.stdout.write(chr(int(debug_dmem_data_out[8:])))
                    #sys.stdout.flush()
                    sys.stdout.flush()
                    print int(debug_dmem_data_out[8:])
                    #print int(debug_dmem_data_out[8:])
                    #print 'output: %d' % debug_dmem_data_out[8:]
                    #print 'output: %d' % debug_dmem_data_out[8:]
 
 
 
 
 
 
 
 
Line 599... Line 602...
 
 
 
 
    return instances()
    return instances()
 
 
if __name__ == '__main__':
if __name__ == '__main__':
  if 1:
  if 0:
    #tb = traceSignals(TopBench)
    tb = traceSignals(TopBench)
    #Simulation(tb).run()
    Simulation(tb).run()
    conversion.verify.simulator = 'icarus'
    #conversion.verify.simulator = 'icarus'
    conversion.verify(TopBench)
    #conversion.verify(TopBench)
  else:
  else:
    prepare()
    prepare()
    txd_line = Signal(False)
    txd_line = Signal(False)
    rxd_line = Signal(False)
    rxd_line = Signal(False)
    txd_line2 = Signal(False)
    txd_line2 = Signal(False)
Line 616... Line 619...
    reset = Signal(False)
    reset = Signal(False)
    clock = Signal(False)
    clock = Signal(False)
    size = int(log2(int(sys.argv[1]))) if len(sys.argv) > 1 else 4
    size = int(log2(int(sys.argv[1]))) if len(sys.argv) > 1 else 4
    print 'size=%s' % size
    print 'size=%s' % size
    #toVHDL(uart_test_top, txd_line, rxd_line, leds, reset, clock)
    #toVHDL(uart_test_top, txd_line, rxd_line, leds, reset, clock)
    toVerilog(SysTop, txd_line, rxd_line, txd_line2, rxd_line2, leds, reset, clock, size=size)
    toVerilog(SysTop, txd_line, rxd_line, txd_line2, rxd_line2, leds, reset,
 
            clock, size=size, DEBUG=False)
 
 
 
 
 
 
### 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.