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

ModelSim 6.5b + SystemVerilog и интерфейс

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

При попытке симуляции возникает ошибка

vsim work.timers_testbench
# vsim work.timers_testbench 
# Loading sv_std.std
# Loading work.timers_testbench
# Loading work.intf_timer
# Loading work.timers
# ** Error: (vsim-8220) E:/My_Documents/Projects/Programms/Avrora_09/DevInterf/Cyclon_3/modelsim/work_prj/timers_testbench.sv(15): This or another usage of 'timer_1ms.fStart' inconsistent with 'net' object.
#         Region: /timers_testbench
# ** Error: (vsim-8220) E:/My_Documents/Projects/Programms/Avrora_09/DevInterf/Cyclon_3/src/timers/timers.sv(36): This or another usage of 'timer.fTimeOut' inconsistent with 'net' object.
#         Region: /timers_testbench/timers_1ms_inst
# Error loading design

 

Сам модуль текст

`timescale 1ns  / 100ps
interface intf_timer;
wire fStart, fTimeOut;
endinterface

module timers 
// -- Paramter
#(parameter FREQ = 25000000, parameter DELAY = FREQ)
// -- Interface
(
input wire clk, reset_n,
interface timer
);

const int unsigned CHK_TIMER = (FREQ / DELAY);

enum {Md_IDLE, Md_CNT} Mode, NextMode;

int unsigned cnt;

always_comb begin
case(Mode)
Md_IDLE: begin
	NextMode = Md_CNT;
	end
/*	Md_CNT: begin
	if(timer.fTimeOut && !timer.fStart) NextMode = Md_IDLE;
	end*/
default: NextMode = Md_IDLE;
endcase
end

always_ff @(posedge clk) begin
case(Mode)
Md_IDLE: begin
	timer.fTimeOut = 0;
	cnt = 0;
	end
Md_CNT: begin
	if(cnt < CHK_TIMER) cnt++;
	else timer.fTimeOut = 1;
end
endcase
end

always_ff @(posedge clk) begin
if(!reset_n) begin
	Mode = Md_IDLE;
end else begin
	Mode = NextMode;
end
end

endmodule

 

Текст тест бенча

 

`timescale 1ns / 100ps

module timers_testbench(

);
intf_timer timer_1ms();

reg clk, reset_n;
reg fStart, fTimeOut;

timers #(25000000, 25000) 
timers_1ms_inst(clk, reset_n, timer_1ms);

always begin
timer_1ms.fStart = fStart;
fTimeOut = timer_1ms.fTimeOut;
end
// -- Generator 25 MHz
always #40 clk = ~clk;

initial begin
clk = 1;
reset_n = 0;
fStart = 0;

#20 reset_n = 1;
#50 fStart = 1;
end

always @(reset_n)
#1 $display($time, "timer_1ms.fStart=%b, timer_1ms.fTimeOut=%b, ", fStart, fTimeOut);

endmodule

 

Что интересно если закоментиую назначения сигналов интерфейсу то ошибка пропадет для того сигнала который закоментирован. Объясните как симулировать работу с интерфейсом.

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


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

# ** Error: (vsim-8220) E:/My_Documents/Projects/Programms/Avrora_09/DevInterf/Cyclon_3/modelsim/work_prj/timers_testbench.sv(15): This or another usage of 'timer_1ms.fStart' inconsistent with 'net' object.

# Region: /timers_testbench

# ** Error: (vsim-8220) E:/My_Documents/Projects/Programms/Avrora_09/DevInterf/Cyclon_3/src/timers/timers.sv(36): This or another usage of 'timer.fTimeOut' inconsistent with 'net' object.

# Region: /timers_testbench/timers_1ms_inst

# Error loading design

английский знаем, читать умеем ? %)

 

вы уже вышли на уровень использования интерфейсов, а до сих пор не знаете чем присвоения к wire отличается от присвоений к переменным (reg/logic/int).

 

А в ква SV пихали индусы, банально разрешив оба вида присвоения wire

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


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

английский знаем, читать умеем ? %)

вы уже вышли на уровень использования интерфейсов, а до сих пор не знаете чем присвоения к wire отличается от присвоений к переменным (reg/logic/int).

А в ква SV пихали индусы, банально разрешив оба вида присвоения wire

Все же не совсем понятно. Сделал попытку присвоение через

....

assign timer_1ms.fStart = 1'b0;

initial begin

clk = 1;

...

При запувске симуляции он пропускает, если я перепишу в виде

....

initial begin

clk = 1;

timer_1ms.fStart = 1'b0;

...

То выдает ошибку, ну и если заменить wire на logic то вообще ни какой ошибки нет.

Что непонятно чтож ModelSim тогда компилирует даже без предупреждений, а при симулировании выдает критическую ошибку.

Спасибо за подсказку.

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


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

Все же не совсем понятно. Сделал попытку присвоение через

Читайте стандарт, всё что касается procedural & continious assignements. Ответ почему у вас не работает я дал, рано вам еще с интерфейсами связываться, сначала поймите разницу между цепями и переменными.

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


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

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

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

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

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

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

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

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

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

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