реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Начало работы с 8051 на FPGA фирмы Actel, Воопросы, возникающие при первом знакомстве с 8051.
styuf
сообщение Apr 1 2013, 04:58
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



Предлагаю сделать тему для тех, у кого возникли вопросы при первом знакомстве с софт-микроконтролером 8051 на FPGA фирмы Actel.

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

Что бы быть немного конкретней: в настройка 8051 я указал память без проверки по сигналу акноледж, выбрал two ports ram без pipe-line. Сколь тактов задержки я должен указать в настройках 8051-го?

Сообщение отредактировал styuf - Apr 1 2013, 07:32
Go to the top of the page
 
+Quote Post
doublekey
сообщение Apr 1 2013, 09:13
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 28-01-08
Из: Zelenograd
Пользователь №: 34 503



Делаю как-то так:
Код
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 для ядра.
Go to the top of the page
 
+Quote Post
styuf
сообщение Apr 1 2013, 09:54
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



Вот еще бы verilog понимать)
В целом ясно, но есть вопросы: почему вы берете stretch и wait time по одному? Это получается у стандартных блоков памяти задержки от выставления адреса до появления данных 2 такта без галочки на pipe-line?
Я вроде посимулировал память, что бы понять как роботают two ports ram блоки. Завтра на работе гляну результаты симуляции и сформулирую вопрос точнее.

Сообщение отредактировал styuf - Apr 1 2013, 10:03
Go to the top of the page
 
+Quote Post
doublekey
сообщение Apr 1 2013, 12:00
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 28-01-08
Из: Zelenograd
Пользователь №: 34 503



При работе с памятью программ один такт требуется, чтобы защёлкнуть выставленный ядром адрес в rom.addr_reg, плюс задержка на установление данных на выходе памяти ещё один такт, вроде бы так. Во всяком случае у меня с меньшим WAIT_VAL не работало на симуляторе.
Go to the top of the page
 
+Quote Post
styuf
сообщение Apr 2 2013, 03:27
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



А к вопросу симуляции 8051го: что нужно увидить при симуляции, что бы понять, что он работает?
Прочитав хэндбук по 8051s я не осознал, что я должен увидить на выходе симуляции. Кроме генерации адресов команд и данных?
Там написано, что поддерживается только BFM симуляция, на которой нельзя увидеть симуляции с реальным кодом в памяти. Что бы вы посоветовали для уверенности в работоспособности 8051го?

И еще - зачем вообще создана галочка pipeline в настройках памяти?
Это общий вопрос. Мне приходит в голову только то, что за счет дополнительного конвеера, можно увеличить частоту работы памяти. Но с другой стороны наличие уже двух тригеров на адресе и данных полностью исчерпывают возможности к дополнительному конвееру.

Сообщение отредактировал styuf - Apr 2 2013, 09:22
Go to the top of the page
 
+Quote Post
styuf
сообщение Apr 2 2013, 10:56
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



Добрался я до написания софта.
Вопрос такой: какой алгоритм создания .h файлов для различных блоков переферии, например таймера и т.п.?
Генерятся ли они автоматически средой или нет?

Сообщение отредактировал styuf - Apr 2 2013, 11:02
Go to the top of the page
 
+Quote Post
styuf
сообщение Apr 3 2013, 09:41
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



Что-бы не быть голословным распишу по порядку свои действия:
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 шина никак не меняется?

Сообщение отредактировал styuf - Apr 3 2013, 12:53
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Apr 4 2013, 12:44
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



bb-offtopic.gif А на какой у вас частоте работает 8051?
Go to the top of the page
 
+Quote Post
styuf
сообщение Apr 4 2013, 12:45
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



10 МГц, генерируемых PLL.
Go to the top of the page
 
+Quote Post
styuf
сообщение Apr 5 2013, 06:30
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



И новый вопрос)!
Написал я програмку, запихал её в память CODE. Даже получилось отсимулировать в самой просто симуляции (еще до синтеза). 8051й, как ему и положено, начинает работать и, даже, выставлять правильные сигналы на APB шину (если кому интересно, могу показать результат симуляции). Но вот беда - на симуляциях уровнем выше (или ниже, смотря откуда смотреть rolleyes.gif , имеется ввиду те, которые после синтеза или после размещения на кристалле) процессор вообще не подает признаков жизни.
И вопрос такой: поддерживает ли Libero полноценную симуляцию процессора или нет?
И может кто поделится простым проектом с IP-ядром 8051s, который точно работал. Был бы очень благодарен!

Сообщение отредактировал styuf - Apr 5 2013, 06:33
Go to the top of the page
 
+Quote Post
skv
сообщение Apr 8 2013, 15:21
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 23-12-04
Пользователь №: 1 636



Цитата(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 в дебаггере ПО. Пишу тестовые программы и отлаживаю. На симуляции все не проверишь. Да и ресурсов много надо.
Если будет время постараюсь к концу недели собрать тестовый проект с комментариями.
Go to the top of the page
 
+Quote Post
styuf
сообщение Apr 9 2013, 02:43
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



Цитата(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 - Apr 9 2013, 02:44
Go to the top of the page
 
+Quote Post
styuf
сообщение Apr 11 2013, 09:25
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



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


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

Остался такой вопрос - как правильно организовать прошивку процессора? Что лучше использовать и возможна ли прошивка через стандартный jtag?
Go to the top of the page
 
+Quote Post
StarG
сообщение Jun 24 2013, 10:47
Сообщение #14





Группа: Участник
Сообщений: 8
Регистрация: 15-02-10
Пользователь №: 55 502



Добрый день.
Очень интересно, чем закончилась экзекуция ядра Core8051.
Получили ли вы работающий проект? Если да, то не могли бы вы его здесь выложить?
Go to the top of the page
 
+Quote Post
styuf
сообщение Jun 26 2013, 04:23
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 4-02-10
Пользователь №: 55 287



Извините за задержку!
Экзекуция прошла вполне успешно. В итоге даже запустил програмку, которая светила светодиодами и реагировала на кнопочки. На этом пришлось остановится, така надо было допиливать схему под ральную плату, а не играться с отладочником.
Единственное, от чего мне не по душе - отсутствие на отладочнике энергонезависимой памяти. Как следствие прошивку приходилось заливать из под 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;


Это код топ-файла в моем проекте. Все подкомпоненты стандартные, сам я их не правил.
Если будут вопросы - спрашивайте! Постараюсь ответить.
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01621 секунд с 7
ELECTRONIX ©2004-2016