Использую стандартный альтеровский контроллер SDRAM, в SOPC Builder. PLL фазу покрутил тупо перекомпиляцией несколько значений и сделал вывод, что она у меня была выбрана правильно.
При неправильно выбранной фазе данные из памяти вообще не читаются (да и не грузятся процессором), а у меня другой глюк - пропадание данных случайным образом раз в секунду, две.
Тогда, пытаясь добиться каких либо изменений, поменял рассчет адреса чтения.
Было:
Код
assign address_0 = (SW[8] == 1'b0) ? address_0_w : address_0_r;
always @(posedge CLOCK_50_f) address_0_r = (VGA_VS == 1'b1) ?
(((read_n == 1'b0)&&(waitrequest == 1'b0)) ? address_0_r + 2'd2 : address_0_r + 2'd0) : 24'h000000;
Стало:
Код
assign address_0 = (SW[8] == 1'b0) ? address_0_w : address_0_r;
always @(posedge CLOCK_50_f) address_0_r = (VGA_VS == 1'b1) ?
(((read_n == 1'b0)&&(waitrequest == 1'b0)) ? address_0_r + 2'd2 : address_0_r + 2'd0) : start_adr;
wire [23:0] start_adr;
assign start_adr = (SW[1] == 1'b0) ? ((SW[0] == 1'b1) ? 24'hC00000 : 24'h000000) : 24'h810000;
address_0 - то что подается на модуль билдера, а address_0_r соответсвенно адрес чтения.
Иными словами, численное значение 24'h000000 я заменил на wire start_adr... В результате картинка стала стабильной.
Почему это повлияло так сильно, чем отличается использование wire от просто константы, поясните?
Быть. torizin-liteha@yandex.ru