Положительный сдвиг. Я уже повторяюсь, но ничего. Поскольку принципиальная разница между тем, что работает и тем, что не работает, явно в декодированном адресе, я стал смотреть, что там может быть ненадежно.
Вкратце релевантные фрагменты кода (рад бы показать все, но там сейчас такое поле брани, что даже мне стыдно):
Код:
// clk_cpu это никакой не cpu, это 24мгц клок от фапчи
// cинхронизатор
reg [1:0] samp_ras_n;
reg [1:0] samp_cas_n;
always @(posedge clk_cpu) begin: _vu_sampler
samp_ras_n <= {samp_ras_n[0],VU_RAS_N};
samp_cas_n <= {samp_cas_n[0],VU_CAS_N};
end
wire negedge_cas_n = {samp_cas_n,VU_CAS_N} == 3'b100;
wire negedge_ras_n = {samp_ras_n,VU_RAS_N} == 3'b100;
// декодер адреса
reg [7:0] ra;
wire[7:0] ca = VU_SHAP_N;
always @(posedge clk_cpu) begin
if (negedge_ras_n)
ra <= VU_SHAP_N;
// if (negedge_cas_n) -- это работает только если сигналтап
if (~VU_CAS_N) // это работает без сигналтапа, причем без спец опций агрессивной оптимизации
decoded_a <= {ca[6], ~ca[7], ~ra[7], ra[4], ra[3], ra[2], ra[1],ra[0],
ca[5], ca[4], ca[3], ca[2], ca[1], ca[0], ra[6],ra[5]};
end
Вот если у меня написано как сейчас, то у меня тест держится неопределенно долгое время. Может быть что-то другое не работает, но вот это работает.
А если написано так, как мне кажется, что должно быть правильно, то есть закоментированный if, работает только с СигналТапом.
- - - Updated - - -
Сообщение от
tnt23
Для 24 мегагерц-то? у тебя небось и сдрам ишачит на осторожных 100, тут не место для таймквеста.
Ты записан следующий за седобородым старцем ранг.