МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА: icarus ошибка симуляции?

icarus ошибка симуляции? 4 года 4 мес. назад #2669

последняя версия icarus 0.9.7 под линух.
ТАКОЕ ВПЕЧАТЛЕНИЕ, ЧТО WIRE ПРОСЧИТЫВАЕТСЯ ОДИН РАЗ, СРАЗУ ПРИ СРАБАТЫВАНИИ КЛОКА, И ЕСЛИ ПОСЛЕ КЛОКА ИЗМЕНЯЕТСЯ РЕГИСТР, НА КОТОРЫЙ ССЫЛАЕТСЯ WIRE, САМ WIRE УЖЕ НЕ ИЗМЕНИТСЯ, ОН ХРАНИТ СТАРОЕ ЗНАЧЕНИЕ (И ЭТО НЕ ПРАВИЛЬНО!). И ЕЩЕ, на следующем клоке, wire просчитается и будет содержать значение которое в нем и должно было быть... вообще это достаточно сильная ошибка и *мне так кажется* весьма распространенная.

кто\что думает по этому поводу?

module(....)
....
reg signed [31:0] delay_count;
wire [7:0] mem_w0 = delay_count;

// I use FSM:
always @ (posedge clock or posedge reset)
begin
$display("State: %d Next: %d All_done: %d", state, next_state, all_done);

if (reset)
state <= 0;
else if (start && state == 0)
state <= 1;
else
state <= next_state;
end


always @ (state)
begin
case(state)
0: begin
delay_count = 1;
end
.........
5: begin
if (wire_O1)
begin
delay_count = ($signed(delay_count) - 1);
$display("count: %d\n", $signed(delay_count)); // ЗДЕСЬ delay_count == 0 - it's ok!

// ....some code....(don't change variable delay_count)
mem_is_write = 1;

// ОШИБКА В СЛЕДУЮЩЕЙ СТРОКЕ
$display("aaa: %d_%d", mem_w0[7:0], delay_count); // ЗДЕСЬ mem_w0[7:0] == 1, delay_count == 0 - ЧТО ЯВЛЯЕТСЯ НЕ ПРАВИЛЬНЫМ, ТК mem_w0 ДОЛЖНА БЫТЬ == 0

mem_data_out[7:0] = mem_w0[7:0];
// ОШИБКА НЕ ТОЛЬКО ОТОБРАЖЕНИИ В display, НО И В ЛОГИКЕ
end
else
begin
next_state = 4;
end

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
Время создания страницы: 0.114 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Языки программирования icarus ошибка симуляции?