matts1988 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Подскажите, пожалуйста, каким образом можно задать сигнал на основании отдельного файла, данные в котором, допустим, такого вида: 0 1 1 0 0 0 1 1 0 и т.д. Вобщем, чтобы в итоге при моделировании сигнал был следующего вида - п_п_п____п___п____п_п Если можно, очень был бы благодарен примеру кода, выполняющего подобную задачу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Подскажите, пожалуйста, каким образом можно задать сигнал на основании отдельного файла, данные в котором, допустим, такого вида: .... Найдите у меня на сайте в статьях "Краткий Курс HDL"... Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
matts1988 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба минут 15 пытаюсь найти и ничего... единственное, что могло бы подходить - http://iosifk.narod.ru/hdl_coding/verilog.htm но там только о диске и его заказе и говорится Спасибо, вроде бы нашел то, что нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Спасибо, вроде бы нашел то, что нужно. Там 13 статей. И они же на сайте kit-e.ru Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
matts1988 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Там 13 статей. И они же на сайте kit-e.ru На kit-e.ru и нашел, а на Вашем сайте, увы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SuperFly 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Подскажите, пожалуйста, каким образом можно задать сигнал на основании отдельного файла, данные в котором, допустим, такого вида: первое, что приходит в голову - это описать память и загрузить в неё данные из файла функцией $readmemb() или $readmemh(). По сигналу CLK читать данные из этой памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба первое, что приходит в голову - это описать память и загрузить в неё данные из файла функцией $readmemb() или $readmemh(). По сигналу CLK читать данные из этой памяти. Этот подход не правильный! Он работает только для очень простых проектов. А на самом деле надо читать данные из файла и результат моделирования тоже писать в файл. Тогда после моделирования можно будет только обработать файл результата, а не смотреть "зубчики" на временной диаграмме. Попробуйте например отладить 32-х канальный HDLC-контроллер, и прогнать через него хотя бы сотню байт. Если для одного канала (тайм-слота) надо сделать ну пусть 10 тактов автоматом, то всего будет 10*8бит*32канала*100байт(даже без учета бит-стаффинга)... Ну и как Вам такой расклад? А еще при изменении файла входных данных не надо компилить проект. Просто сброс-пуск. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
matts1988 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Ничего не понял в итоге ( не могу разобраться Допустим, имеется сигнал, который я задаю следующим образом initial begin clk = 1; forever #80 clk = !clk; end т.е. он у меня меняется с учетом задержки. так вот каким образом мне задать этот сигнал, но через данные из файла, в котором будут 0 и 1 ? и можно ли при таком способе задачи сигнала учесть задержки и, допустим, сделать этот сигнал произвольной формы: что-то вроде п_п_п_________п_п____________п_п_п_п_п И если есть пример подобного кода - поделитесь? я начинающий и только-только со всем этим столкнулся. Читаю литературу по Верилогу, по моделированию и тэстбэнчам, сложновато приходится. не успеваю все переварить ( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SuperFly 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Этот подход не правильный! Он работает только для очень простых проектов. эм... терминологию я оспаривать не буду... но мне идеологически непонятно чем отличается моё "описать память и загрузить в неё данные из файла функцией $readmemb() или $readmemh()" от Вашего "самом деле надо читать данные из файла" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Ничего не понял в итоге ( не могу разобраться Еще раз. Найдите пример кода, в котором показано, как читать данные из файла. Там задается время и значение сигнала в это время. эм... терминологию я оспаривать не буду... но мне идеологически непонятно чем отличается моё "описать память и загрузить в неё данные из файла функцией $readmemb() или $readmemh()" от Вашего "самом деле надо читать данные из файла" Ну, допустим, Вы сделали память и оттуда читаете данные. ОК. А куда кладете результат? В другую память? И как потом этот результат из "памяти" выдирать? Что у меня приведено в примерах? Разница в том, что в процессе отладки данные пишутся не в какую-то память, а в обычный текстовый файл. Например, если в процессе отладки, что-то пошло не так, то можно добавив пару строк кода заставить симулятор скинуть в файл текстовое сообщение: "время-ХХ, Сигнал А - УУ не норма!!". Или вообще сливать в файл весь результат или хоть каждый шаг отладки. Это уже по желанию автора. А если модуль, который Вы отлаживаете полежит пару месяцев или будет использоваться Вашим коллегой, то забытые осциллограммы не так легко вспомнить или неизвестные изучить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
matts1988 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Коды, необходимые для чтения состояний сигналов из файла real number; // Define integers for file handling integer number_file; integer i=1; initial begin // Open file numbers.txt for reading number_file = $fopen(«numbers.txt», «r»); // Produce error and exit if file could not be opened if (number_file == 0) begin $display(«Error: Failed to open file, numbers.txt\nExiting Simulation.»); $finish; end // Loop while data is being read from file // (i will be -1 when end of file or 0 for blank line) while (i>0) begin $display(«i = %d», i); i=$fscanf(number_file, «%f», number); $display(«Number read from file is %f», number); @(posedge CLK); end // Close out file when finished reading $fclose(number_file); #100; $display(«Simulation ended normally»); $stop; end не понимаю ( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SuperFly 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Ну, допустим, Вы сделали память и оттуда читаете данные. ОК. А куда кладете результат? В другую память? И как потом этот результат из "памяти" выдирать? эм... разве я что-то говорил про отладку или про интерпретацию результатов моделирования? вопрос был как присвоить сигналу заначения, хранящиеся в отдельном файле... или нет? =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
matts1988 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Или вот пример нашел... module stim_gen ( // Outputs clk, data ); output clk; output [7:0] data; reg clk; reg [7:0] data; integer fd; integer code, dummy; reg [8*10:1] str; initial begin fd = $fopen("_input.dat","r"); clk = 0; data = 0; code = 1; $monitor("data = %x", data); while (code) begin code = $fgets(str, fd); dummy = $sscanf(str, "%x", data); @(posedge clk); end $finish; end // initial begin always #5 clk = ~clk; endmodule // stim_gen Contents of _input.dat file Code: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 Объясните, пожалуйста, оба примера ( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Объясните, пожалуйста, оба примера ( А найдите раздел про то, как работать с МоделСимом. Установите его, запустите оба примера по очереди и смотрите. Я же привел примеры чтения/записи из файла. Там же и комментарии есть. Что не понятно конкретно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SuperFly 0 24 июня, 2011 Опубликовано 24 июня, 2011 · Жалоба Объясните, пожалуйста, оба примера ( Есть несколько подходов для задания значений сигналов "извне". 1. Если много памяти и важна скорость моделирования объявляют память для хранения всего набора входных вектов и заполняют её из файла функцией $readmemb() или $readmemh(). Заполнять можно частями - начиная с определённого адреса. Далее присваивают сигналам значения из памяти и инкрементируют адрес в памяти. "Минус" подхода в том, что требуется значительный объём ОЗУ (но можно заполнять память частями). 2. Если мало памяти и скорость моделирования не критична Как показано в приведённых примерах - читается не весь файл целиком, а только текущее значение (таким образом экономим память, но увеличиваем время моделирования большим число системных вызовов в условном цикле) 3. Если важна скорость моделирования и размер входных векторов очень большой Тут не обойтись без программного интерфейса с Си. В текущий момент моделирования (или по какому-то условию) подгружаем текущие входные воздействия из Си-программы. Также Си программой можно интерпритировать текущие результаты моделирования. Или вот пример нашел... Объясните, пожалуйста, оба примера ( module stim_gen ( // Outputs clk, data ); output clk; output [7:0] data; reg clk; // тактовый сигнал reg [7:0] data; // шина данных с входными воздействиями integer fd; integer code, dummy; reg [8*10:1] str; initial begin fd = $fopen("_input.dat","r"); // открываем файл clk = 0; data = 0; code = 1; $monitor("data = %x", data); // выводим текущее значение на шине данных while (code) begin // пока не конец файла code = $fgets(str, fd); // читаем текущую строку в файле dummy = $sscanf(str, "%x", data); // выставляем на шину значения из текущей строки в файле @(posedge clk); // ждём переднего фронта сигнала clk end $finish; // если все строки в файле прочитаны - конец моделирования end // initial begin always #5 clk = ~clk; // каждые 5 интервалов времени моделирования инвертируем сигнал clk endmodule // stim_gen Contents of _input.dat file Code: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться