Добрый день!
Я тут нарисовал некоторую систему, в основном, используя IP компоненты из Квартуса. Отсимулировал в University Program WVF, оно работает. Решил компоненты переписать на верилоге. Помучался в верилогом (я вот вообще совсем новичок), переписал один, другой... Начал третий - и получил проблем. Не могу разобраться.
Итак, мне был нужен параллельный регистр, с сигналами ALOAD, ACLR, с возможностью превращать ео в сдвиговый регистр. У меня устройство в этот регистр по параллельной шине кладет данные, читает их, потом снова кладет, а потом мне нужен SPI наружу - регистр превращается в сдвиговый и вуаля.
Я сделал
отдельный проект только с этим регистром (на верилоге), писал-писал, отладил. Работает, симулируется, все отлично. Удалил из основного проекта IP компонент, всунул мой регистр - компилируется, но не симулируется. Дает ошибку "Error (suppressible): (vsim-3601) Iteration limit 5000 reached at time 22715 ns." Это ровно то время, когда на регистр приходит сигнал ALOAD. Погуглил, гуглится что "сигнал, помещенный в список чувствительности меняется..." Но у меня-то не меняется! Но я же смотрел, я ж его написал... У меня же этот регистр работает в другом проекте, пустом, в котором кроме регистра ничего нет..
Код регистра в студию:
module SHREG_R (CLK, ACLR, SHIFT_Enable, LOAD, DIN, SHIFTIN, DOUT, SHOUT);
parameter width=24;
input CLK;
input ACLR;
input SHIFT_Enable;
input LOAD;
input [width-1:0] DIN;
input SHIFTIN;
output [width-1:0] DOUT;
output SHOUT;
reg [width-1:0] DOUT;
always @(posedge CLK or posedge LOAD or posedge ACLR)
begin
if(ACLR) DOUT <= 0;
else
if(LOAD) DOUT <= DIN;
else
if(CLK & SHIFT_Enable) DOUT <= { DOUT[width-2:0], SHIFTIN };
end
assign SHOUT = DOUT[width-1];
endmodule
Что я делаю не так? Или мне надо выкинуть WVF, и перелезать на моделсим или что там еще?
Проект я сделаю и без верилога, собственно, я его уже и сделал, просто хочу разобраться.. с верилогом :)
Спасибо.