g614380

Проблема Создания Временных Диаграмм В Modelsim

2 сообщения в этой теме

g614380    0

Доброго всем дня уважаемые коллеги!

Не так давно начал освоение ПЛИС на языке Verilog. Пишу в Quartus2 9.0. Описывал простенькие модули и симулировал прямо в квартусе, в его встроенном симуляторе построения диаграмм.

Тестбенчи сам никогда еще не писал. Но вот решил что пришло время и нужно осваивать Modelsim.

Кое что нарыл в интернете, а точнее последовательность действий, которые описывают каким образом подкрепить тестируемый модуль и сам тестбенч в Modelsim прям из квартуса.

Тестбенч и модуль взял готовый описанный в одной из статей:

module counter (

input wire reset,

input wire clk,

input wire [7:0]wdata,

input wire wr,

output reg [7:0]data

);

always @ (posedge clk or posedge reset)

if (reset)

data <= 8'h00;

else

if(wr)

begin

data <= wdata;

$display("written %h",wdata);

end

else

data <= data + 8'h01;

endmodule

собственно модуль

module test_counter;

reg reset, clk, wr;

reg [7:0]wdata;

wire [7:0] data_cnt;

//устанавливаем экземпляр тестируемого модуля

counter counter_inst(reset, clk, wdata, wr, data_cnt);

//моделируем сигнал тактовой частоты

always

#10 clk = ~clk;

//от начала времени...

initial

begin

clk = 0;

reset = 0;

wdata = 8'h00;

wr = 1'b0;

//через временной интервал "50" подаем сигнал сброса

#50 reset = 1;

//еще через время "4" снимаем сигнал сброса

#4 reset = 0;

//пауза длительностью "50"

#50;

//ждем фронта тактовой частоты и сразу после нее подаем сигнал записи

@(posedge clk)

#0

begin

wdata = 8'h55;

wr = 1'b1;

end

//по следующему фронту снимаем сигнал записи

@(posedge clk)

#0

begin

wdata = 8'h00;

wr = 1'b0;

end

end

и тестбенч к нему.

Все это подгрузил в Modelsim, ошибок при этом никаких не выдало, но вот диаграммы почему то не построились.

Может кто подскажет в чем ошибка и куда рыть. Или ссылочку на хорошую статейку или книгу.

Всем заранее спасибо!

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


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

1 Ставьте соответствие между сигналами в вашем модуле с сигналами из тестбенча.

2 в блоке initial begin задаются только начальные значения сигналов. блокам always @ там совершенно не место.

3 если тебе необходимо чередовать значения wr, wrdata предлагаю завести регистр, который по положительному фронту сигнала clk будет инкреметироваться. Получится, что данный регистр будет равен либо 1 либо 0. В зависимости от этого ставите условия чему должны быть равны wr, wdata.

Простите писать не очень удобно...

`timescale 1ns / 1ps

module test_counter;
// Inputs
reg reset;
reg clk;
reg [7:0] wdata;
reg wr;
// Outputs
wire [7:0] data;
// Instantiate the Unit Under Test (UUT)
counter_cxem_net uut (
 .reset(reset),
 .clk(clk),
 .wdata(wdata),
 .wr(wr),
 .data(data)
);
initial begin
 // Initialize Inputs
 reset = 0;
 clk = 0;
 wdata = 0;
 wr = 0;




 //через временной интервал "50" подаем сигнал сброса
   #50 reset = 1;
 //еще через время "4" снимаем сигнал сброса
   #4 reset = 0;
 //пауза длительностью "50"
 end // initial begin



   always @(posedge clk)
   begin
   wdata = 8'h55;
   wr = 1'b1;
   end


 always
  begin
  #5 clk=!clk;
  end
endmodule

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

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас