Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Начало работы с 8051 на FPGA фирмы Actel
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2
styuf
Предлагаю сделать тему для тех, у кого возникли вопросы при первом знакомстве с софт-микроконтролером 8051 на FPGA фирмы Actel.

И вот первые вопросы:
Как правильно подключить внутреннюю память FPGA для работы с данны микроконтролером? FPGA A3PE1500.
Хочу просто попробовать сдлеать рабочий микроконтроллер для "помигать светодиодами" на отладочнике ProASIC3 STARTER KIT. В хэндбуке сказано, что существует 4 типа памяти, из которых две должен создавать я: XDATA и CODE. Внешней памяти на плате нет, так что хочу использовать память на чипе FPGA. Интересуют настройки ядра 8051s и конфигурация памяти. Если будут какие-нибудь дополнительные вопросы по моему проекту - все расскажу и покажу)
Заранее спасибо!

Что бы быть немного конкретней: в настройка 8051 я указал память без проверки по сигналу акноледж, выбрал two ports ram без pipe-line. Сколь тактов задержки я должен указать в настройках 8051-го?
doublekey
Делаю как-то так:
Код
module core8051 (
  input   clk,
  input   cpu_nrst,
  MEM_if  MEM_IF
  );

  CORE8051S
  #(
    ...
    .STRETCH_VAL          (1),              // Number of wait cycles for data memory.
    .VARIABLE_STRETCH     (0),              // Use fixed number of cycles for data memory access.
    .VARIABLE_WAIT        (0),              // Use fixed number of cycles for program memory access.
    .WAIT_VAL             (1),              // Number of wait cycles for program memory
    .INTRAM_IMPLEMENTATION(0),              // Use block RAM for internal RAM implementation.
    .FAMILY               (15)              // FPGA faily: ProASIC3.
  )
  CPU_CORE
  (
    ...
    .CLK      (clk),
    .NSYSRESET(cpu_nrst),
    .PRESETN  (),
    .WDOGRES  (1'b0),
    .WDOGRESN (),
    .INT0     (1'b0),
    .INT1     (1'b0),
    .MOVX     (),
    // Memory bus
    .MEMPSACKI(1'b1),
    .MEMACKI  (1'b1),
    .MEMDATAI (MEM_IF.data),
    .MEMDATAO (),
    .MEMADDR  (MEM_IF.addr),
    .MEMPSRD  (),
    .MEMWR    (),
    .MEMRD    (),
  );
  
endmodule

module rom (
  input  clk,    // Clock input.
  ROM_if ROM_IF, // Programming interface for initialization.
  MEM_if MEM_IF  // System data bus.
  );
  
  import definitions::*;
  
  reg [ROM_DATA_WIDTH - 1:0] mem [ROM_DEPTH - 1:0]; // ROM.
  reg [ROM_ADDR_WIDTH - 1:0] addr_reg; // Read address register.
  
  assign MEM_IF.data = mem[addr_reg];
  
  always_ff @(posedge clk)
    begin
      addr_reg <= MEM_IF.addr[ROM_ADDR_WIDTH - 1:0];
      if (ROM_IF.we) mem[ROM_IF.addr] <= ROM_IF.data;
  end

endmodule

Соответственно, после включения питания специальный автомат грузит программу из внешней EEPROM (I2C/SPI) в эту память и потом снимает reset для ядра.
styuf
Вот еще бы verilog понимать)
В целом ясно, но есть вопросы: почему вы берете stretch и wait time по одному? Это получается у стандартных блоков памяти задержки от выставления адреса до появления данных 2 такта без галочки на pipe-line?
Я вроде посимулировал память, что бы понять как роботают two ports ram блоки. Завтра на работе гляну результаты симуляции и сформулирую вопрос точнее.
doublekey
При работе с памятью программ один такт требуется, чтобы защёлкнуть выставленный ядром адрес в rom.addr_reg, плюс задержка на установление данных на выходе памяти ещё один такт, вроде бы так. Во всяком случае у меня с меньшим WAIT_VAL не работало на симуляторе.
styuf
А к вопросу симуляции 8051го: что нужно увидить при симуляции, что бы понять, что он работает?
Прочитав хэндбук по 8051s я не осознал, что я должен увидить на выходе симуляции. Кроме генерации адресов команд и данных?
Там написано, что поддерживается только BFM симуляция, на которой нельзя увидеть симуляции с реальным кодом в памяти. Что бы вы посоветовали для уверенности в работоспособности 8051го?

И еще - зачем вообще создана галочка pipeline в настройках памяти?
Это общий вопрос. Мне приходит в голову только то, что за счет дополнительного конвеера, можно увеличить частоту работы памяти. Но с другой стороны наличие уже двух тригеров на адресе и данных полностью исчерпывают возможности к дополнительному конвееру.
styuf
Добрался я до написания софта.
Вопрос такой: какой алгоритм создания .h файлов для различных блоков переферии, например таймера и т.п.?
Генерятся ли они автоматически средой или нет?
styuf
Что-бы не быть голословным распишу по порядку свои действия:
1) В Libero SOC я создал проект, включающий в себя ip-ядро 8051s (хэндбук - http://www.actel.com/products/ip/search/detail.aspx?id=648). К нему я прикрутил GPIO, APBCore, Timer, WatchDog. проект верхнего уровня получился такой:
CODE
-- test_8051.vhd
----------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

entity test_8051 is
PORT(
clock40 : in std_logic;
resetn : in std_logic;
led_out : out std_logic_vector(7 downto 0);
TCK : in std_logic;
TDI : in std_logic;
TMS : in std_logic;
TDO : out std_logic;
TRSTN : in std_logic
);
end test_8051;

architecture ARCH of test_8051 is
---SIGNAL---
signal clock_pll : std_logic := '0';
signal presetn : std_logic := '0';
signal int0, int1 : std_logic := '0';
---APB-SIGNAL
signal paddr : STD_LOGIC_VECTOR(23 downto 0);
signal prdata, pwdata, pwdatas : STD_LOGIC_VECTOR(31 downto 0);
signal penable, psel, pready, pslverr : STD_LOGIC;
signal paddrs, paddrs0 : STD_LOGIC_VECTOR(23 downto 0);
signal psels0, psels1, psels2, psels3, psels4, psels5, psels6, psels7, psels8, psels9, psels10, psels11, psels12, psels13, psels14, psels15 : STD_LOGIC;
signal pslverrs0, pslverrs1, pslverrs2, pslverrs3, pslverrs4, pslverrs5, pslverrs6, pslverrs7, pslverrs8, pslverrs9, pslverrs10, pslverrs11, pslverrs12, pslverrs13, pslverrs14, pslverrs15 : STD_LOGIC;
signal preadys0, preadys1, preadys2, preadys3, preadys4, preadys5, preadys6, preadys7, preadys8, preadys9, preadys10, preadys11, preadys12, preadys13, preadys14, preadys15 : STD_LOGIC;
SIGNAL pwrite, pwrites, penables: STD_LOGIC;
signal prdatas0, prdatas1, prdatas2, prdatas3, prdatas4, prdatas5, prdatas6, prdatas7, prdatas8, prdatas9, prdatas10, prdatas11, prdatas12,
prdatas13, prdatas14, prdatas15 : STD_LOGIC_VECTOR (31 downto 0);
---GPIO--signal--
SIGNAL gpio_in, gpio_out : STD_LOGIC_VECTOR(31 downto 0);
---watchdog-signal--
signal wdogres, wdogresn : STD_LOGIC;
---memory-signal---
signal dbgmempswr, mempsrd, memwr, memrd : STD_LOGIC;
signal memdatai, memdatao : std_logic_vector(7 downto 0);
signal memaddr : std_logic_vector(15 downto 0);
signal code_rd, data_rd : std_logic_vector(7 downto 0);
---
---COMPONENTS---
COMPONENT Core_8051 is
port(
CLK : in std_logic;
NSYSRESET : in std_logic;
PRESETN : out std_logic;
WDOGRES : in std_logic;
WDOGRESN : out std_logic;
INT0 : in std_logic;
INT1 : in std_logic;
MOVX : out std_logic;
---JTAG
TCK : in std_logic;
TMS : in std_logic;
TDI : in std_logic;
TDO : out std_logic;
TRSTN : in std_logic;
BREAKIN : in std_logic;
BREAKOUT : out std_logic;
TRIGOUT : out std_logic;
AUXOUT : out std_logic;
--- APB interface
PADDR : out std_logic_vector(11 downto 0);
PWDATA : out std_logic_vector(31 downto 0);
PRDATA : in std_logic_vector(31 downto 0);
PWRITE : out std_logic;
PENABLE : out std_logic;
PSEL : out std_logic;
PREADY : in std_logic;
PSLVERR : in std_logic;
---
DBGMEMPSWR : out std_logic; ---CODE memory write enable
MEMPSACKI : in std_logic; ---CODE acknowlege
MEMACKI : in std_logic; ---XDATA acknowlege
MEMPSRD : out std_logic; ---CODE memory read enable
MEMWR : out std_logic; ---XDATA memory write enable
MEMRD : out std_logic; ---XDATA memory read enable
MEMDATAI : in std_logic_vector(7 downto 0); ---CODE and XDATA memory input bus
MEMDATAO : out std_logic_vector(7 downto 0); ---CODE and XDATA memory output bus
MEMADDR : out std_logic_vector(15 downto 0);---CODE and XDATA memory address bus
MEMBANK : in std_logic_vector(3 downto 0)
);
end COMPONENT;

COMPONENT APBcore is
-- Port list
port(
-- Inputs
PADDR : in std_logic_vector(23 downto 0);
PENABLE : in std_logic;
PRDATAS0 : in std_logic_vector(31 downto 0);
PRDATAS1 : in std_logic_vector(31 downto 0);
PRDATAS10 : in std_logic_vector(31 downto 0);
PRDATAS11 : in std_logic_vector(31 downto 0);
PRDATAS12 : in std_logic_vector(31 downto 0);
PRDATAS13 : in std_logic_vector(31 downto 0);
PRDATAS14 : in std_logic_vector(31 downto 0);
PRDATAS15 : in std_logic_vector(31 downto 0);
PRDATAS2 : in std_logic_vector(31 downto 0);
PRDATAS3 : in std_logic_vector(31 downto 0);
PRDATAS4 : in std_logic_vector(31 downto 0);
PRDATAS5 : in std_logic_vector(31 downto 0);
PRDATAS6 : in std_logic_vector(31 downto 0);
PRDATAS7 : in std_logic_vector(31 downto 0);
PRDATAS8 : in std_logic_vector(31 downto 0);
PRDATAS9 : in std_logic_vector(31 downto 0);
PREADYS0 : in std_logic;
PREADYS1 : in std_logic;
PREADYS10 : in std_logic;
PREADYS11 : in std_logic;
PREADYS12 : in std_logic;
PREADYS13 : in std_logic;
PREADYS14 : in std_logic;
PREADYS15 : in std_logic;
PREADYS2 : in std_logic;
PREADYS3 : in std_logic;
PREADYS4 : in std_logic;
PREADYS5 : in std_logic;
PREADYS6 : in std_logic;
PREADYS7 : in std_logic;
PREADYS8 : in std_logic;
PREADYS9 : in std_logic;
PSEL : in std_logic;
PSLVERRS0 : in std_logic;
PSLVERRS1 : in std_logic;
PSLVERRS10 : in std_logic;
PSLVERRS11 : in std_logic;
PSLVERRS12 : in std_logic;
PSLVERRS13 : in std_logic;
PSLVERRS14 : in std_logic;
PSLVERRS15 : in std_logic;
PSLVERRS2 : in std_logic;
PSLVERRS3 : in std_logic;
PSLVERRS4 : in std_logic;
PSLVERRS5 : in std_logic;
PSLVERRS6 : in std_logic;
PSLVERRS7 : in std_logic;
PSLVERRS8 : in std_logic;
PSLVERRS9 : in std_logic;
PWDATA : in std_logic_vector(31 downto 0);
PWRITE : in std_logic;
-- Outputs
PADDRS : out std_logic_vector(23 downto 0);
PADDRS0 : out std_logic_vector(23 downto 0);
PENABLES : out std_logic;
PRDATA : out std_logic_vector(31 downto 0);
PREADY : out std_logic;
PSELS0 : out std_logic;
PSELS1 : out std_logic;
PSELS10 : out std_logic;
PSELS11 : out std_logic;
PSELS12 : out std_logic;
PSELS13 : out std_logic;
PSELS14 : out std_logic;
PSELS15 : out std_logic;
PSELS2 : out std_logic;
PSELS3 : out std_logic;
PSELS4 : out std_logic;
PSELS5 : out std_logic;
PSELS6 : out std_logic;
PSELS7 : out std_logic;
PSELS8 : out std_logic;
PSELS9 : out std_logic;
PSLVERR : out std_logic;
PWDATAS : out std_logic_vector(31 downto 0);
PWRITES : out std_logic
);
end COMPONENT;

COMPONENT WatchDog is
-- Port list
port(
-- Inputs
PADDR : in std_logic_vector(4 downto 2);
PCLK : in std_logic;
PENABLE : in std_logic;
PRESETn : in std_logic;
PSEL : in std_logic;
PWDATA : in std_logic_vector(31 downto 0);
PWRITE : in std_logic;
WDOGRESn : in std_logic;
-- Outputs
PRDATA : out std_logic_vector(31 downto 0);
WDOGRES : out std_logic
);
end COMPONENT;

COMPONENT GPIO is
-- Port list
port(
-- Inputs
GPIO_IN : in std_logic_vector(31 downto 0);
PADDR : in std_logic_vector(7 downto 0);
PCLK : in std_logic;
PENABLE : in std_logic;
PRESETN : in std_logic;
PSEL : in std_logic;
PWDATA : in std_logic_vector(31 downto 0);
PWRITE : in std_logic;
-- Outputs
GPIO_OUT : out std_logic_vector(31 downto 0);
INT : out std_logic_vector(31 downto 0);
PRDATA : out std_logic_vector(31 downto 0);
PREADY : out std_logic;
PSLVERR : out std_logic
);
end COMPONENT;

COMPONENT Timer is
-- Port list
port(
-- Inputs
PADDR : in std_logic_vector(4 downto 2);
PCLK : in std_logic;
PENABLE : in std_logic;
PRESETn : in std_logic;
PSEL : in std_logic;
PWDATA : in std_logic_vector(31 downto 0);
PWRITE : in std_logic;
-- Outputs
PRDATA : out std_logic_vector(31 downto 0);
TIMINT : out std_logic
);
end COMPONENT;

COMPONENT RAM_4096_8 is
port( WD : in std_logic_vector(7 downto 0);
RD : out std_logic_vector(7 downto 0);
WEN : in std_logic;
REN : in std_logic;
WADDR : in std_logic_vector(11 downto 0);
RADDR : in std_logic_vector(11 downto 0);
WCLK : in std_logic;
RCLK : in std_logic;
RESET : in std_logic
);
end COMPONENT;

COMPONENT pll_20MHz is
port( POWERDOWN : in std_logic;
CLKA : in std_logic;
LOCK : out std_logic;
GLA : out std_logic
);
end COMPONENT;

COMPONENT mem_mux is
port( Data0_port : in std_logic_vector(7 downto 0);
Data1_port : in std_logic_vector(7 downto 0);
Sel0 : in std_logic;
Result : out std_logic_vector(7 downto 0)
);
end COMPONENT;
---
begin
---DECLARATION-COMPONENT----------------------------------------------------------------------------------------------------
Core_8051_0 : Core_8051
port map(
CLK => clock_pll,
NSYSRESET => resetn,
PRESETN => presetn,
WDOGRES => wdogres,
WDOGRESN => wdogresn,
INT0 => int0,
INT1 => int1,
MOVX => OPEN,
---JTAG
TCK => TCK,
TMS => TMS,
TDI => TDI,
TDO => TDO,
TRSTN => TRSTN,
BREAKIN => '0',
BREAKOUT => OPEN,
TRIGOUT => OPEN,
AUXOUT => OPEN,
--- APB MASTER interface
PADDR => paddr(11 downto 0),
PWDATA => pwdata,
PRDATA => prdata,
PWRITE => pwrite,
PENABLE => penable,
PSEL => psel,
PREADY => pready,
PSLVERR => pslverr,
---
DBGMEMPSWR => dbgmempswr, ---CODE memory write enable
MEMPSACKI => '1', ---CODE acknowlege
MEMACKI => '1', ---XDATA acknowlege
MEMPSRD => mempsrd, ---CODE memory read enable
MEMWR => memwr, ---XDATA memory write enable
MEMRD => memrd, ---XDATA memory read enable
MEMDATAI => memdatai, ---CODE and XDATA memory input bus
MEMDATAO => memdatao, ---CODE and XDATA memory output bus
MEMADDR => memaddr,---CODE and XDATA memory address bus
MEMBANK => (OTHERS => '0')
);

APBcore_0 : APBcore
port map(
--Master
--in
PADDR => paddr,
PENABLE => penable,
PWDATA => pwdata,
PWRITE => pwrite,
PSEL => psel,
--out
PRDATA => prdata,
PSLVERR => pslverr,
PREADY => pready,
--Slave
-- Inputs
PRDATAS0 => prdatas0,
PRDATAS1 => prdatas1,
PRDATAS10 => prdatas10,
PRDATAS11 => prdatas11,
PRDATAS12 => prdatas12,
PRDATAS13 => prdatas13,
PRDATAS14 => prdatas14,
PRDATAS15 => prdatas15,
PRDATAS2 => prdatas2,
PRDATAS3 => prdatas3,
PRDATAS4 => prdatas4,
PRDATAS5 => prdatas5,
PRDATAS6 => prdatas6,
PRDATAS7 => prdatas7,
PRDATAS8 => prdatas8,
PRDATAS9 => prdatas9,
PREADYS0 => preadys0,
PREADYS1 => preadys1,
PREADYS10 => preadys10,
PREADYS11 => preadys11,
PREADYS12 => preadys12,
PREADYS13 => preadys13,
PREADYS14 => preadys14,
PREADYS15 => preadys15,
PREADYS2 => preadys2,
PREADYS3 => preadys3,
PREADYS4 => preadys4,
PREADYS5 => preadys5,
PREADYS6 => preadys6,
PREADYS7 => preadys7,
PREADYS8 => preadys8,
PREADYS9 => preadys9,
PSLVERRS0 => pslverrs0,
PSLVERRS1 => pslverrs1,
PSLVERRS10 => pslverrs10,
PSLVERRS11 => pslverrs11,
PSLVERRS12 => pslverrs12,
PSLVERRS13 => pslverrs13,
PSLVERRS14 => pslverrs14,
PSLVERRS15 => pslverrs15,
PSLVERRS2 => pslverrs2,
PSLVERRS3 => pslverrs3,
PSLVERRS4 => pslverrs4,
PSLVERRS5 => pslverrs5,
PSLVERRS6 => pslverrs6,
PSLVERRS7 => pslverrs7,
PSLVERRS8 => pslverrs8,
PSLVERRS9 => pslverrs9,

-- Outputs
PADDRS => paddrs,
PADDRS0 => paddrs0,
PENABLES => penables,
PSELS0 => psels0,
PSELS1 => psels1,
PSELS10 => psels10,
PSELS11 => psels11,
PSELS12 => psels12,
PSELS13 => psels13,
PSELS14 => psels14,
PSELS15 => psels15,
PSELS2 => psels2,
PSELS3 => psels3,
PSELS4 => psels4,
PSELS5 => psels5,
PSELS6 => psels6,
PSELS7 => psels7,
PSELS8 => psels8,
PSELS9 => psels9,
PWDATAS => pwdatas,
PWRITES => pwrites
);

WatchDog_0 : WatchDog
port map(
-- Inputs
PCLK => clock_pll,
WDOGRESn => wdogresn,
PRESETn => presetn,
WDOGRES => wdogres,
--APB
PADDR => paddrs(4 downto 2),
PENABLE => penables,
PRDATA => prdatas14,
PSEL => psels14,
PWDATA => pwdatas,
PWRITE => pwrites
);

GPIO_0 : GPIO
port map(
-- Inputs
GPIO_IN => gpio_in,
PCLK => clock_pll,
-- Outputs
GPIO_OUT => gpio_out,
INT => OPEN,
PRESETN => presetn,
--APB
PADDR => paddrs(7 downto 0),
PENABLE => penables,
PSEL => psels2,
PWDATA => pwdatas,
PWRITE => pwrites,
PRDATA => prdatas2,
PREADY => preadys2,
PSLVERR => pslverrs2
);
led_out <= gpio_out(7 downto 0);

Timer_0 : Timer
port map(
-- Inputs
PCLK => clock_pll,
PRESETn => presetn,
-- Outputs
TIMINT => int0,
--APB
PENABLE => penables,
PADDR => paddrs(4 downto 2),
PRDATA => prdatas0,
PSEL => psels0,
PWDATA => pwdatas,
PWRITE => pwrites
);

CODE_RAM_4096_8 : RAM_4096_8
port map
( WD => memdatai,
RD => code_rd,
WEN => dbgmempswr,
REN => mempsrd,
WADDR => memaddr(11 downto 0),
RADDR => memaddr(11 downto 0),
WCLK => clock_pll,
RCLK => clock_pll,
RESET => presetn
);

DATA_RAM_4096_8 : RAM_4096_8
port map
( WD => memdatai,
RD => data_rd,
WEN => memwr,
REN => memrd,
WADDR => memaddr(11 downto 0),
RADDR => memaddr(11 downto 0),
WCLK => clock_pll,
RCLK => clock_pll,
RESET => presetn
);

pll_20MHz_0 : pll_20MHz
port map
( POWERDOWN => '1',
CLKA => clock40,
LOCK => OPEN,
GLA => clock_pll
);

mem_mux_0 : mem_mux
port map
( Data0_port => code_rd,
Data1_port => data_rd,
Sel0 => memrd,
Result => memdatao
);
---
end ARCH;



После чего отсимулировал это дело, и посмотрел, что адрес для памяти инкрементируется. Что бы проверить, что память подключена нормально, решил написать простой проектик на с:
CODE
#include "stdio.h"
#include "header_8051_test.h"
#include "SC_8051s_reg51.h"

int main( void )
{
while( 1 )
{
GPIOOut = 0x1;
}
}


Собрал его, и указал на сгенеренный .hex файл, как на файл инициализации CODE-памяти.
Теперь постараюсь отсимулировать и посмотреть, идут ли данные из памяти в ядро.

Осимулировал, но не произошло то, что я ожидал. Почему-то не загорелся светодиод.
Нажмите для просмотра прикрепленного файла
Подскажите, почему на симуляции APB шина никак не меняется?
gosu-art
bb-offtopic.gif А на какой у вас частоте работает 8051?
styuf
10 МГц, генерируемых PLL.
styuf
И новый вопрос)!
Написал я програмку, запихал её в память CODE. Даже получилось отсимулировать в самой просто симуляции (еще до синтеза). 8051й, как ему и положено, начинает работать и, даже, выставлять правильные сигналы на APB шину (если кому интересно, могу показать результат симуляции). Но вот беда - на симуляциях уровнем выше (или ниже, смотря откуда смотреть rolleyes.gif , имеется ввиду те, которые после синтеза или после размещения на кристалле) процессор вообще не подает признаков жизни.
И вопрос такой: поддерживает ли Libero полноценную симуляцию процессора или нет?
И может кто поделится простым проектом с IP-ядром 8051s, который точно работал. Был бы очень благодарен!
skv
Цитата(styuf @ Apr 5 2013, 10:30) *
И новый вопрос)!
Написал я програмку, запихал её в память CODE. Даже получилось отсимулировать в самой просто симуляции (еще до синтеза). 8051й, как ему и положено, начинает работать и, даже, выставлять правильные сигналы на APB шину (если кому интересно, могу показать результат симуляции). Но вот беда - на симуляциях уровнем выше (или ниже, смотря откуда смотреть rolleyes.gif , имеется ввиду те, которые после синтеза или после размещения на кристалле) процессор вообще не подает признаков жизни.
И вопрос такой: поддерживает ли Libero полноценную симуляцию процессора или нет?
И может кто поделится простым проектом с IP-ядром 8051s, который точно работал. Был бы очень благодарен!


Libero поддерживает симуляцию 51-го процессора.
А зачем симулировать процессор? Собирать ядро микроконтроллера со стандартными контроллерами (IP 8051s, UART, Таймер, GPIO и т.д.) лучше в SmartDesigner. Проще и быстрее. Накидал модулей, бысренько соединил: 10-15 минут и готово. Затем уже перехожу к написанию своих модулей, добавляю модуль (верхнего уровня если проект получился иерархический) в схему процессорной части в SmartDesign и подключаю к АРВ шине.

По опыту могу сказать что с конфигурацией собранной из стандартных модулей проблем не возникало ни разу. Смысла тестировать процессор нет.
Для отладки своих модулей лучше использовать АРВ BFM. Я последнее время активно использую АРВ и АНВ BFM симуляцию для отладки своих модулей, подключенных на APB или АНВ шины.

А более полную отладку и тестирование модуля делаю уже программно в SoftConsole в дебаггере ПО. Пишу тестовые программы и отлаживаю. На симуляции все не проверишь. Да и ресурсов много надо.
Если будет время постараюсь к концу недели собрать тестовый проект с комментариями.
styuf
Цитата(skv @ Apr 8 2013, 21:21) *
Libero поддерживает симуляцию 51-го процессора.
А зачем симулировать процессор? Собирать ядро микроконтроллера со стандартными контроллерами (IP 8051s, UART, Таймер, GPIO и т.д.) лучше в SmartDesigner. Проще и быстрее. Накидал модулей, бысренько соединил: 10-15 минут и готово. Затем уже перехожу к написанию своих модулей, добавляю модуль (верхнего уровня если проект получился иерархический) в схему процессорной части в SmartDesign и подключаю к АРВ шине.

По опыту могу сказать что с конфигурацией собранной из стандартных модулей проблем не возникало ни разу. Смысла тестировать процессор нет.
Для отладки своих модулей лучше использовать АРВ BFM. Я последнее время активно использую АРВ и АНВ BFM симуляцию для отладки своих модулей, подключенных на APB или АНВ шины.

А более полную отладку и тестирование модуля делаю уже программно в SoftConsole в дебаггере ПО. Пишу тестовые программы и отлаживаю. На симуляции все не проверишь. Да и ресурсов много надо.
Если будет время постараюсь к концу недели собрать тестовый проект с комментариями.


По первому пункту: Я понимаю, что в целом тестировать весь процессор смысла нет. Я скорее для себя разбираюсь, как он работает, смотрю на адреса и команды, что, надо сказать, добавляет понимания) Да и проблем со сборкой процессора я не избежал, так что симуляция в целом смысл для меня имела. И симуляцию в конце концов запустить получилось даже после раскладки элементов по кристаллу.

А вот насчет правильности работы стандартных блоков, то тут я что-то недопонимаю. У меня сейчас собрана самоя простая конфигурация процессора (8051s, GPIO, APBcore, CODE-RAM, DATA-RAM), который на симуляции работает, а когда прошиваю в fpga, он не работает. Причем не работает нестабильно, как бы это странно не звучало. Я вывел часть шины адреса ны тестовые пины, и адрес как таковой генерится. Причем иногда генерится пачкой после reset-а, а иногда постоянно. Так что тут мне не ясно в чем проблема. Может частота высокая, может еще что-то.

И если вы скините мне какой-нить рабочий проект, самый простой, то я буду очень благодарен!
styuf
Всем спасибо!
Прошивка заработала, диодики замигали. Более или менее разобрался.
У кого будут вопросы - поделюсь опытом)


Всем спасибо!
Прошивка заработала, диодики замигали. Более или менее разобрался.
У кого будут вопросы - поделюсь опытом)

Остался такой вопрос - как правильно организовать прошивку процессора? Что лучше использовать и возможна ли прошивка через стандартный jtag?
StarG
Добрый день.
Очень интересно, чем закончилась экзекуция ядра Core8051.
Получили ли вы работающий проект? Если да, то не могли бы вы его здесь выложить?
styuf
Извините за задержку!
Экзекуция прошла вполне успешно. В итоге даже запустил програмку, которая светила светодиодами и реагировала на кнопочки. На этом пришлось остановится, така надо было допиливать схему под ральную плату, а не играться с отладочником.
Единственное, от чего мне не по душе - отсутствие на отладочнике энергонезависимой памяти. Как следствие прошивку приходилось заливать из под SoftConsole.
Недоразабрался я с одним вопросом, непосредственно относящимся к предидущесу абзацу: почему, когда непосредственно инициализирую память в фпга перед прошивкой с помощью tools-ов либеро (то бишь в память программы я заливаю саму программу, сгенерированную компилятором), я не получаю работающей железки. Если кто-то пробовал так делать - дайте знать, буду очень благодарен.
CODE
-- test_8051.vhd
----------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

entity test_8051 is
PORT(
clock40 : in std_logic;
resetn : in std_logic;
led_out : out std_logic_vector(7 downto 0);
TCK : in std_logic;
TDI : in std_logic;
TMS : in std_logic;
TDO : out std_logic;
TRSTN : in std_logic;
test_out : out std_logic_vector(31 downto 0)
);
end test_8051;

architecture ARCH of test_8051 is
---SIGNAL---
signal clock_pll : std_logic := '0';
signal presetn, NSYSRESET : std_logic := '0';
signal int0, int1 : std_logic := '0';
---APB-SIGNAL
signal paddr : STD_LOGIC_VECTOR(23 downto 0):=(OTHERS =>'0');
signal prdata, pwdata, pwdatas : STD_LOGIC_VECTOR(31 downto 0):=(OTHERS =>'0');
signal penable, psel, pready, pslverr : STD_LOGIC;
signal paddrs, paddrs0 : STD_LOGIC_VECTOR(23 downto 0):=(OTHERS =>'0');
signal psels0, psels1, psels2, psels3, psels4, psels5, psels6, psels7, psels8, psels9, psels10, psels11, psels12, psels13, psels14, psels15 : STD_LOGIC;
signal pslverrs0, pslverrs1, pslverrs2, pslverrs3, pslverrs4, pslverrs5, pslverrs6, pslverrs7, pslverrs8, pslverrs9, pslverrs10, pslverrs11, pslverrs12, pslverrs13, pslverrs14, pslverrs15 : STD_LOGIC;
signal preadys0, preadys1, preadys2, preadys3, preadys4, preadys5, preadys6, preadys7, preadys8, preadys9, preadys10, preadys11, preadys12, preadys13, preadys14, preadys15 : STD_LOGIC;
SIGNAL pwrite, pwrites, penables: STD_LOGIC;
signal prdatas0, prdatas1, prdatas2, prdatas3, prdatas4, prdatas5, prdatas6, prdatas7, prdatas8, prdatas9, prdatas10, prdatas11, prdatas12,
prdatas13, prdatas14, prdatas15 : STD_LOGIC_VECTOR (31 downto 0):=(OTHERS =>'0');
---GPIO--signal--
SIGNAL gpio_in, gpio_out : STD_LOGIC_VECTOR(31 downto 0):=(OTHERS =>'0');
---watchdog-signal--
signal wdogres, wdogresn : STD_LOGIC;
---memory-signal---
signal dbgmempswr, mempsrd, memwr, memrd : STD_LOGIC;
signal memdatai, memdatao : std_logic_vector(7 downto 0):=(OTHERS =>'0');
signal memaddr : std_logic_vector(15 downto 0):=(OTHERS =>'0');
signal code_rd, data_rd : std_logic_vector(7 downto 0):=(OTHERS =>'0');
---
---COMPONENTS---
COMPONENT Core_8051 is
port(
CLK : in std_logic;
NSYSRESET : in std_logic;
PRESETN : out std_logic;
WDOGRES : in std_logic;
WDOGRESN : out std_logic;
INT0 : in std_logic;
INT1 : in std_logic;
MOVX : out std_logic;
---JTAG
TCK : in std_logic;
TMS : in std_logic;
TDI : in std_logic;
TDO : out std_logic;
TRSTN : in std_logic;
BREAKIN : in std_logic;
BREAKOUT : out std_logic;
TRIGOUT : out std_logic;
AUXOUT : out std_logic;
--- APB interface
PADDR : out std_logic_vector(11 downto 0);
PWDATA : out std_logic_vector(31 downto 0);
PRDATA : in std_logic_vector(31 downto 0);
PWRITE : out std_logic;
PENABLE : out std_logic;
PSEL : out std_logic;
PREADY : in std_logic;
PSLVERR : in std_logic;
---
DBGMEMPSWR : out std_logic; ---CODE memory write enable
MEMPSACKI : in std_logic; ---CODE acknowlege
MEMACKI : in std_logic; ---XDATA acknowlege
MEMPSRD : out std_logic; ---CODE memory read enable
MEMWR : out std_logic; ---XDATA memory write enable
MEMRD : out std_logic; ---XDATA memory read enable
MEMDATAI : in std_logic_vector(7 downto 0); ---CODE and XDATA memory input bus
MEMDATAO : out std_logic_vector(7 downto 0); ---CODE and XDATA memory output bus
MEMADDR : out std_logic_vector(15 downto 0);---CODE and XDATA memory address bus
MEMBANK : in std_logic_vector(3 downto 0)
);
end COMPONENT;

COMPONENT APBcore is
-- Port list
port(
-- Inputs
PADDR : in std_logic_vector(23 downto 0);
PENABLE : in std_logic;
PRDATAS0 : in std_logic_vector(31 downto 0);
PRDATAS1 : in std_logic_vector(31 downto 0);
PRDATAS10 : in std_logic_vector(31 downto 0);
PRDATAS11 : in std_logic_vector(31 downto 0);
PRDATAS12 : in std_logic_vector(31 downto 0);
PRDATAS13 : in std_logic_vector(31 downto 0);
PRDATAS14 : in std_logic_vector(31 downto 0);
PRDATAS15 : in std_logic_vector(31 downto 0);
PRDATAS2 : in std_logic_vector(31 downto 0);
PRDATAS3 : in std_logic_vector(31 downto 0);
PRDATAS4 : in std_logic_vector(31 downto 0);
PRDATAS5 : in std_logic_vector(31 downto 0);
PRDATAS6 : in std_logic_vector(31 downto 0);
PRDATAS7 : in std_logic_vector(31 downto 0);
PRDATAS8 : in std_logic_vector(31 downto 0);
PRDATAS9 : in std_logic_vector(31 downto 0);
PREADYS0 : in std_logic;
PREADYS1 : in std_logic;
PREADYS10 : in std_logic;
PREADYS11 : in std_logic;
PREADYS12 : in std_logic;
PREADYS13 : in std_logic;
PREADYS14 : in std_logic;
PREADYS15 : in std_logic;
PREADYS2 : in std_logic;
PREADYS3 : in std_logic;
PREADYS4 : in std_logic;
PREADYS5 : in std_logic;
PREADYS6 : in std_logic;
PREADYS7 : in std_logic;
PREADYS8 : in std_logic;
PREADYS9 : in std_logic;
PSEL : in std_logic;
PSLVERRS0 : in std_logic;
PSLVERRS1 : in std_logic;
PSLVERRS10 : in std_logic;
PSLVERRS11 : in std_logic;
PSLVERRS12 : in std_logic;
PSLVERRS13 : in std_logic;
PSLVERRS14 : in std_logic;
PSLVERRS15 : in std_logic;
PSLVERRS2 : in std_logic;
PSLVERRS3 : in std_logic;
PSLVERRS4 : in std_logic;
PSLVERRS5 : in std_logic;
PSLVERRS6 : in std_logic;
PSLVERRS7 : in std_logic;
PSLVERRS8 : in std_logic;
PSLVERRS9 : in std_logic;
PWDATA : in std_logic_vector(31 downto 0);
PWRITE : in std_logic;
-- Outputs
PADDRS : out std_logic_vector(23 downto 0);
PADDRS0 : out std_logic_vector(23 downto 0);
PENABLES : out std_logic;
PRDATA : out std_logic_vector(31 downto 0);
PREADY : out std_logic;
PSELS0 : out std_logic;
PSELS1 : out std_logic;
PSELS10 : out std_logic;
PSELS11 : out std_logic;
PSELS12 : out std_logic;
PSELS13 : out std_logic;
PSELS14 : out std_logic;
PSELS15 : out std_logic;
PSELS2 : out std_logic;
PSELS3 : out std_logic;
PSELS4 : out std_logic;
PSELS5 : out std_logic;
PSELS6 : out std_logic;
PSELS7 : out std_logic;
PSELS8 : out std_logic;
PSELS9 : out std_logic;
PSLVERR : out std_logic;
PWDATAS : out std_logic_vector(31 downto 0);
PWRITES : out std_logic
);
end COMPONENT;

COMPONENT WatchDog is
-- Port list
port(
-- Inputs
PADDR : in std_logic_vector(4 downto 2);
PCLK : in std_logic;
PENABLE : in std_logic;
PRESETn : in std_logic;
PSEL : in std_logic;
PWDATA : in std_logic_vector(31 downto 0);
PWRITE : in std_logic;
WDOGRESn : in std_logic;
-- Outputs
PRDATA : out std_logic_vector(31 downto 0);
WDOGRES : out std_logic
);
end COMPONENT;

COMPONENT GPIO is
-- Port list
port(
-- Inputs
GPIO_IN : in std_logic_vector(31 downto 0);
PADDR : in std_logic_vector(7 downto 0);
PCLK : in std_logic;
PENABLE : in std_logic;
PRESETN : in std_logic;
PSEL : in std_logic;
PWDATA : in std_logic_vector(31 downto 0);
PWRITE : in std_logic;
-- Outputs
GPIO_OE : out std_logic_vector(31 downto 0);
GPIO_OUT : out std_logic_vector(31 downto 0);
INT : out std_logic_vector(31 downto 0);
PRDATA : out std_logic_vector(31 downto 0);
PREADY : out std_logic;
PSLVERR : out std_logic
);
end COMPONENT;

COMPONENT Timer is
-- Port list
port(
-- Inputs
PADDR : in std_logic_vector(4 downto 2);
PCLK : in std_logic;
PENABLE : in std_logic;
PRESETn : in std_logic;
PSEL : in std_logic;
PWDATA : in std_logic_vector(31 downto 0);
PWRITE : in std_logic;
-- Outputs
PRDATA : out std_logic_vector(31 downto 0);
TIMINT : out std_logic
);
end COMPONENT;

COMPONENT RAM_4096_8 is
port( WD : in std_logic_vector(7 downto 0);
RD : out std_logic_vector(7 downto 0);
WEN : in std_logic;
REN : in std_logic;
WADDR : in std_logic_vector(11 downto 0);
RADDR : in std_logic_vector(11 downto 0);
WCLK : in std_logic;
RCLK : in std_logic;
RESET : in std_logic
);
end COMPONENT;

COMPONENT DATA_RAM_4096_8 is
port( WD : in std_logic_vector(7 downto 0);
RD : out std_logic_vector(7 downto 0);
WEN : in std_logic;
REN : in std_logic;
WADDR : in std_logic_vector(11 downto 0);
RADDR : in std_logic_vector(11 downto 0);
WCLK : in std_logic;
RCLK : in std_logic;
RESET : in std_logic
);
end COMPONENT;

COMPONENT pll_20MHz is
port( POWERDOWN : in std_logic;
CLKA : in std_logic;
LOCK : out std_logic;
GLA : out std_logic
);
end COMPONENT;

COMPONENT mem_mux is
port( Data0_port : in std_logic_vector(7 downto 0);
Data1_port : in std_logic_vector(7 downto 0);
Sel0 : in std_logic;
Result : out std_logic_vector(7 downto 0)
);
end COMPONENT;
---
begin
---DECLARATION-COMPONENT----------------------------------------------------------------------------------------------------
Core_8051_0 : Core_8051
port map(
CLK => clock_pll,
NSYSRESET => NSYSRESET,
PRESETN => presetn,
WDOGRES => '0',
WDOGRESN => OPEN,
INT0 => '0',
INT1 => '0',
MOVX => OPEN,
---JTAG
TCK => TCK,
TMS => TMS,
TDI => TDI,
TDO => TDO,
TRSTN => TRSTN,
BREAKIN => '0',
BREAKOUT => OPEN,
TRIGOUT => OPEN,
AUXOUT => OPEN,
--- APB MASTER interface
PADDR => paddr(11 downto 0),
PWDATA => pwdata,
PRDATA => prdata,
PWRITE => pwrite,
PENABLE => penable,
PSEL => psel,
PREADY => pready,
PSLVERR => pslverr,
---
DBGMEMPSWR => dbgmempswr, ---CODE memory write enable
MEMPSACKI => '1', ---CODE acknowlege
MEMACKI => '1', ---XDATA acknowlege
MEMPSRD => mempsrd, ---CODE memory read enable
MEMWR => memwr, ---XDATA memory write enable
MEMRD => memrd, ---XDATA memory read enable
MEMDATAI => memdatai, ---CODE and XDATA memory input bus
MEMDATAO => memdatao, ---CODE and XDATA memory output bus
MEMADDR => memaddr,---CODE and XDATA memory address bus
MEMBANK => (OTHERS => '0')
);
test_out(9 downto 0) <= MEMADDR(9 downto 0);
NSYSRESET <= NOT resetn;

APBcore_0 : APBcore
port map(
--Master
--in
PADDR => paddr,
PENABLE => penable,
PWDATA => pwdata,
PWRITE => pwrite,
PSEL => psel,
--out
PRDATA => prdata,
PSLVERR => pslverr,
PREADY => pready,
--Slave
-- Inputs
PRDATAS0 => prdatas0,
PRDATAS1 => prdatas1,
PRDATAS10 => prdatas10,
PRDATAS11 => prdatas11,
PRDATAS12 => prdatas12,
PRDATAS13 => prdatas13,
PRDATAS14 => prdatas14,
PRDATAS15 => prdatas15,
PRDATAS2 => prdatas2,
PRDATAS3 => prdatas3,
PRDATAS4 => prdatas4,
PRDATAS5 => prdatas5,
PRDATAS6 => prdatas6,
PRDATAS7 => prdatas7,
PRDATAS8 => prdatas8,
PRDATAS9 => prdatas9,
PREADYS0 => preadys0,
PREADYS1 => preadys1,
PREADYS10 => preadys10,
PREADYS11 => preadys11,
PREADYS12 => preadys12,
PREADYS13 => preadys13,
PREADYS14 => preadys14,
PREADYS15 => preadys15,
PREADYS2 => preadys2,
PREADYS3 => preadys3,
PREADYS4 => preadys4,
PREADYS5 => preadys5,
PREADYS6 => preadys6,
PREADYS7 => preadys7,
PREADYS8 => preadys8,
PREADYS9 => preadys9,
PSLVERRS0 => pslverrs0,
PSLVERRS1 => pslverrs1,
PSLVERRS10 => pslverrs10,
PSLVERRS11 => pslverrs11,
PSLVERRS12 => pslverrs12,
PSLVERRS13 => pslverrs13,
PSLVERRS14 => pslverrs14,
PSLVERRS15 => pslverrs15,
PSLVERRS2 => pslverrs2,
PSLVERRS3 => pslverrs3,
PSLVERRS4 => pslverrs4,
PSLVERRS5 => pslverrs5,
PSLVERRS6 => pslverrs6,
PSLVERRS7 => pslverrs7,
PSLVERRS8 => pslverrs8,
PSLVERRS9 => pslverrs9,

-- Outputs
PADDRS => paddrs,
PADDRS0 => paddrs0,
PENABLES => penables,
PSELS0 => psels0,
PSELS1 => psels1,
PSELS10 => psels10,
PSELS11 => psels11,
PSELS12 => psels12,
PSELS13 => psels13,
PSELS14 => psels14,
PSELS15 => psels15,
PSELS2 => psels2,
PSELS3 => psels3,
PSELS4 => psels4,
PSELS5 => psels5,
PSELS6 => psels6,
PSELS7 => psels7,
PSELS8 => psels8,
PSELS9 => psels9,
PWDATAS => pwdatas,
PWRITES => pwrites
);

--WatchDog_0 : WatchDog
-- port map(
-- -- Inputs
-- PCLK => clock_pll,
-- WDOGRESn => wdogresn,
-- PRESETn => presetn,
-- WDOGRES => wdogres,
-- --APB
-- PADDR => paddrs(4 downto 2),
-- PENABLE => penables,
-- PRDATA => prdatas14,
-- PSEL => psels14,
-- PWDATA => pwdatas,
-- PWRITE => pwrites
-- );

GPIO_0 : GPIO
port map(
-- Inputs

GPIO_IN => gpio_in,
PCLK => clock_pll,
-- Outputs
GPIO_OE => OPEN,
GPIO_OUT => gpio_out,
INT => OPEN,
PRESETN => presetn,
--APB
PADDR => paddrs(7 downto 0),
PENABLE => penables,
PSEL => psels2,
PWDATA => pwdatas,
PWRITE => pwrites,
PRDATA => prdatas2,
PREADY => preadys2,
PSLVERR => pslverrs2
);
test_out(17 downto 10) <= paddrs(7 downto 0);
test_out(18) <= psels2;

led_out(6 downto 0) <= gpio_out(6 downto 0);
--
--Timer_0 : Timer
-- port map(
-- -- Inputs
-- PCLK => clock_pll,
-- PRESETn => presetn,
-- -- Outputs
-- TIMINT => int0,
-- --APB
-- PENABLE => penables,
-- PADDR => paddrs(4 downto 2),
-- PRDATA => prdatas0,
-- PSEL => psels0,
-- PWDATA => pwdatas,
-- PWRITE => pwrites
-- );

CODE_RAM_4096_8 : RAM_4096_8
port map
( WD => memdatao,
RD => code_rd,
WEN => dbgmempswr,
REN => mempsrd,
WADDR => memaddr(11 downto 0),
RADDR => memaddr(11 downto 0),
WCLK => clock_pll,
RCLK => clock_pll,
RESET => '1'
);
test_out(19) <= mempsrd;
test_out(27 downto 20) <= code_rd;
DATA1_RAM_4096_8 : DATA_RAM_4096_8
port map
( WD => memdatao,
RD => data_rd,
WEN => memwr,
REN => memrd,
WADDR => memaddr(11 downto 0),
RADDR => memaddr(11 downto 0),
WCLK => clock_pll,
RCLK => clock_pll,
RESET => '1'
);

pll_20MHz_0 : pll_20MHz
port map
( POWERDOWN => '1',
CLKA => clock40,
LOCK => led_out(7),
GLA => clock_pll
);

mem_mux_0 : mem_mux
port map
( Data0_port => data_rd,
Data1_port => code_rd,
Sel0 => mempsrd,
Result => memdatai
);
---
end ARCH;


Это код топ-файла в моем проекте. Все подкомпоненты стандартные, сам я их не правил.
Если будут вопросы - спрашивайте! Постараюсь ответить.
StarG
У меня вот какой вопрос возник.
Отсимулировал я проект с ядром 8051s и увидел, что шина адреса не изменяется. Пробовал до этого зашивать проект в железо, там адрес тоже стоял в ноле. Устанавливается разрешение чтения памяти программы, данные выходят наружу, а вот адрес стоит себе и стоит. Я в ступоре. Версия ядра - Core8051s 2.4.101, версия Либеры - 10.1.
styuf
Давайте разбираться.
Данные на выходя памяти меняются со временем, а адрес нет?
StarG
Нет данные не изменяются. Просто выдается значение, соответствующее нолевому адресу
styuf
А вы сколько по времени симулируете?
StarG
100мкс
styuf
Можете выложить скрины с параметрами ядра и памяти? Так сказать не могу. Сейчас смотрю на свою симуляцию и все в порядке.
Я бы сказал, что либо клок не доходит до ядра , либо у вас есть путанница с полярностью сигналов reset.
StarG
Вот настройки и связи между процом и памятью.
А у вас ядро и софт той же версии, что и у меня (есть предположение софтового глюка или чего-то в этом роде)?
styuf
Попробуйте инвертировать nsysreset и отсимулируйте. И что у вас в первой ячейке памяти лежит ( у которой адрес 0х0)?
StarG
Инвертирование сброса не помогло. Вместо данных на шине MEMDATAI теперь состояние 'x'. По адр 0х0 лежит 0х2 (можно увидеть на диаграммах выше). А можно как-нибудь поучить архивчик с вашим проектом, чтобы понять будет ли оно работать на моей машине?
Kapsik
Возник вопрос о заливке проекта содержащего core8051s в ПЛИС. Есть проект содержащий 8051 (в дальнейшем добявятся уарты и прочая АПБ3 переферия) и программка в софт консоли, интересует принцип прошивки самой ПЛИС. Очень хочется толковое описание,вроде все делаю правильно,но эффекта нет. И идеально бы простенький проект хотя бы помигать одним светодиодом,а дальше постараюсь уже сам. Спасибо!
styuf
Пока могу сказать только вот что - я сам запустил программу ан 8051-м только из под дебага в софтконсоли.
Проект завтра скину вместе с программкой и светодиодами.
Kapsik
Цитата(styuf @ Aug 28 2013, 18:54) *
Пока могу сказать только вот что - я сам запустил программу ан 8051-м только из под дебага в софтконсоли.
Проект завтра скину вместе с программкой и светодиодами.



Вот такая доска http://www.actel.com/documents/A3PE_STARTER_KIT_UG.pdf . хотя бы один диод какой нибудь ногой зажечь для примера. флешки нету на борту.
styuf
Вот мой проект: https://dl.dropboxusercontent.com/u/23012187/Example.rar
Попробуйте. Написан он именно под эту плату. Только надо не забыть плл подключить.
Kapsik
Цитата(styuf @ Aug 29 2013, 12:22) *
Вот мой проект: https://dl.dropboxusercontent.com/u/23012187/Example.rar
Попробуйте. Написан он именно под эту плату. Только надо не забыть плл подключить.


Спасибо. сейчас поразбираюсь. не совсем понятен остался момент по заливке исполняемой проги в МК...
styuf
Тут действительно вопрос интересный.
Я пытался делать так - создаю память программы внутри плисины и, соответственно, создаю ему инициализационный файлик .hex (при компиляции проги получается). Но у меня ни разу микроконтроллер не запустился сам. А вот если войтив дебаг моду внутри софтконсоли и сделать run то программа начинает работать. Програмки я писал простые - светодиодики (которая у вас) + обработка кнопок(работала, но я убрал обработчик кнопок). Ничего конкретней сказать не могу, сейчас занимаюсь немного другими вещами. Но в скором времени должен прийти первый прототип с отдлеьной пзу на плате.
Kapsik
Цитата(styuf @ Aug 29 2013, 13:09) *
Тут действительно вопрос интересный.
Я пытался делать так - создаю память программы внутри плисины и, соответственно, создаю ему инициализационный файлик .hex (при компиляции проги получается). Но у меня ни разу микроконтроллер не запустился сам. А вот если войтив дебаг моду внутри софтконсоли и сделать run то программа начинает работать. Програмки я писал простые - светодиодики (которая у вас) + обработка кнопок(работала, но я убрал обработчик кнопок). Ничего конкретней сказать не могу, сейчас занимаюсь немного другими вещами. Но в скором времени должен прийти первый прототип с отдлеьной пзу на плате.


я вас понял :-). могли бы вы СофтКонсольный проект скинуть. А так буду разбираться, если что накопаю дам знать...Задача заливки исполняемой проги во внешнюю память данных у меня так же присутствует. Огромное спасибо за помощь!
styuf
Держите: https://dl.dropboxusercontent.com/u/23012187/8051_test.rar
Обращайтесь!
Kapsik
Цитата(styuf @ Aug 29 2013, 13:25) *
Держите: https://dl.dropboxusercontent.com/u/23012187/8051_test.rar
Обращайтесь!



С Либеро все понятно, а вот с софт консолью опять все не слава богу...

в файлах заголовка вы написали:
ansigned char xdata WDLoad _at_ wd_base + 0x00
в то время как мануал предлагает вид:
__xdata at wd_base + 0x00 unsigned char WDLoad
вот нут не совсем понял почему такие различия...
ваш вариант не заработал, исправил с использованием мануала и проект собрался, но дебаг не проходит все равно и на плате никакого отклика на программу не вижу...
дебаг говорит c8051-elf-sprite: FAILED writing breakpoint a5 to 00f5:got 00
Kapsik
http://www.actel.com/kb/print.aspx?id=FQ1290

что за ошибка стало понятно, но не особо понятны пути решения...
styuf
Цитата
в файлах заголовка вы написали:
ansigned char xdata WDLoad _at_ wd_base + 0x00
в то время как мануал предлагает вид:
__xdata at wd_base + 0x00 unsigned char WDLoad
вот нут не совсем понял почему такие различия...
ваш вариант не заработал, исправил с использованием мануала и проект собрался, но дебаг не проходит все равно и на плате никакого отклика на программу не вижу...

Если заработало как в мануалах, то и хорошо. Скорее всего у меня отличается, потому что я изначально в кейле делал с другим компилятором. А там синтаксис скриптов немного разнится.
Цитата
дебаг говорит c8051-elf-sprite: FAILED writing breakpoint a5 to 00f5:got 00

Весьма странно, такого не замечал. Посмотрю, что можно сделать.
Kapsik
Цитата(styuf @ Sep 2 2013, 12:08) *
Если заработало как в мануалах, то и хорошо. Скорее всего у меня отличается, потому что я изначально в кейле делал с другим компилятором. А там синтаксис скриптов немного разнится.



то есть код вы писали в кеиле, а шили уже софт консолью файл хекс? В вашем проекте в либеро нужно ставить какие то,возможно,доп галочки или что то вроде этого? потому,что как я понял дебаг софт консоли он пытается найти флешку и прошиться в нее,но найти не может... Спасибо.
styuf
Нашел в чем проблема: я скинул вам не тот проект. вот ссылка на софтконсольный вариант: https://dl.dropboxusercontent.com/u/2301218...softconsole.zip
Kapsik
Цитата(styuf @ Sep 14 2013, 05:27) *
Нашел в чем проблема: я скинул вам не тот проект. вот ссылка на софтконсольный вариант: https://dl.dropboxusercontent.com/u/2301218...softconsole.zip


http://rusfolder.com/38047740


опираясь на ваш вариант,попытался залить проект на плату. не приуспел... сделал пошагово скриншоты моих действий,посмотрите пожалейста,думаю увидите мой косяк. Спасибо.
styuf
Что-то не совсем понятно, что вам не дает его запустить. Вы тыкаете кнопку дебаг с жучком и вус ошибку выдает?
Вроде настройки все те, что и у меня.
Kapsik
нажимаю... может быть проблема в настройке дебага?

смущает еще No source available for ""



по поводу ошибки,сайт актела отправляет в настройки проекта,там во вкладе Memory map generator в строке Command прикрепить такстовый файл... Подключая ваш проект я расчитывал на перенос и настроек,но вдруг этого не произошло. Вы производили какие нибудь монипуляции с Tool Settings?
styuf
Все точно так, как у вас.
А вы уверены, что у вас правильно работает отладочная плата? Вы подключили PLL или работаете напрямую от клока?
Только что перезапустил этот проект - у меня работает.
Kapsik
Мда... вы павы, дело то в ПЛЛ. Я проверял его в Либеро. А подключить ПЛЛ это физически питание подключить,все встало на свои места. Огромное спасибо!
styuf
Вот вот. PLL оно такое. Я сам мучился, пока проводок не прокинул на питание PLL-ки. И ведь толком про питание нигде не сказано( Рад что смог помочь!
Kapsik
Чувствую с микросеми я еще натерплюсь, Квартус и Кеил были кудо понятнее Либеро и СофтКонсоль :-)
styuf
А под что вы использовали кейл, если не секрет. Я, так понимаю, точно не nois.
Serge_DVD
Здравствуйте! Есть проблема. Куплен A3PE-STARTER-KIT. Установил Libero SoC v 11.1. Скачал документ ProASIC3/E Proto Kit User’s Guide.pdf Пытаюсь создать простейший проект (помигать светодиодом,опросить кнопку и т.д.). Не получается. В документе, видимо, более старая версия Libero. Создаю проект, создаю файл Count8.vhd из документа. Что дальше делать не знаю. Как собрать проект, запустить симуляцию? Подскажите, пожалуйста. Не судите строго - с ПЛИС сталиваюсь впервые.
Kapsik
Цитата(Serge_DVD @ Sep 22 2013, 20:52) *
Здравствуйте! Есть проблема. Куплен A3PE-STARTER-KIT. Установил Libero SoC v 11.1. Скачал документ ProASIC3/E Proto Kit User’s Guide.pdf Пытаюсь создать простейший проект (помигать светодиодом,опросить кнопку и т.д.). Не получается. В документе, видимо, более старая версия Libero. Создаю проект, создаю файл Count8.vhd из документа. Что дальше делать не знаю. Как собрать проект, запустить симуляцию? Подскажите, пожалуйста. Не судите строго - с ПЛИС сталиваюсь впервые.


Увас не получается создать работающий прект? Содержание не важно,просто порядок действий? Могу сделать скрины пошагово... Только у меня либеро 10. А еще это все же тема про ядро 8051, нам наверное лучше уйти в другую тему или личку.
Kapsik
Цитата(styuf @ Sep 21 2013, 08:58) *
А под что вы использовали кейл, если не секрет. Я, так понимаю, точно не nois.



Писал для Aduc812. Очень не охота перползать на СофтКонсоль, уже возникли проблемы... мне необходимо писать на чистом ассемблере, для этой задачи практически нет чтива и примеров :-( . Вы используете Си? ;-)
styuf
Очень хочется ответить "конечно". Как показывает практика - писание на ассемблере очень полезная вещь для понимания, но для весьма не переносимая от разработчика к разработчику. С чем я недавно и столкнулся: ушел один из разработчиков, и все его наработки придется поднимать с нуля.
Serge_DVD
Цитата(Kapsik @ Sep 20 2013, 11:53) *
Мда... вы павы, дело то в ПЛЛ. Я проверял его в Либеро. А подключить ПЛЛ это физически питание подключить,все встало на свои места. Огромное спасибо!

а можно побробнее? я понимаю, что нужно проводок пробросить, но откуда и куда?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.