dlsh 2 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Вопрос возник в том что есть готовый модуль в квартусе компилится нормально. Компилируется в моделсим тоже успешно При попытке симуляции возникает ошибка 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 Что интересно если закоментиую назначения сигналов интерфейсу то ошибка пропадет для того сигнала который закоментирован. Объясните как симулировать работу с интерфейсом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба # ** 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlsh 2 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба английский знаем, читать умеем ? %) вы уже вышли на уровень использования интерфейсов, а до сих пор не знаете чем присвоения к 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 тогда компилирует даже без предупреждений, а при симулировании выдает критическую ошибку. Спасибо за подсказку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Все же не совсем понятно. Сделал попытку присвоение через Читайте стандарт, всё что касается procedural & continious assignements. Ответ почему у вас не работает я дал, рано вам еще с интерфейсами связываться, сначала поймите разницу между цепями и переменными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться