Важная информация

User Tag List

Страница 136 из 271 ПерваяПервая ... 132133134135136137138139140 ... ПоследняяПоследняя
Показано с 1,351 по 1,360 из 2702

Тема: Цифровая археология: 1801 и все-все-все

  1. #1351
    Junior
    Регистрация
    07.01.2016
    Адрес
    г. Москва
    Сообщений
    27
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А подскажите пожалуйста про особенности выполнения инструкций которые прерываются по таймауту RPLY для ВМ2 (или ВМ1).
    Вот есть инструкция
    Код:
    MOV (R0)+, (R1)+
    Если @R0 нормально прокатывает по шине, а @R1 нет (вызывает таймаут). То какие значения регистров будут, когда начнётся выполнение прерывания? Увеличится ли R0 на два, прежде чем трапнет? Или увеличение регистров по автоинкременту происходит после успешных транзакций?
    А уменьшение происходит до всех транзакций? То есть, если
    Код:
    MOV -(R0), -(R1)
    трапает на адресе (R0-2), на входе в прерывание R0 будет уже уменьшен? А R1?
    В целом вопрос такой: если выполнение команды прерывается по RPLY, то все регистры остаются в исходном состоянии, как перед выполнением, или автоинкремент/автодекремент выполняется? И PC указывает на команду которая вызвала трап или на следующую? Предполагаю, что на входе в перывание все регистры будут ниходиться в исходном состоянии (как до выполнения инструкции), но хотелось бы авторитетного подтверждения этой догадке.

  2. #1351
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #1352
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ilynxy Посмотреть сообщение
    Предполагаю, что на входе в перывание все регистры будут ниходиться в исходном состоянии (как до выполнения инструкции)
    Это справедливо только для второго операнда, если зависание возникло при чтении первого операнда.

    Автодекремент регистра операнда всегда выполняется в начале обращения к операнду, до выставления адреса на шину. У процессоров ВМ1 и ВМ2 - автоинкремент регистра операнда выполняется сразу после выставления адреса на шину, у ВМ3 - только после прихода RPLY. Так как первый и второй операнды последовательно обрабатываются одним и тем же блоком микрокода, при зависании чтения первого операнда - до обработки регистра второго операнда дело не доходит.
    Последний раз редактировалось Patron; 27.12.2017 в 17:17.

  4. #1353
    Junior
    Регистрация
    07.01.2016
    Адрес
    г. Москва
    Сообщений
    27
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А вот ещё вопрос: если автодекремент выполняется до выставления адреса на шину, на это наверняка тратится цикл (я так понимаю для инкремента/декремента используется АЛУ)? То есть автодекремент должен быть на такт длиннее автоинкремента (автоинкремент выполняется параллельно с обменом по шине)?

  5. #1354
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    754
    Поблагодарили
    353 сообщений
    Mentioned
    86 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ilynxy Посмотреть сообщение
    А вот ещё вопрос: если автодекремент выполняется до выставления адреса на шину, на это наверняка тратится цикл (я так понимаю для инкремента/декремента используется АЛУ)? То есть автодекремент должен быть на такт длиннее автоинкремента (автоинкремент выполняется параллельно с обменом по шине)?
    ЕМНИП, дополнительный цикл не тратится. Цикл АЛУ состоит из двух тактов на самом деле, и строб записи в регистр адреса может вырабатываться до вычисления и после. Если операция с пост-инкрементом, то в регистр адреса записывается значение исходного регистра до его обновления. Если операция с пре-декрементом то регистр адреса получает уже обновленное значение адреса.

    PS. Вечером попробую диаграммы с симулятора снять, станет понятнее.

  6. #1355
    Member
    Регистрация
    23.08.2015
    Адрес
    г. Казань
    Сообщений
    46
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Фотоотчет о попытке подружить SRAM и FPGA.
    Ver 1 чип IS61LV25616AL-10TL


    Ver 2 чип CY7C1041DV33-15VI



    В первом случае чип не подавал признаков жизни.
    Во втором случае чип запустился, но на очень низкой частоте ~ 10 MHz.
    Код модуля WB - SRAM выложу позже(надо немного причесать).

    - - - Добавлено - - -

    Код модуля:
    Код:
    module sram_wb_16
    (
    	input				wb_clk_i,
    	input	 [15:0]	wb_adr_i,
    	input	 [15:0]	wb_dat_i,
       output [15:0]	wb_dat_o,
    	input				wb_cyc_i,
    	input	  			wb_we_i,
    	input	 [1:0]	wb_sel_i,
    	input				wb_stb_i,
    	output			wb_ack_o,
    //-----------------------------------
    	output  [17:0]	sram_adr,
    	output			sram_nOE,
    	output			sram_nWE,
    	output			sram_nCS,
    	output 			sram_nUB,
    	output			sram_nLB,
    	inout	  [15:0]	sram_data 
    	
    );
    wire       w_ena;
    wire       r_ena;  
    wire [1:0] ena;
    reg [12:0] ack;
    reg [15:0] d,r;
    assign  		sram_nCS = 1'b0;
    assign		sram_nUB = 1'b0;
    assign		sram_nLB = 1'b0;
    assign	sram_adr[17:0] = {5'b00000 ,wb_adr_i[13:1]};	
    assign	wb_dat_o = sram_data;
    assign   w_ena = (wb_we_i & wb_cyc_i & wb_stb_i);
    assign   r_ena = (~wb_we_i & wb_cyc_i & wb_stb_i);
    assign	sram_nOE = ~r_ena;
    assign 	sram_data =(w_ena)? wb_dat_i: 16'hzzzz;
    assign 	sram_nWE = ~w_ena;
    assign ena = wb_we_i ? wb_sel_i : 2'b11;
    assign wb_ack_o = wb_cyc_i & wb_stb_i & (ack[10] );//| wb_we_i);
    
    always @ (posedge wb_clk_i) 
    	begin
    	ack[0] <= wb_cyc_i & wb_stb_i;
    	ack[1] <= wb_cyc_i & ack[0];
    	ack[2] <= wb_cyc_i & ack[1];
    	ack[3] <= wb_cyc_i & ack[2];
    	ack[4] <= wb_cyc_i & ack[3];
    	ack[5] <= wb_cyc_i & ack[4];
    	ack[6] <= wb_cyc_i & ack[5];
    	ack[7] <= wb_cyc_i & ack[6];
    	ack[8] <= wb_cyc_i & ack[7];
    	ack[9] <= wb_cyc_i & ack[8];
    	ack[10] <= wb_cyc_i & ack[9];
    	ack[11] <= wb_cyc_i & ack[10];
    	ack[12] <= wb_cyc_i & ack[11];
    	end
    
    endmodule
    Может я допускаю какую-то "детскую" ошибку или платку развел неправильно (добавить антизвонные резисторы, терминаторы)

  7. #1356
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    754
    Поблагодарили
    353 сообщений
    Mentioned
    86 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сходу так явной ошибки не видно.
    Могу только посоветовать сделать сигналы nOE и nWE регистровыми. Шина WB синхронная, между клоками там может быть любая комбинация сигналов, это надо отсечь. "Звон" - дело такое, можно попробовать последовательные терминаторы Rs на выходах Циклона включить.

  8. #1357
    Junior
    Регистрация
    07.01.2016
    Адрес
    г. Москва
    Сообщений
    27
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Могу только посоветовать сделать сигналы nOE и nWE регистровыми. Шина WB синхронная, между клоками там может быть любая комбинация сигналов, это надо отсечь.
    Неплохо бы посмотреть на констрейны, чтобы соотношение времянок setup/hold не нарушалось. И да, нужно делать все входы/выходы регистровыми (деваться всё равно некуда, асинхронная память <-> синхронная шина красиво не решить), latency, конечно, будет один такт, но зато в констрейны влезть будет проще, а то комбинационная логика на концах трудна для отладки.

  9. #1358
    Member
    Регистрация
    23.08.2015
    Адрес
    г. Казань
    Сообщений
    46
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    добавил регистры, ситуация улучшилась
    Код:
    module sram_wb_reg
    (
    	input				wb_clk_i,
    	input	 [15:0]	wb_adr_i,
    	input	 [15:0]	wb_dat_i,
       output reg [15:0]	wb_dat_o,
    	input				wb_cyc_i,
    	input	  			wb_we_i,
    	input	 [1:0]	wb_sel_i,
    	input				wb_stb_i,
    	output 			wb_ack_o,
    //-----------------------------------
    	output reg [17:0]	sram_adr,
    	output reg			sram_nOE,
    	output reg			sram_nWE,
    	output reg			sram_nCS,
    	output reg			sram_nUB,
    	output reg			sram_nLB,
    	inout	     [15:0]	sram_data 
    );
    wire       w_ena;
    wire       r_ena;  
    wire [1:0] ena;
    reg [12:0] ack;
    reg [15:0] write_reg;
    
    always @ (posedge wb_clk_i) 
    	begin
    	sram_nOE <= ~r_ena;
    	sram_nCS <= 1'b0;
    	sram_nUB <= ~(ena[1]&(w_ena|r_ena));//1'b0;
    	sram_nLB <= ~(ena[0]&(w_ena|r_ena));//1'b0;
    	sram_nWE <= ~w_ena;
    	sram_adr[17:0] <= {3'b000 ,wb_adr_i[15:1]};
    	wb_dat_o <= sram_data;
            write_reg <= wb_dat_i;
    	sram_nOE <= ~r_ena;
    	end
    
    assign	w_ena = (wb_we_i & wb_cyc_i & wb_stb_i);
    assign	r_ena = (~wb_we_i & wb_cyc_i & wb_stb_i);
    assign	sram_data =(w_ena)? write_reg: 16'hzzzz;
    assign	ena = wb_we_i ? wb_sel_i : 2'b11;
    assign	wb_ack_o = wb_cyc_i & wb_stb_i & (ack[3] );//| wb_we_i);
    
    always @ (posedge wb_clk_i) 
    	begin
    	ack[0] <= wb_cyc_i & wb_stb_i;
    	ack[1] <= wb_cyc_i & ack[0];
    	ack[2] <= wb_cyc_i & ack[1];
    	ack[3] <= wb_cyc_i & ack[2];
    	ack[4] <= wb_cyc_i & ack[3];
    //	ack[5] <= wb_cyc_i & ack[4];
    //	ack[6] <= wb_cyc_i & ack[5];
    //	ack[7] <= wb_cyc_i & ack[6];
    //	ack[8] <= wb_cyc_i & ack[7];
    //	ack[9] <= wb_cyc_i & ack[8];
    //	ack[10] <= wb_cyc_i & ack[9];
    //	ack[11] <= wb_cyc_i & ack[10];
    //	ack[12] <= wb_cyc_i & ack[11];
    	end
    
    endmodule
    Тест памяти
    Код:
    @
    @T2
    ТЕСТ     2
    ПАМЯТЬ   020000 -137776
    ПАМЯТЬ   000600 -017776
     
    024164
    SPEED виснет после цифр 5192
    Код:
    .SPEED
     
    ТЕСТ БЫСТРОДЕЙСТВИЯ
     
    КОМАНДА СЛОЖЕНИЯ РЕГИСТР-РЕГИСТР
    БЫСТРОДЕЙСТВИЕ (ТЫС.ОП./СЕК)    10864
     
    КОМАНДА СЛОЖЕНИЯ РЕГИСТР-ПАМЯТЬ
    БЫСТРОДЕЙСТВИЕ (ТЫС.ОП./СЕК)     5192

  10. #1359
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    754
    Поблагодарили
    353 сообщений
    Mentioned
    86 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Адрес надо раньше чем OE/WR выставлять. И снимать адрес позже, после деактивации OE/WR. Конкретные tsu и th надо в даташите на микросхемы подсмотреть.

  11. #1360
    Member
    Регистрация
    23.08.2015
    Адрес
    г. Казань
    Сообщений
    46
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Vslav, Спасибо, я понял направление. Вот если-бы еще примерчик простенький.
    Последний раз редактировалось A074MO; 17.01.2018 в 22:43.

Страница 136 из 271 ПерваяПервая ... 132133134135136137138139140 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 7
    Последнее: 28.06.2014, 17:50
  2. Микросхемы МПК 580,1801,1810 и другие...
    от Alex_Vac в разделе Барахолка (архив)
    Ответов: 44
    Последнее: 07.04.2012, 08:03
  3. ЦИФРОВАЯ МУЗЫКА НА ZX
    от AAA в разделе Музыка
    Ответов: 98
    Последнее: 18.09.2011, 22:33
  4. Учебный стенд УМПК-1801
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 12.05.2010, 16:52
  5. Цифровая музыка от Вадима Ермеева
    от zxmike в разделе Музыка
    Ответов: 2
    Последнее: 06.08.2007, 23:13

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •