MaratZuev 0 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба Всем добра! Хотел я, было, отделаться малой кровью и исключить из рассмотрения проприетарную часть кода, но руководство решило, что крыть - так крыть. Ну, хозяин - барин, подумал я, и бросился на амбразуру, решив, что мегафункция, которую предстояло покрыть, не семи пядей во лбу, а довольно-таки скромная. Речь, как упомянуто в топике, про altufm в её параллельной реинкарнации. Итого: берём простой модуль (в хедере описания констант), который инстанциирует эту мегафункцию: `include "main.vh" module main ( input logic `ADDR_FLASH_RNG addr_flash, input logic nread_flash, output logic data_valid_flash, output logic `DATA_FLASH_RNG dataout_flash, output logic nbusy_flash, output logic osc_flash ); flash flash_inst ( .addr ( addr_flash ), .nread ( nread_flash ), .data_valid ( data_valid_flash ), .dataout ( dataout_flash ), .nbusy ( nbusy_flash ), .osc ( osc_flash ) ); endmodule : main И тестбенч: `include "main.vh" `timescale 1ns / 1ps `define T1ns 1 // with respect to timebase (1ns) `define T1us 1000*`T1ns module main_tb; logic `ADDR_FLASH_RNG addr_flash; logic nread_flash; wire data_valid_flash; wire `DATA_FLASH_RNG dataout_flash; wire nbusy_flash; wire osc_flash; main main(.*); initial begin addr_flash = 0; nread_flash = 1'b1; end initial begin forever begin nread_flash = 1'b0; @ (negedge nbusy_flash); // wait for nbusy_flash falls @ (posedge nbusy_flash); // wait for flash ready nread_flash = 1'b1; addr_flash++; if (addr_flash == '0) begin // all flash is read $stop; end end end endmodule : main_tb Работаем в соответствии с документом User Flash Memory in MAX V Devices-Max V Devices Handbook, Section II, Chapter 7 Тетсбенч перебирает (читает) все адреса и на этом заканчивает свою работу. Но ModelSim не доволен: Вопрос: ЧЯДНТ и что делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба Но ведь вроде как надо перебрать все возможные вариации с входными выходными портами ? Разве не так ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 5 февраля, 2020 Опубликовано 5 февраля, 2020 · Жалоба nbusy_flash сам по себе молотить будет? osc? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaratZuev 0 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба 13 hours ago, Flip-fl0p said: Но ведь вроде как надо перебрать все возможные вариации с входными выходными портами ? Разве не так ? Что под вариациями подразумевается? Я и так читаю все адреса. Или их надо не только читать, но и обрывать чтение, не дожидаясь установки готовности? Какие ещё варианты? 13 hours ago, ViKo said: nbusy_flash сам по себе молотить будет? osc? Они - выходы, я над ними не властен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 1 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба Как предположения: 1. IP Core умеет и в чтение и в запись. Возможно, даже при конфигурировании как readonly, часть логики, отвечающей за запись все равно присутствует; 2. Из мануала: Quote Even though the ALTUFM megafunction allows you to select the address widths range from 3 bits to 9 bits, the UFM block always expects a full 9 bits for the width of the address register Из приведенного кода непонятно, действительно ли там expected 9 bits, или разярдность как-то порезана. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaratZuev 0 6 февраля, 2020 Опубликовано 6 февраля, 2020 · Жалоба 10 minutes ago, nice_vladi said: 1. IP Core умеет и в чтение и в запись. Возможно, даже при конфигурировании как readonly, часть логики, отвечающей за запись все равно присутствует; Да, в этом собака могла порыться. Попробую реализовать. Спасибо. 10 minutes ago, nice_vladi said: Из приведенного кода непонятно, действительно ли там expected 9 bits, или разярдность как-то порезана. В исходном посте решил не приводить хидер, как (думал) несущественный, ан нет: потребовался. Вот он: `ifndef _main_vh_ // prevent many inclusions `define _main_vh_ `define ADDR_FLASH_DIM 9 `define ADDR_FLASH_RNG [`ADDR_FLASH_DIM-1:0] `define DATA_FLASH_DIM 16 `define DATA_FLASH_RNG [`DATA_FLASH_DIM-1:0] `endif // `ifndef _main_vh_ Все адреса покрываются... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться