Пришлось осваивать азы Verilog'a. Простейший модуль. К ARM9 подсоединен FPGA Spartan3. Он должен вырабатывать два положительных импульса чтения/записи в контроллер дисплея. На fpga поступают cs3 от ARM (0x20000000), 16 младших разрядов адреса, системные wr и rd. Модуль сгенерировал, в fpga - записал. Запустил простенький тест: в цикле записываю информацию по адресу 0x20009001 байт данных). Смотрю осциллографом - в fpga проскакивают импульсы на выходе disp_rd, хотя никакого чтения по адресам 0х2000900х не производится. Что неправильно написано в veriloge?
Код
module decoder(adr, n_cs3, n_wr, n_rd, disp_wr, disp_rd);
input adr[15:0];
input n_wr;
input n_rd;
output disp_wr;
output 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
input adr[15:0];
input n_wr;
input n_rd;
output disp_wr;
output 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