Перейти к содержанию
    

тактовый генератор verilog

Здравствуйте!

Пожалуйста, помогите в решении проблемы отладки проекта. Необходимо написать TestBench, в котором частота тактового генератора изменяется в процессе работы устройства (физически он будет реализован в виде ГУНа). То есть в надо в шаблоне клока

 

   parameter PERIOD = <value>;

  always begin
     CLK = 1'b0;
     #(PERIOD/2) CLK = 1'b1;
     #(PERIOD/2);
  end  				

изменять значение PERIOD согласно некоторой выходной шине устройства. Но тип parameter является константым значением, а при использовании в конструкции #(PERIOD/2) типа real компилятор выдаёт ошибку в самом начале моделирования.

Может есть в verilog конструкция, позволяющая решить данную проблему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуйста, помогите в решении проблемы отладки проекта. Необходимо написать TestBench, в котором частота тактового генератора изменяется в процессе работы устройства (физически он будет реализован в виде ГУНа). То есть в надо в шаблоне клока

 

   parameter PERIOD = <value>;

  always begin
     CLK = 1'b0;
     #(PERIOD/2) CLK = 1'b1;
     #(PERIOD/2);
  end  				

изменять значение PERIOD согласно некоторой выходной шине устройства. Но тип parameter является константым значением, а при использовании в конструкции #(PERIOD/2) типа real компилятор выдаёт ошибку в самом начале моделирования.

Может есть в verilog конструкция, позволяющая решить данную проблему?

Если в тестбенче надо менять какие-то значения, то для этого не нужны параметры. Достаточно переменные значения подгружать из текстового файла в тестбенч.

Примеры у меня на сайте в "Кратком Курсе"...

Удачи!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примеры у меня на сайте в "Кратком Курсе"...

 

Нашел похожий пример 4 в 8-ой части Краткого Курса. Спасибо.

P.S. На мой взгляд не очень красивое решение. Было бы лучьше, если бы в величина задержки могла быть указана в том числе и типом reg.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S. На мой взгляд не очень красивое решение. Было бы лучьше, если бы в величина задержки могла быть указана в том числе и типом reg.

Так кто же не дает. Задайте минимальное значение. А потом к нему добавляйте... Или умножайте. Главное - не делите... А если делите, то округляйте до целого...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Главное - не делите... А если делите, то округляйте до целого...

Выполнил моделирование... Делит только на константы. При попытке вычислить значение функции F(х)=1/х выдат ноль. Здесь у меня х - выходной 32-битный регистр, значение которого пропорционально частоте подстраиваемого сигнала. Поэтому без вычисления F(х)=1/х никак не обойтись. Может имеется в verilog возможность задавать clock сразу значением чатоты, а не моделируя задержку переключения сигнала?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выполнил моделирование... Делит только на константы. При попытке вычислить значение функции 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

post-74189-1365709396_thumb.jpg

Изменено пользователем winipuh

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда моделировал цифровую фапч,делал в тестбенче аналог внешнего ГУН,с нужной крутизной.Если нужно,могу поискать исходник,только VHDL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...