Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: POST-card на шине LPC
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
scorpein
Всем привет! Надеюсь, что здесь можно создавать подобные темы. Если нет - пожалуйста перенаправьте... Нужно разработать POST-карту для подключению через интерфейсы PCIe и LPC. Хочу использовать ПЛИС Altera MAX II, который едет ко мне из Китая. Проблема в том, что с ПЛИСами я раньше не работал, но в универе нам раздали темы дипломных проектов и в сжатые сроки нужно попытаться сделать. Если у вас есть какие-то навыки по этой теме - пожалуйста не пройдите мимо. biggrin.gif Буду ооочень благодарен!
Dima_G
Цитата(scorpein @ Apr 12 2017, 16:52) *
Всем привет! Надеюсь, что здесь можно создавать подобные темы. Если нет - пожалуйста перенаправьте... Нужно разработать POST-карту для подключению через интерфейсы PCIe и LPC. Хочу использовать ПЛИС Altera MAX II, который едет ко мне из Китая. Проблема в том, что с ПЛИСами я раньше не работал, но в универе нам раздали темы дипломных проектов и в сжатые сроки нужно попытаться сделать. Если у вас есть какие-то навыки по этой теме - пожалуйста не пройдите мимо. biggrin.gif Буду ооочень благодарен!

ИМХО, MAX2 и PCIe - взаимоисключающие вещи biggrin.gif
По теме: если это предложение работы, есть соответствующий раздел. Если крик утопающего о помощи, то нужно продемонстрировать свои "попытки плыть".
scorpein
Цитата(Dima_G @ Apr 12 2017, 10:01) *
ИМХО, MAX2 и PCIe - взаимоисключающие вещи biggrin.gif
По теме: если это предложение работы, есть соответствующий раздел. Если крик утопающего о помощи, то нужно продемонстрировать свои "попытки плыть".

Вот как, плохо разбирался... Видел, что в имеющихся POST-картах используют MAX7000, поэтому решил, что II подойдёт...
На данный момент у меня есть исходные схемы и файлы прошивки для карты на шине PCI. Сейчас разбираюсь в них.
Dima_G
Цитата(scorpein @ Apr 12 2017, 17:14) *
Вот как, плохо разбирался... Видел, что в имеющихся POST-картах используют MAX7000, поэтому решил, что II подойдёт...
На данный момент у меня есть исходные схемы и файлы прошивки для карты на шине PCI. Сейчас разбираюсь в них.

Так все же - PCI или PCIe? Это разные физические шины.
krux
1) Реализовать интерфейс PCIe на Altera MAX II невозможно. нечем, и мала по объему. В студенческий проект это не влезет по объему работ.
2) Реализовывайте LPC.
LPC - это обрезок от шины ISA, поэтому надо читать документацию на ISA (просто потому что информации по ней больше), и только потом проецируйте прочитанное на шину LPC.
Для подключения к компу - на материнках достаточно часто встречаентся разъем обозначенный "TPM Header" вот на нём LPC и ищите.
при загрузке BIOS на определенных этапах программно выполняет запись в PORT80, это собственно приводит к циклу записи на шине LPC, POST-карта ждёт цикл записи в определенный адрес, и запоминает это значение. Далее это значение выводит светодиодами.
scorpein
Цитата(Dima_G @ Apr 12 2017, 10:16) *
Так все же - PCI или PCIe? Это разные физические шины.

Мне нужно сделать для PCIe и LPC, встречал в продаже карточки на miniPCIe с использованием MAX7000. А у меня есть исходники для карточки с шиной PCI.

Цитата(krux @ Apr 12 2017, 10:17) *
LPC - это обрезок от шины ISA, поэтому надо читать документацию на ISA (просто потому что информации по ней больше), и только потом проецируйте прочитанное на шину LPC.
Для подключения к компу - на материнках достаточно часто встречаентся разъем обозначенный "TPM Header" вот на нём LPC и ищите.
при загрузке BIOS на определенных этапах программно выполняет запись в PORT80, это собственно приводит к циклу записи на шине LPC, POST-карта ждёт цикл записи в определенный адрес, и запоминает это значение. Далее это значение выводит светодиодами.

Да, эту информацию в общех чертах знаю, но бОльший упор почему-то решил вначале сделать на PCIe, т.к. LPC шина не всегда выведена как разъём, к которому можно подключиться "без паяльника". В таком случае какой же ПЛИС мне использовать? MAX 7000?
Dima_G
Цитата(scorpein @ Apr 12 2017, 17:43) *
Да, эту информацию в общех чертах знаю, но бОльший упор почему-то решил вначале сделать на PCIe, т.к. LPC шина не всегда выведена как разъём, к которому можно подключиться "без паяльника". В таком случае какой же ПЛИС мне использовать? MAX 7000?

Скорее всего, смотреть нужно на семейство циклон-5.
Вы планируете в железе реализовать диплом? Или только на бумаге?
Если в железе, лучше поискать готовую отладочную плату FPGA+PCIe.
krux
Для того чтобы заработал PCIe Root Port должен начаться процесс энумерации шин PCI/PCIe.
поскольку эта энумерация происходит на достаточно поздних этапах работы BIOS, информативность POST-карточки в PCIe слоте минимальна.
поэтому PCIe для этого не используют, от слова совсем.
Вместо этого, например на ноутбучных материнках, сделано следующее: для вывода POST-кодов используется шина SMbus, торчащая из южного моста и выведенная на MiniPCIe разъем. соответственно POST-карта под MiniPCIe использует контакты SMBus, и работает как i2c slave.
scorpein
Цитата(Dima_G @ Apr 12 2017, 10:47) *
Скорее всего, смотреть нужно на семейство циклон-5.
Вы планируете в железе реализовать диплом? Или только на бумаге?
Если в железе, лучше поискать готовую отладочную плату FPGA+PCIe.

В железе. Но цена такой платы мягко говоря высока для меня. 05.gif

Цитата(krux @ Apr 12 2017, 10:58) *
Для того чтобы заработал PCIe Root Port должен начаться процесс энумерации шин PCI/PCIe.
поскольку эта энумерация происходит на достаточно поздних этапах работы BIOS, информативность POST-карточки в PCIe слоте минимальна.
поэтому PCIe для этого не используют, от слова совсем.
Вместо этого, например на ноутбучных материнках, сделано следующее: для вывода POST-кодов используется шина SMbus, торчащая из южного моста и выведенная на MiniPCIe разъем. соответственно POST-карта под MiniPCIe использует контакты SMBus, и работает как i2c slave.

Т.е. не имеет смысла пытаться делать карту для десктопных материнских на PCIe... В продаже есть miniPCIe POST карты. Там используется MAX7000 (по фотографиям) и выводятся коды на семисегм-й индикатор...
AVR
Цитата(scorpein @ Apr 12 2017, 14:04) *
В железе. Но цена такой платы мягко говоря высока для меня. 05.gif
Т.е. не имеет смысла пытаться делать карту для десктопных материнских на PCIe... В продаже есть miniPCIe POST карты. Там используется MAX7000 (по фотографиям) и выводятся коды на семисегм-й индикатор...

А можно ссылку на одну из таких карт? Некоторые, как и я, были сбиты с толку словом "PCIe". Какая требуется задача?
Выше заметили что у miniPCIe есть не только PCIe шина, но и другие (вероятно SMBus/I2C и USB) - тогда при чем тут PCIe?
scorpein
Цитата(AVR @ Apr 12 2017, 11:34) *
А можно ссылку на одну из таких карт?

http://dealextreme.com.ua/product/3-in-1-m...ard-for-laptop/

Цитата(AVR @ Apr 12 2017, 11:34) *
А можно ссылку на одну из таких карт? Некоторые, как и я, были сбиты с толку словом "PCIe". Какая требуется задача?
Выше заметили что у miniPCIe есть не только PCIe шина, но и другие (вероятно SMBus/I2C и USB) - тогда при чем тут PCIe?

Да, понял. Т.е. я указал на шину PCIe, но в действительности разъём PCIe... Упустил из виду тот факт, что в разъём miniPCIe подведена другая шина...
scorpein
Всем большоооое спасибо за ответы!!! Думаю, имеет смысл создать новую тему и всё правильно там указать. Кстати, как удалить эту тему? rolleyes.gif

Цитата(scorpein @ Apr 12 2017, 14:20) *
Всем большоооое спасибо за ответы!!! Думаю, имеет смысл создать новую тему и всё правильно там указать. Кстати, как удалить эту тему? rolleyes.gif

