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

ISE 8.1 vhdl +Modelsim 6.5b

раньше работал со встроенным симулятором, но он наконец-то сошёл сума от строки:

RShift8 <= countRegen(7 downto 0) WHEN countDigTimeAdr ="0000" ELSE

countRegen(8 downto 1) WHEN countDigTimeAdr ="0001" ELSE

countRegen(9 downto 2) WHEN countDigTimeAdr ="0010" ELSE

countRegen(10 downto 3) WHEN countDigTimeAdr ="0011" ELSE

countRegen(11 downto 4) WHEN countDigTimeAdr ="0100" ELSE

countRegen(12 downto 5) WHEN countDigTimeAdr ="0101" ;

теперь пытаюсь освоить модельсим. В Integrated Tools добавил модельсим. Вопросы:

1)В ИСЕ в свойствах проекта при выборе симулятора появились строчки: Modelsim-SE VHDL, Modelsim-PE VHDL, Modelsim-XE VHDL. Что нужно выбирать.

2)Модельсим ругается:

# ** Error: closk1.vhd(26): Library unisim not found.

# ** Error: closk1.vhd(27): (vcom-1136) Unknown identifier "unisim".

где взять библиотеку?

3)Как в модельсиме вывести на экран внутренние сигналы?

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


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

1) Очевидно, что выбирать нужно ту редакцию МоделСима, которую Вы установили.

 

2)А что у Вас в этих строчках написано?

 

3)Если через графич. оболочку, то после инициализации симуляции в окне workspace активируйте вкладку sim. Там будет иерархия проекта. Находите нужный модуль и через меню правой кнопки добавляете сигналы в wave. Моделсим добавит все доступные для наблюдения сигналы. Если при активном окне Wave выполнить File\Save, то получите образец скрипта.

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


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

Модельсим ругается:
Если у вас не Modelsim-XE, то ему надо скомпилировать библиотеки (в ISE)

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


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

спасибо за ответы.

от себя добавлю, что если используются cores, то нужно в функциональной модели выбрать VHDL(у меня по умолчанию Verilog)

 

сейчас проект, грузится без ошибок, но во вкладке SIM есть только тестовый модуль(test_add1), тестируемого модуля(add1) нет, сигналов нет.

post-15198-1259072271_thumb.jpg

 

если из ISE запускать симуляцию тестируемого модуля(add1) без модуля с тестовыми воздействиями(test_add1), то появляются сигналы, но, естественно, воздействий нет.

встроенный симулятор ISE работает, как и должен.

 

помогите запустить симуляцию в моделсим. :wacko:

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


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

есть подозрение, что встроенный симулятор ISE Xilinx использует "упрощённую" структуру тест бенча, которую моделсим не понимает... пример тест бенча для моделсим кто-нибудь приведёт?

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


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

Тестбенч простой - устанавливаешь тестируемое устройство, пишешь генерацию сигналов и проверку того, что идет от устройства.

 

Вот пример (resync - тестируемое устройство)

`timescale 1ns / 1ps

module ut_resync;
wire s_dv;
wire [4:0] s_rxd;
wire ph_ovr;

reg clk = 0, clk4 = 0;

reg rx_clk =0;

reg rx_dv = 0;
reg [4:0] rxd = 0;

// Test bench vars
integer err_count = 0;
reg [4:0] data_buf [3000:0];
integer wr_ptr = 0;
integer rd_ptr = 0;
reg [4:0] last_data;
reg [4:0] last_pump_read, last_pump_write;

// Data pump
always @(negedge rx_clk) 
begin
last_data = $random();
rxd = last_data;
end

always @(posedge rx_clk)
if (rx_dv)
begin
last_pump_write = last_data;
data_buf[wr_ptr]=last_data;
wr_ptr=wr_ptr+1;
if (wr_ptr<=rd_ptr)
begin
  $display("*** (%0t) Error: Data pump overwrite: WR_PTR=%0d, RD_PTR=%0d",$time,wr_ptr,rd_ptr);
  err_count=err_count+1;
end
end

always @(posedge clk)
if (s_dv)
begin
last_pump_read = data_buf[rd_ptr];
if (last_pump_read!=s_rxd)
 begin
  $display("*** (%0t) Error: Data integrity error: Wrong byte at %0d: %h (should be %h)",$time,rd_ptr,s_rxd,last_pump_read);
  err_count=err_count+1;   
 end
if (ph_ovr)
 begin
  $display("*** (%0t) Error: Phase error (at byte %0d)",$time,rd_ptr);
  err_count=err_count+1;   
 end
rd_ptr = rd_ptr+1;
end

task RunTest;
integer len;
begin
rd_ptr=0;
wr_ptr=0;
len = 100+($unsigned($random) % 2900);
$display("(%0t) - Run for %0d nibbles",$time,len); 
@(negedge rx_clk);
rx_dv <= 1;
repeat(len) @(negedge rx_clk);
rx_dv <= 0;
@(negedge s_dv);
@(posedge clk);
if (rd_ptr!=wr_ptr)
 begin
  $display("*** (%0t) Error: Read/Write counters missmatch: WR_PTR=%0d (%h), RD_PTR=%0d (%h)",$time,wr_ptr,last_pump_write,rd_ptr,last_pump_read);

  err_count=err_count+1;   
 end 
end
endtask

always
#5 clk4 <= ~clk4;

always begin
@(posedge clk4);
clk <= 1;
repeat(2) @(posedge clk4);
clk <= 0;
@(posedge clk4);
end

always //@* rx_clk <= clk;
#20.01 rx_clk <= ~rx_clk;

initial begin
$timeformat ( -9,0," ns",15);

#2000;

repeat(100000) begin
 RunTest;
 #1000;
end

#2000;

$display("Total errors - %0d", err_count);

$stop;

end


ResyncBlock resync(
.clk(clk),
.clk4(clk4), // clk*4

// Input section
.clk_in(rx_clk),
.en_in(rx_dv), // Enable signal
.d_in(rxd), // Input data

// Output section
.en_out(s_dv), // Enable signal
.d_out(s_rxd), // Data

// Error indicator
.phase_overflow_err(ph_ovr) // Phase lock lost (not enough phase marging)

);

endmodule

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


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

2 XVR

много непонятных символов :)

это, наверное не VHDL?

 

с тестбенчем разобрался

встроенных симулятор ise xilinx компилит такой код:

ENTITY t_add_vhd IS
END t_add_vhd;
ARCHITECTURE behavior OF t_add_vhd IS 
..........
SIGNAL z :  std_logic;
..........

для моделсима нужно писать так:

entity t_add_vhd is
  port (        
        z : OUT std_logic);
end t_add_vhd;
.................

второй вариант логичнее...

три дня этот баг искал! интересно узнать причину таких расхождений!

где можно почитать про структуру тестбенча vhdl. может, ise xilinx ещё что-то упрощает?

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


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

2 XVR

много непонятных символов :)

это, наверное не VHDL?

Verilog

 

с тестбенчем разобрался

встроенных симулятор ise xilinx компилит такой код:

ENTITY t_add_vhd IS
END t_add_vhd;
ARCHITECTURE behavior OF t_add_vhd IS 
..........
SIGNAL z :  std_logic;
..........

для моделсима нужно писать так:

entity t_add_vhd is
   port (        
         z : OUT std_logic);
end t_add_vhd;
.................

второй вариант логичнее...

три дня этот баг искал! интересно узнать причину таких расхождений!

Обе записи практически эквивалентны. Xilinx не стал выводить никаких портов из top-level теста, видимо Modelsim не стал ничего показывать (хотя у меня на Verilog'е тоже ничего не выводится, однако переменные top модуля он все же показывает). В любом случае в Modelsim'е можно явно задать, что смотреть. Так что особой разницы быть не должно :rolleyes:

где можно почитать про структуру тестбенча vhdl. может, ise xilinx ещё что-то упрощает?
Да нету у него никакой специальной структуры - обычная модель (функциональная)

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


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

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

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

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

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

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

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

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

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

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