[an error occurred while processing this directive]
|
Вот имеем некий проектик, в нем есть модуль (на Verilog'е, хотя это, видимо, не суть важно). Это синтезируемая часть. Для моделирования создаем другой модуль (testbench), куда включаем наш тестируемый модуль под именем, например, UUT (как в мануальный примерах). Описываем все окружение - воздействия на UUT, реакции на сигналы с выходов UUT. Запускаем функциональное моделирование. Все замечательно - все работает, ошибки отлавливаются, иерархия модулей соблюдается, словом, все удобно и хорошо. Всю систему можно отмоделировать до тонкостей.
Теперь скармливаем наш синтезируемый модуль синтезатору, потом имплементатору. Теперь хочется проделать то же самое моделирование, но на уровне реального чипа - со всеми времянками. И тут возникает два вопроса:
1. Тот testbench уже тут не годится - временнОй симулятор отказывается его кушать, что, в общем-то, до некоторой степени понятно. Вопрос: как быть? Это вообще невозможно сделать - промоделировать на временнОм уровне с использованием объемлющего модуля - тесбенча, написанного на языке, или все-таки есть какой-то путь?
2. После синтезирования и имплементации на вход симулятора подается файл с низкоуровневыми описаниями примитивов, где исходной иерархией и не пахнет, поэтому как-то нелегко оказывается даже просто посмотреть на входные/выходные сигналы модулей, присутствующих в исходном. Например, есть там простой модуль регистра с параллельным входом и параллельным выходом:
//---------------------------------------------------------
module MBufReg(data, clk, q);
parameter MSB = `WIDTH - 1;
input [MSB:0] data;
input clk;
output [MSB:0] q;
reg [MSB:0] q;
always @(posedge clk) q = data;
endmodule
//---------------------------------------------------------
После имплементации, чтобы посмотреть, что на входе и что на выходе этого регистра, приходится кропотливо лазить по обширному списку сигналов с (порой) маловразумительными именами, чтобы собрать по крупицам входы и выходы триггеров, образующих этот регистр.
Понятно, что в случае более сложных объектов задача усложняется многократно. Посему вопрос: это так и есть, что после имлементации с потохами почти невозможно работать, или все же имеется способ обойти это? Т.е. ситуация, как в случае дизассеблированного кода при отсутствии символьной информации.
И как вообще по уму делают? Может это нормально, что основное моделирование проводят на функциональном уровне, где нет этих пробелем, а времянки смотрят очень ограниченно? Или нет? По имеющимуся опыту работы с AHDL+Maxplus+Quartus, уж на уровне триггеров/регистров все можно посмотреть без особых проблем. А как в случае VHDL/Verilog+синтезатор+имплементатор?
P.S. Использованные тулзы: оболочка/симулятор Active-HDL, синтезатор Synplify (Pro), имплементаторы ISE и Quartus.
Спасибо.
E-mail: info@telesys.ru