Jump to content

    

ISA(16 разрядов)

Не могу понять,но при записи в порт 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;

Edited by darkniisiis

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

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

Share this post


Link to post
Share on other sites
Почту глянь! я те скинул свой старый проект для ISA шины на PC104.

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

К сожелению письмо c проектом не дошло,повтори ,пожалуйста,на адрес darkangel_rock@mail.ru

 

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

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

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
пока не совсем понял,как же мне всё-таки добиться AL AH

 

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

 

Гук:

http://www.rapidshare.ru/346083

Share this post


Link to post
Share on other sites

Я так 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 это точно так.

Edited by LMT

Share this post


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

 

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

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

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

Share this post


Link to post
Share on other sites
По спецификации АТ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) работает только на первых двух.

Edited by LMT

Share this post


Link to post
Share on other sites
Да, сейчас стоит задача организовать переброску данных с платы сбора и промежуточной обработки на хост. Я пробовал 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

Share this post


Link to post
Share on other sites
Писать-читать по чётным адресам.

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

Edited by darkniisiis

Share this post


Link to post
Share on other sites

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

 

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

Edited by LMT

Share this post


Link to post
Share on other sites
Получается тогда теряется старший байт

 

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

Share this post


Link to post
Share on other sites

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

Share this post


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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites
А анализатором шину посмотреть возможно? Чипскопом или еще чем.

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this