Перейти к содержанию
    

Не могу понять,но при записи в порт 16-ричного слова,содержимое старших разрядов копирует содержимое младших разрядов,помогите разобраться в чём проблема.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity test_PC104 is
Port ( d : inout  STD_LOGIC_VECTOR (15 downto 0);
a : in  STD_LOGIC_VECTOR (15 downto 0);
prog_clk : out STD_LOGIC_VECTOR (15 downto 0);
IO_CS16 : out STD_LOGIC;
aen : in  STD_LOGIC;
ior : in  STD_LOGIC;
iow : in  STD_LOGIC);
end test_PC104;
architecture Behavioral of test_PC104 is
signal pr_clk : STD_LOGIC;
begin
pr_clk<='1' when conv_integer(a) = 63493 and aen='0' else '0';
IO_CS16<='0' when pr_clk='1' else '1';
process
begin 
    wait UNTIL iow'event AND iow='1';
if pr_clk='1' then
        prog_clk<=d;
        end if;
end process;
end Behavioral;

Изменено пользователем darkniisiis

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почту глянь! я те скинул свой старый проект для ISA шины на PC104.

Вопросы будут, пиши в личку !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

надо писать по чётным адресам, или анализировать SBHE. В твоем случае будут реализованы 2 цикла записи. На шине данных будут выставлены :

1 цикл D[15:0] AL AL

2 цикл D[15:0] 0 AH

т.е. все работает как и должно.

вообще это зависит от адреса, при других адресах будет другое. хорошо описано у Гука: Аппаратные интерфейсы ПК. 2002. Могу скинуть, ежели чего.

 

а зачем адрес 16-разрядный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почту глянь! я те скинул свой старый проект для ISA шины на PC104.

Вопросы будут, пиши в личку !

К сожелению письмо c проектом не дошло,повтори ,пожалуйста,на адрес [email protected]

 

надо писать по чётным адресам, или анализировать SBHE. В твоем случае будут реализованы 2 цикла записи. На шине данных будут выставлены :

1 цикл D[15:0] AL AL

2 цикл D[15:0] 0 AH

т.е. все работает как и должно.

вообще это зависит от адреса, при других адресах будет другое.

пока не совсем понял,как же мне всё-таки добиться AL AH

хорошо описано у Гука: Аппаратные интерфейсы ПК. 2002. Могу скинуть, ежели чего.

Если не сложно

а зачем адрес 16-разрядный?

так в тех задании написано :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пока не совсем понял,как же мне всё-таки добиться AL AH

 

Писать-читать по чётным адресам. Тогда все будет в одном цикле шины. 63493 - нечётный. Адресация портов в ISA 10-разрядная.

 

Гук:

http://www.rapidshare.ru/346083

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так nSBHE отрабатываю:

    reg [15 : 0] r_Data;
    ...
        if(~SA[0])   r_Data[7 : 0]  <= SD[7:0];    // Младший байт
        if(~nSBHE) r_Data[15 : 8] <= SD[15:8];    // Старший байт

Универсальный подход получается: можно писать "по частям".

 

И кстати ... nIOCS16 в актив полезно выставлять как можно раньше, желательно во втором адресном цикле при BALE = 1, а то и ранее, иначе цикл разбивается на 2 по 8. Для чипсета National CS5530x это точно так.

Изменено пользователем LMT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И кстати ... nIOCS16 в актив полезно выставлять как можно раньше, желательно во втором адресном цикле при BALE = 1, а то и ранее, иначе цикл разбивается на 2 по 8. Для чипсета National CS5530x это точно так.

 

По спецификации АТ96 IOCS16 должен быть выставлен не позднее 80 нс после установки адреса.

А что за плату с чипстетом CS5530x используете? Не Fastwel CPC203 часом?

Блочные ДМА пересылки на этом чипсете не пробыли организовать? У меня какие то странные глюки при этом возникают. И в фаствеле молчат. Лето, блин!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По спецификации АТ96 IOCS16 должен быть выставлен не позднее 80 нс после установки адреса.

Эх, их ещё соблюдал бы кто. Натыкался в одном источнике на тезис о раннем nIOCS16 (ссылку посеял к сожалению). Но в книге "ISA System Architecture" указано, что сигнал этот сэмплируется хостом в середине второго цикла обмена данными. И для CS5530 16-ти разр. обмен не выполняется, если опустить сигнал на negeedge ISACLK предыдущего первого. Только, если во втором адресном цикле при дешифрации.

 

А что за плату с чипстетом CS5530x используете? Не Fastwel CPC203 часом?

 

National Semiconductors CS5530A везде один. Мы используем Advantech PCM5820, PCM5824, PCM3350.

 

Блочные ДМА пересылки на этом чипсете не пробыли организовать? У меня какие то странные глюки

при этом возникают. И в фаствеле молчат. Лето, блин!

 

Да, сейчас стоит задача организовать переброску данных с платы сбора и промежуточной обработки на хост. Я пробовал 16-ти разрядный ПДП в режимах "Single" и "On demand" на частотах ISA CLK 8.33, 11.1 и 16.2 МГц. "Single" работает на всех, "On demand" (почти как Packet) работает только на первых двух.

Изменено пользователем LMT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, сейчас стоит задача организовать переброску данных с платы сбора и промежуточной обработки на хост. Я пробовал 16-ти разрядный ПДП в режимах "Single" и "On demand" на частотах ISA CLK 8.33, 11.1 и 16.2 МГц. "Single" работает на всех, "On demand" (почти как Packet) работает только на первых двух.

 

"Single" у меня тоже работает на всех частотах. "On demand" не пробывал.

А с "Packet" такая бяка возникает:

При пересылке данных из внешнего устройства в контроллер DMA правильно пересылается только последнее слово, причём оно помещается в память в первый адрес буфера. Остальные часть буфера забита какой то ерундой. Это не зависит от длины DMA-цикла. На диаграмме пересылается 4 слова: 0039h, 0162h, 0239h, 0102h. Содержимое памяти после пересылки: 0102h, dcc4h, 3137h, 1133h. Проверял при разных пересылаемых значениях и длинах DMA-цикла. Правильно передаётся только последнее слово.

Особенно странно выглядит шина адреса. Первое значение 1Е0 правильное, а дальше фигня какая-то. Я наблюдал только 10 бит адреса.

Хотя, как я думаю, адрес на шине ISA при пересылке в PCI-память значения не имеет, но все равно не очень ясно.

Я правильно снимаю DRQ после прихода DACK?

Еще мне не понятно почему DACK заканчивается раньше чем последний IOR. Или я чего не правильно понимаю?

post-4410-1184748564_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Писать-читать по чётным адресам.

Получается тогда теряется старший байт

Изменено пользователем darkniisiis

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде как адрес вообще не имеет отношения к абоненту на ИСЕ при ПДП. Вопрос: Вы как программируете контроллер ПДП у CS5530 ? По моим наблюдениям он нормально не выполняет Extended Write и Compressed Time режимы передачи. Только Normal. При этом один цикл обмена занимает 6 тактов ISA CLK, из них четыре такта фаза передачи (S3,S4) (nIOR = 0). DRQ роняю вместе nIOR в последнем цикле обмена (но режим другой -- On Demand , пакетный не подходит по определённым причинам).

 

P.S. В моём случае nDACK также снимается чуть раньше, чем последний posedge nIOR.

Изменено пользователем LMT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получается тогда теряется старший байт

 

Куда-ж он теряется то? Вы при этом в одном цикле получаете все 16 бит. У вас же сейчас проц формирует 2 цикла, из за того что адрес не выровнен на границу слова. Сначала по 63493, а потом по следующему: 63494. А ваша схема схватывает только 1 цикл. Вот и все проблема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто попробовал писать по чётному адресу,на выходе получаю только младший байт,в старшем все нули.Видимо что то с одним циклом не срослось.Придётся наверно повозиться немного с SBHE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос: Вы как программируете контроллер ПДП у CS5530 ? По моим наблюдениям он нормально не выполняет Extended Write и Compressed Time режимы передачи. Только Normal. При этом один цикл обмена занимает 6 тактов ISA CLK, из них четыре такта фаза передачи (S3,S4) (nIOR = 0). DRQ роняю вместе nIOR в последнем цикле обмена (но режим другой -- On Demand , пакетный не подходит по определённым причинам).

 

По умолчанию. Значит вроде бы должен стоять режим Normal. Но надо проверить, может в этом все дело. Спасибо за подсказку. Программист только в понедельник из отпуска выйдет :( лето. О результатах напишу.

 

Просто попробовал писать по чётному адресу,на выходе получаю только младший байт,в старшем все нули.Видимо что то с одним циклом не срослось.Придётся наверно повозиться немного с SBHE.

 

А анализатором шину посмотреть возможно? Чипскопом или еще чем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А анализатором шину посмотреть возможно? Чипскопом или еще чем.

К сожелению нет.

Кстати,не подскажете сигнал SBHE приходит после установки адреса порта,а в какое значение он первоначально устанавливается 0 или 1 ,т.е. какой байт будет передоваться в данный момент старший или младший?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...