LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Cores > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: ronivon.costa at gmail.com<ronivon.costa@g...>
    Date: Mon May 5 15:27:51 CEST 2008
    Subject: [oc] T80 Core x
    Top
    I would appreciate any help from people who used the T80 core on this.
    This is more a multi-discipline problem, because it relates to Z80
    assembly and VHDL:

    I have this logic to read/write into memory.

    DI_CPU is the Z80 input data bus.
    DO_CPU is the Z80 output data bus.
    A is the Z80 address bus.

    The others signals are for video ram (block memory) and other devices.

    This process is to store data on memory:

    writevram: process(Clk_Z80)
    begin
    if Clk_Z80'event and Clk_Z80 = '1' then
    if A >= x"2000" and A <= x"27FF" then
    vram_addra_sig <= A - x"2000";
    if Wr_n = '0' and MReq_n = '0' then
    vram_dina_sig <= DO_CPU;
    vram_wea_sig <= '0';
    else
    vram_wea_sig <= '1';
    end if;
    else
    vram_wea_sig <= '1';
    end if;
    end if;
    end process;


    And this continuous assignment is to read memory and input from other
    devices and send to the Z80:

    DI_CPU <= D_ROM when (Rd_n = '0' and MReq_n = '0' and A < x"2000") else
    ("0000" & SW) when (IORQ_n = '0' and Rd_n = '0' and A(7 downto 0) =
    x"20") else
    ("0000" & KEY) when (IORQ_n = '0' and Rd_n = '0' and A(7 downto 0)
    = x"30") else
    ps2_ascii_reg when (IORQ_n = '0' and Rd_n = '0' and A(7 downto 0) =
    x"80");


    Now the program in Z80 assembly.
    This next small program will run without problems, and the byte will
    be stored in memory. I can have a buch of such commands,in sequence,
    and they will run and the data will be stored in memory.

    ld a,41h ; define data to store
    ld (8250),a ; store the data in memory position 8250 decimal
    ld a,42h
    ld (8251),a

    However, if I try to write a block of data, it will fail, and the data
    will not be written into memory:

    ld de,texto ; data to store in memory
    ld bc,2000h ; address of memory to store the data
    loop1:
    ld a,(de) ; read 1 character
    or a ; compares with zero
    jr z,next1 ; if zero, then end of text
    ld (bc),a ; store character in ram
    inc bc ; point to next ram position
    inc de ; point to next character
    jr loop1 ; go to store next character
    texto:
    db "Testing T80 Core "
    db 0

    --

    So, what do you think it is happening?
    I have considered a T80 bug, but have not come to a definitive test to
    prove that.

    In the other hand, I really think there is a problem with my logic. I
    am a beginner with VHDL and FPGAs.

    The memory model were generated using coregenerator (xilinx) and
    implemented in a Spartan 3E.
    The problem does not occur when I use quartus and implement the design
    on a DE1 board.

    Any thoughts? Ideia? I really appreciate.
    Thanks.

    Follow upAuthor
    [oc] T80 Core xAndrew mulcock

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.