cartman009 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Здравствуйте! Пожалуйста, помогите в решении проблемы отладки проекта. Необходимо написать TestBench, в котором частота тактового генератора изменяется в процессе работы устройства (физически он будет реализован в виде ГУНа). То есть в надо в шаблоне клока parameter PERIOD = <value>; always begin CLK = 1'b0; #(PERIOD/2) CLK = 1'b1; #(PERIOD/2); end изменять значение PERIOD согласно некоторой выходной шине устройства. Но тип parameter является константым значением, а при использовании в конструкции #(PERIOD/2) типа real компилятор выдаёт ошибку в самом начале моделирования. Может есть в verilog конструкция, позволяющая решить данную проблему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Пожалуйста, помогите в решении проблемы отладки проекта. Необходимо написать TestBench, в котором частота тактового генератора изменяется в процессе работы устройства (физически он будет реализован в виде ГУНа). То есть в надо в шаблоне клока parameter PERIOD = <value>; always begin CLK = 1'b0; #(PERIOD/2) CLK = 1'b1; #(PERIOD/2); end изменять значение PERIOD согласно некоторой выходной шине устройства. Но тип parameter является константым значением, а при использовании в конструкции #(PERIOD/2) типа real компилятор выдаёт ошибку в самом начале моделирования. Может есть в verilog конструкция, позволяющая решить данную проблему? Если в тестбенче надо менять какие-то значения, то для этого не нужны параметры. Достаточно переменные значения подгружать из текстового файла в тестбенч. Примеры у меня на сайте в "Кратком Курсе"... Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cartman009 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Примеры у меня на сайте в "Кратком Курсе"... Нашел похожий пример 4 в 8-ой части Краткого Курса. Спасибо. P.S. На мой взгляд не очень красивое решение. Было бы лучьше, если бы в величина задержки могла быть указана в том числе и типом reg. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба P.S. На мой взгляд не очень красивое решение. Было бы лучьше, если бы в величина задержки могла быть указана в том числе и типом reg. Так кто же не дает. Задайте минимальное значение. А потом к нему добавляйте... Или умножайте. Главное - не делите... А если делите, то округляйте до целого... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cartman009 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Главное - не делите... А если делите, то округляйте до целого... Выполнил моделирование... Делит только на константы. При попытке вычислить значение функции F(х)=1/х выдат ноль. Здесь у меня х - выходной 32-битный регистр, значение которого пропорционально частоте подстраиваемого сигнала. Поэтому без вычисления F(х)=1/х никак не обойтись. Может имеется в verilog возможность задавать clock сразу значением чатоты, а не моделируя задержку переключения сигнала? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winipuh 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 (изменено) · Жалоба Выполнил моделирование... Делит только на константы. При попытке вычислить значение функции F(х)=1/х выдат ноль. Здесь у меня х - выходной 32-битный регистр, значение которого пропорционально частоте подстраиваемого сигнала. Поэтому без вычисления F(х)=1/х никак не обойтись. Может имеется в verilog возможность задавать clock сразу значением чатоты, а не моделируя задержку переключения сигнала? Могу предложить вот так: `timescale 1 ns / 1 ps `define PULSE_WIDTH(period) period / 2 + (period % 2 ? 1 : 0) module clk_test (); reg clk = 0; integer period = 31; integer clk_dt = 15; always #(clk_dt) clk = ~clk; initial begin #(100); period = 15; clk_dt = `PULSE_WIDTH(period); #(100); period = 1; clk_dt = `PULSE_WIDTH(period); #(100); $finish; end endmodule # Для Active-HDL. Наверное, для Modelsim тоже подойдет. Не помню... wave /clk wave -decimal /period wave -decimal /clk_dt run -all Изменено 11 апреля, 2013 пользователем winipuh Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cartman009 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Спасибо, оба предложенные варианты заработали Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 12 апреля, 2013 Опубликовано 12 апреля, 2013 · Жалоба Когда моделировал цифровую фапч,делал в тестбенче аналог внешнего ГУН,с нужной крутизной.Если нужно,могу поискать исходник,только VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться