Цитата(sergeeff @ May 1 2010, 19:35)

Смотрю осциллографом - в fpga проскакивают импульсы на выходе disp_rd, хотя никакого чтения по адресам 0х2000900х не производится. Что неправильно написано в veriloge?
Код
module decoder(adr, n_cs3, n_wr, n_rd, disp_wr, disp_rd);
<...>
assign disp_wr = (adr[15:4] == 12b'1001_0000_0000) & ~n_cs3 & ~n_wr;
assign disp_rd = (adr[15:4] == 12b'1001_0000_0000) & ~n_cs3 & ~n_rd;
endmodule
Ваш модуль описывает чисто комбинационную логику. По этой причине сигналы disp_wr и disp_rd содержат "иголки", возникающие из-за гонок при прохождении сигналов через логику. Основным способом борьбы с этим является использование регистров и синхронного дизайна. Ваш модуль должен быть похож на это:
Код
module decoder(clk, reset, adr, n_cs3, n_wr, n_rd, disp_wr, disp_rd);
<...>
reg disp_wr;
reg disp_rd;
always @(posedge clk) begin
if(reset) begin
disp_wr <= 0;
disp_rd <= 0;
end
else begin
disp_wr <= (adr[15:4] == 12b'1001_0000_0000) & ~n_cs3 & ~n_wr;
disp_rd <= (adr[15:4] == 12b'1001_0000_0000) & ~n_cs3 & ~n_rd;
end
end
endmodule
Т.е. вам нужно еще завести два глобальных системных сигнала - клок и сброс.
В вышеописанном примере правые части выражения будут так же давать на выходе "иголки" при переключении логики, но важно, чтобы "иголок" не было в момент прихода фронта клока. Если по времянкам все укладывается в требования, то все процессы переключения в логике успеют завершиться при приходе клока.
Нужно помнить и учитывать, что такое решение дает задержку. Но еще важнее то, что это далеко не полное решение. Входящие сигналы от процессора (шина и сигналы управления) являются асинхронными по отношению к внутреннему клоку ПЛИС, поэтому прямо вот так это использовать нельзя - будут глюки из-за метастабильности. Все эти сигналы (сигналы управления в обязательном порядке) необходимо пропустить через синхронизаторы. Это еще даст задержку, что тоже нужно учитвать.

Простейшая реализация синхронизатора - цепочка из двух последовательно соединенных триггеров.
«Отыщи всему начало, и ты многое поймёшь» К. Прутков