А нет, отредактировал эту тему. В таком случае, вопрос звучит иначе. Необходимо разработать POST-карту на шине LPC, которая будет базироваться на Altera MAX II. Сейчас буду углубляться в саму шину LPC. И очень жду помощи. biggrin.gif
scorpein
Добрый день! Ну или у меня уже вечер... Мноожество часов исканий, почему-то, не принесли большого плода. Возможно искал не там или не так... Нашёл следующее: в ноутбучных miniPCIe разъёмы чаще всего разведены шина LPC (только разводка разная, нестандартизированная) и Compal Debug... Ну и, собственно, в десктопных материнских LPC можно встретить в разъёме TPM. Но вот как обратиться к 80 (например) порту, используя LPC - ничего такого не нашёл. По поводу прошивки ПЛИС тоже ничего не смог найти...

А вообще я планировал сделать устройства типа такого (изображение).

И выводить пост коды и доп.информацию по ним на дисплей.
Для этого буду использовать ардуинку на 328 атмеге, куда должны передаваться данные с ПЛИС, а с микро-ра, соответственно информация на дисплей.
scorpein
Нашёл одну прошивку на испанском форуме. wacko.gif Кто-нибудь может глянуть? Прошивка для LPC
scorpein
Добрый день всем! Возникла необходимость в ПЛИС выделить некоторую область памяти в качестве буфера и потом с него передавать данные на микроконтроллер. Кто-нибудь может что либо подсказать по данной теме?
Golikov A.
можем вам только разрешить это сделатьsm.gif

можно описать память

Код
reg [ADDR_S - 1 : 0] Addr;
reg [DATA_S - 1 : 0] Data [(2 ** ADDR_S) - 1 : 0];

always @(posedge clk)
   Addr <= addr_in;

always @(posedge clk)
   if(write_en)
      Data[addr_in] <= data_in;

assign data_out = Data[Addr];


это обычная память которая в 99% случаев автоматически укладывается синтезатором в специализированные блоки если они есть, или делается на регистрах если их нет. Можно явно использовать блоки
Можно использовать мего-функцию генератор. Как вам больше нравится. Можно найти шаблон описания памяти от производителя, в том числе и 2 портовой, если надо.
scorpein
Цитата(Golikov A. @ May 23 2017, 15:33) *
можем вам только разрешить это сделатьsm.gif

можно описать память

Код
reg [ADDR_S - 1 : 0] Addr;
reg [DATA_S - 1 : 0] Data [(2 ** ADDR_S) - 1 : 0];

always @(posedge clk)
   Addr <= addr_in;

always @(posedge clk)
   if(write_en)
      Data[addr_in] <= data_in;

assign data_out = Data[Addr];


это обычная память которая в 99% случаев автоматически укладывается синтезатором в специализированные блоки если они есть, или делается на регистрах если их нет. Можно явно использовать блоки
Можно использовать мего-функцию генератор. Как вам больше нравится. Можно найти шаблон описания памяти от производителя, в том числе и 2 портовой, если надо.


Ого! Спасибо! biggrin.gif А на каком языке этот код? laughing.gif
Golikov A.
на английскомsm.gif это Verilog
scorpein
Цитата(Golikov A. @ May 24 2017, 16:46) *
на английскомsm.gif


ну не на русском точно))
не сочтите за наглость, но можно ли такое написать на VHDL? Просто Verilog я вообще не знаю, а VHDL сейчас изучаю и прошивка на нём..
Golikov A.
Код
process(all)
begin
  if (clk'event and clk = '1') then
    Addr <= addr_in;
    if(we) then
       Data[addr_in] <= data_in;
    end if;
  end if;
end process;

process(all)
   data_out <= Data[Addr];
end process;


вроде как то так, я давно на VHDL не писал
scorpein
Цитата(Golikov A. @ May 24 2017, 18:10) *
Код
process(all)
begin
  if (clk'event and clk = '1') then
    Addr <= addr_in;
    if(we) then
       Data[addr_in] <= data_in;
    end if;
  end if;
end process;

process(all)
   data_out <= Data[Addr];
end process;


вроде как то так, я давно на VHDL не писал


Благодарю!!!!!! Шас буду смотреть, что получится...
Не могли бы вы дать краткое описание этого кода, потому как застрял на объекте "we", ну и остальное, чтобы не затормозить сильно.. help.gif
AVR
Если затруднения с ПЛИС, то может сделать этот простой интерфейс на микроконтроллере? Тайминги позволят?
Golikov A.
we - write enable внешний сигнал разрешения записи в память, если он один то то что на входе data_in попадает в ячейку с номером addr_in.
data_in - вход шины данных
addr_in - вход шины адреса

на data_out выдаются данные из ячейки с номером addr_in, но выдаются на следующем такте (так в памятях принято).
то есть выставляете addr_in, и на следующем такте можете забирать данные, а если хотите записать, то выставляете
addr_in, data_in, и we и данные будут записаны

как то так... на самом деле в книжке должно быть написано как память описывается. Если такой код вызывает затруднения, то надо сделать шаг назад и еще почитать основы, чуть сильнее
scorpein
Цитата(AVR @ May 25 2017, 19:37) *
Если затруднения с ПЛИС, то может сделать этот простой интерфейс на микроконтроллере? Тайминги позволят?

Дело в том, что я получаю на ПЛИС данные с шины LPC, а далее мне необходимо их передать на МК. Так как частоты шины и МК не совпадают, появилась идея создания некой буферной памяти, откуда данные будут уже на частоте МК передаваться.

Цитата(Golikov A. @ May 25 2017, 19:50) *
we - write enable внешний сигнал разрешения записи в память, если он один то то что на входе data_in попадает в ячейку с номером addr_in.
data_in - вход шины данных
addr_in - вход шины адреса

на data_out выдаются данные из ячейки с номером addr_in, но выдаются на следующем такте (так в памятях принято).
то есть выставляете addr_in, и на следующем такте можете забирать данные, а если хотите записать, то выставляете
addr_in, data_in, и we и данные будут записаны

как то так... на самом деле в книжке должно быть написано как память описывается. Если такой код вызывает затруднения, то надо сделать шаг назад и еще почитать основы, чуть сильнее

Спасибо большое за пояснения! Был бы рад сделать шаг назад, но время играет против меня.. wacko.gif
scorpein
Я попробовал выделить память "штатными" средствами, которые предлагает сам Quartus. Пожалуйста посмотрите код...
CODE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.STD_LOGIC_ARITH.ALL;
--use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity LPC_IOW80 is

-- разрядность шин
generic
(
DATA_WIDTH : natural := 3;
ADDR_WIDTH : natural := 5
);

Port
(
lclk: in std_logic; -- LPC: 33MHz clock (rising edge)
lframe_n: in std_logic; -- LPC: frame, active low
lreset_n: in std_logic; -- LPC: reset, active low
lad: in std_logic_vector(3 downto 0); -- LPC: multiplexed bus

--назначение портов для памяти
addr : in natural range 0 to 2**ADDR_WIDTH - 9;

we : in std_logic := '1';
q : out std_logic_vector((2**DATA_WIDTH -5) downto 0)

);
end LPC_IOW80;

architecture RTL of LPC_IOW80 is
type LPC_State_Type is
(
IDLE, -- Waiting for a start condition
START, -- Start condition detected
WADDN3, -- I/O write address nibble 3 (A15..A12)
WADDN2, -- I/O write address nibble 2 (A11..A8 )
WADDN1, -- I/O write address nibble 1 (A7..A4)
WADDN0, -- I/O write address nibble 0 (A3-A0)
WDATN1, -- I/O write data nibble 0 (D7..D4)
WDATN0, -- I/O write data nibble 1 (D3..D0)
WHTAR0, -- I/O write host turn around phase 0
WHTAR1, -- I/O write host turn around phase 1
WSYNC, -- I/O write sync
WPTAR -- I/O write peripheral turn around
);

signal LPC_State: LPC_State_Type;
signal lframe_nreg: std_logic; -- LPC frame register
signal lad_rin: std_logic_vector(lad'range); -- LPC input registers
signal W_Data: std_logic_vector(7 downto 0); -- LPC input Post Code

-- создание массивов и объявление RAM
-- Build a 2-D array type for the RAM
subtype word_t is std_logic_vector((2**DATA_WIDTH-5) downto 0);
type memory_t is array(2**ADDR_WIDTH-9 downto 0) of word_t;

-- Declare the RAM signal.
signal ram : memory_t;

-- Register to hold the address
signal addr_reg : natural range 0 to 2**ADDR_WIDTH-9;


begin
---------------------------------------------------------------------------
-- LPC bidirectional pins definition.
---------------------------------------------------------------------------
-- Input register to get some timing margin
P_input_register: process(lclk)
begin
if (lclk'event and lclk='1') then
lad_rin <= lad;
lframe_nreg <= lframe_n;
end if;
end process;
---------------------------------------------------------------------------
-- LPC state machine
-- LPC_State value is actually one clock cycle late.
---------------------------------------------------------------------------
P_LPC_StatMachine: process(lclk)
begin
if (lclk'event and lclk='1') then
-- Synchronous reset
if (lreset_n = '0') then
LPC_State <= IDLE;
W_Data(7 downto 0) <= "00000000"; -- init. both displays to all on
else
case LPC_State is
-- Looking for a START condition
when IDLE =>
if (lframe_nreg = '0') and (lad_rin = "0000") then
LPC_State <= START; -- START condition detected
end if;
-- Skip extra cycles on START frame
-- (can be many clock cycles)
-- and then, check for I/O write transaction
when START =>
if (lframe_nreg = '0') then -- frame still asserted
if (lad_rin /= "0000") then
LPC_State <= IDLE; -- unsupported start code
end if;
else
if (lad_rin(3 downto 1) = "001") then
LPC_State <= WADDN3; -- I/O write detected
else
LPC_State <= IDLE; -- unsupported command
end if;
end if;
-- --------------------------------
-- I/O write transaction processing
-- --------------------------------
when WADDN3 => -- Write Data Address Nibble 3
-- Find next state
if (lframe_nreg = '0') or (lad_rin /= "0000") then
LPC_State <= IDLE; -- abort cycle, bad frame
-- or address mismatch
else
LPC_State <= WADDN2;
end if;
when WADDN2 => -- Write Data Address Nibble 2
-- Find next state
if (lframe_nreg = '0') or (lad_rin /= "0000") then
LPC_State <= IDLE; -- abort cycle, bad frame
-- or address mismatch
else
LPC_State <= WADDN1;
end if;
when WADDN1 => -- Write Data Address Nibble 1
-- Find next state
if (lframe_nreg = '0') or (lad_rin /= "1000") then
LPC_State <= IDLE; -- abort cycle, bad frame
-- or address mismatch
else
LPC_State <= WADDN0;
end if;
when WADDN0 => -- Write Data Address Nibble 0
-- Find next state
if (lframe_nreg = '0') or (lad_rin /= "0000") then
LPC_State <= IDLE; -- abort cycle, bad frame
-- or address mismatch
else
-- Write address valid. Subsequent Data displays.
LPC_State <= WDATN0; -- Next state will get
-- first data nibble
end if;
when WDATN0 => -- Data LSN (Least Significant Nibble)is
-- sent first
W_Data(3 downto 0) <= lad_rin; -- latch data (LSN)
if (lframe_nreg = '1') then
LPC_State <= WDATN1; -- Next state gets
-- 2nd data nibble
else
LPC_State <= IDLE;
end if;
when WDATN1 => -- Data MSN (Most Significant Nibble)
W_Data(7 downto 4) <= lad_rin; -- latch data (MSN)
if (lframe_nreg = '1') then
LPC_State <= WHTAR0;
else
LPC_State <= IDLE;
end if;
when WHTAR0 => -- Write Data Turn Around Cycle 0
if (lframe_nreg = '1') and (lad_rin = "1111") then
LPC_State <= WHTAR1;
else
LPC_State <= IDLE;
end if;
when WHTAR1 => -- Write Data Turn Around Cycle 1
if (lframe_nreg = '1') then
LPC_State <= WSYNC;
else
LPC_State <= IDLE;
end if;
when WSYNC => -- Write Data Sync Cycle
-- Note: No device to respond with a synch at I\O addr
-- 080h. Therefore bus should time out and abort.
-- State ==> to IDLE
if (lframe_nreg = '1') then
LPC_State <= WPTAR;
else
LPC_State <= IDLE;
end if;
when WPTAR => -- Write Data Final Turn Around Cycle
-- (not needed -- see WSYNC)
LPC_State <= IDLE; -- I/O write cycle end
when others =>
LPC_State <= IDLE; -- all other cases
end case;
end if;
end if;
end process;

--данные с шины по тетраде помещаются в ram
process(lclk)
begin
if(rising_edge(lclk)) then
if(we = '1') then
ram(addr) <= W_data(7 downto 4);
end if;

-- Register the address for reading
addr_reg <= addr;
end if;
if(rising_edge(lclk)) then
if(we = '1') then
ram(addr) <= W_data(3 downto 0);
end if;

-- Register the address for reading
addr_reg <= addr;
end if;
end process;

--собственно вывод данных
q <= ram(addr_reg);


end RTL;
scorpein
Только что предложили использовать внешнюю RAM-память. Модуль на 128 кб. Должны подвезти. Наверное, будет лучше использовать такой вариант...

Привезли память UM61256K-15 (аналог IS61C256AH). Теперь нужно передавать на неё байты данных с ПЛИС и считывать их МК. Подскажите по этой теме? help.gif
Golikov A.
Обожаю такие решения%)
Я бы предложил вам использовать профессиональных инженеров, их найти труднее чем СРАМ, но и выхлоп будет лучше.

Подсказываю по теме. Берет и используете.
Память однопортовая, поэтому доступ к ней будет иметь одновременно только 1 устройство. В вашем случае это будет ПЛИС. Поэтому в ПЛИС вам надо организовать механизм арбитража доступа к памяти. Чтобы плис могла писать в нее когда ей надо, и предоставлять процессору доступ на чтение когда ему надо. Внутри вы могли сделать 2 портовую память и лазить в нее без арбитража, а тут наслаждайтесь проектированиемsm.gif

Вы интерфейс проц - плис то наладили? Может с него начать, а не с памяти?
scorpein
Цитата(Golikov A. @ May 26 2017, 12:47) *
Обожаю такие решения%)
Я бы предложил вам использовать профессиональных инженеров, их найти труднее чем СРАМ, но и выхлоп будет лучше.

Подсказываю по теме. Берет и используете.
Память однопортовая, поэтому доступ к ней будет иметь одновременно только 1 устройство. В вашем случае это будет ПЛИС. Поэтому в ПЛИС вам надо организовать механизм арбитража доступа к памяти. Чтобы плис могла писать в нее когда ей надо, и предоставлять процессору доступ на чтение когда ему надо. Внутри вы могли сделать 2 портовую память и лазить в нее без арбитража, а тут наслаждайтесь проектированиемsm.gif

Вы интерфейс проц - плис то наладили? Может с него начать, а не с памяти?


Использовать внешнюю память приходится из-за малого числа вентилей в моём ПЛИС - всего 240. Та прошивка, которую выкладывал выше забила его на 95%.
Сейчас как раз обдумываю арбитраж.
С интерфейсом ещё ничего не решилось. laughing.gif На просторах интернета в основном решения передачи от МК к ПЛИСу, не уверен, что это мне подойдёт.
Golikov A.
так это CPLD что ли? Ну так можете бросать это дело... CPLD у вас может выполнять только функцию преобразования SPI в параллельную шину для памяти от проца, больше его ни на что не хватит... С другой стороны можно взять любой АРМ и FRAM к нему как внешнюю оперативку и всех делов...
scorpein
Цитата(Golikov A. @ May 26 2017, 14:04) *
функцию преобразования SPI в параллельную шину для памяти от проца

Прошу прощения, но не я не совсем понял, в чём смысл этой функции, относительно задачи.. wacko.gif
Менять устройство, к сожалению, уже невозможно. Нужно делать с этим. laughing.gif

Почему Quartus ругается на
Код
            io[addr] <= W_data(7 downto 0);

или
Код
Data[addr_in] <= data_in;


Постоянно ошибка Error (10500): VHDL syntax error at LPC_IOW80.vhd(185) near text "<="; expecting "(", or "'", or "." sad.gif
Golikov A.
думаю ему биты и в источнике, и в приемнике нужны.
ну и массив данных надо объявить.
А еще там есть какая-то фигня с преобразованием векторов в число при выборе из массива и подобные приколы круто типизированного VHDL...


Цитата
Прошу прощения, но не я не совсем понял, в чём смысл этой функции, относительно задачи..

в том что делать надо все на проце. а CPLD использовать по минимуму как расширитель числа ног проца и все. На большее ее все равно не хватит.
scorpein
Цитата(Golikov A. @ May 26 2017, 15:32) *
думаю ему биты и в источнике, и в приемнике нужны.
ну и массив данных надо объявить.
А еще там есть какая-то фигня с преобразованием векторов в число при выборе из массива и подобные приколы круто типизированного VHDL...

Спасибо! Попробую что-нибудь...
Цитата
в том что делать надо все на проце. а CPLD использовать по минимуму как расширитель числа ног проца и все. На большее ее все равно не хватит.

Хм... Сейчас он у меня успешно считывает данные с 80 порта и выводит на семисегментные индикаторы. Но только теперь мне нужно эти данные не выводить на индикаторы, а передать в память. А роль МК - считать их и обработать и т.д....
Golikov A.
После того как он их считал и вывел сколько еще места осталось в процентах?
Или с памятью это альтернатива?
А МК чтобы их в какой-то усб преобразовать что ли?
Тогда лучше память подключить к МК, читать данные с 80 порта в МК. А тот пусть сам складывает в память или отдает кому-то дальше. Учитывая что память параллельная, может быть подключить через ПЛИС, но без арбитра и логики, пусть МК всем рулит.
scorpein
Цитата(Golikov A. @ May 26 2017, 16:59) *
После того как он их считал и вывел сколько еще места осталось в процентах?
Или с памятью это альтернатива?
А МК чтобы их в какой-то усб преобразовать что ли?
Тогда лучше память подключить к МК, читать данные с 80 порта в МК. А тот пусть сам складывает в память или отдает кому-то дальше. Учитывая что память параллельная, может быть подключить через ПЛИС, но без арбитра и логики, пусть МК всем рулит.

Точно не помню, но больше 50%. Зачем вообще нужна память - шина, с которой берутся данные работает на частоте 33МГц, а МК на частоте 16МГц. Поэтому память используется в качестве буфера - в неё помещаются на высокой частоте данные от ПЛИСа, а МК уже на своей частоте эти данные извлекает и в зависимости от полученных данных выводит информацию на дисплей.
Но здесь обязательно считывать данные с шины именно в ПЛИС.

Кстати, можно ли совместить файл на языке VHDL и файл схем и залить всё это в ПЛИС? laughing.gif
Golikov A.
можно любые комбинации, можно даже Verilog в VHDL засунуть

неужели ПЛИС+дохлый контроллер, дороже какого-либо STM маленького, который сможет на хотя бы 72 МГц работать?

ну можно только пожелать вам удачиsm.gif
scorpein
Цитата(Golikov A. @ May 26 2017, 18:38) *
можно любые комбинации, можно даже Verilog в VHDL засунуть

неужели ПЛИС+дохлый контроллер, дороже какого-либо STM маленького, который сможет на хотя бы 72 МГц работать?

ну можно только пожелать вам удачиsm.gif

sm.gif Я бы с радостью взял что-то другое, но это моя дипломная работа. Выбора нет. biggrin.gif Поэтому и нужна помощь, так как сроки очень жмут.))
Golikov A.
а руководитель что?
А что диплом... диплом бумажка, напишите что все влезлоsm.gif и слайдики покрасивше...


берете ваш 1 проект, только вместо вывода на 7 сегментник пихаете в память (подняли we сигнал, данные на шину, адрес увеличиваете счетчиком).
Проц ногу какую-либо опустил в 0, вы с шины в память пихаете.
Проц это ногу поднял, вы из памяти в проц. пихаете.
Ну или плис просто тупо в едином рабочем цикле из шины в память из памяти в проц, и по кругу.

Более сложные арбитры думаю уже не влезут.
scorpein
Цитата(Golikov A. @ May 26 2017, 20:04) *
а руководитель что?

"Делай быстрее..." biggrin.gif
Цитата
А что диплом... диплом бумажка, напишите что все влезлоsm.gif и слайдики покрасивше...

Да, но устройство должно работать. sm.gif

Цитата
берете ваш 1 проект, только вместо вывода на 7 сегментник пихаете в память (подняли we сигнал, данные на шину, адрес увеличиваете счетчиком).
Проц ногу какую-либо опустил в 0, вы с шины в память пихаете.
Проц это ногу поднял, вы из памяти в проц. пихаете.
Ну или плис просто тупо в едином рабочем цикле из шины в память из памяти в проц, и по кругу.

Более сложные арбитры думаю уже не влезут.

Так, в принципе, на данный момент и пробую реализовать. Только возникают некоторые непонятные сложности. Например, с той ошибкой, которую писал выше.
Спасибо! sm.gif
krux
Цитата(scorpein @ May 26 2017, 17:33) *
Да, но устройство должно работать. sm.gif

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