Сделал так
io буфер управляется напрямую
Код
wire ArmReading = ~iCSn & ~iOEn;
assign ioData = ArmReading ? dataOut : 8'hzz;
далее сигналы cs, oe, we пропускаются через два триггера, после формируются стробы
Код
always @(posedge iClk) begin
{rrCSn, rCSn} <= {rCSn, iCSn};
{rrWEn, rWEn} <= {rWEn, iWEn};
{rrOEn, rOEn} <= {rOEn, iOEn};
end
wire wwArmWriting = ~rrCSn & ~rrWEn;
wire wwArmReading = ~rrCSn & ~rrOEn;
always @(posedge iClk) begin
syncArmWr <= wwArmWriting;
syncArmWrStr <= wwArmWriting & ~syncArmWr;
syncArmRd <= wwArmReading;
syncArmRdStr <= wwArmReading & ~syncArmRd;
end
соответственно iAddr, ioData обрабатываются в fsmке по стробам, далее в 3 такта происходит работа (чтение\запись) с блочной памятью
Maverick, напрямую с блочной работало как часы, но еще нужна конфигурация через регистры. Скорость обмена около 20ms на чтение\запись 8 каналов и конфигурацию.
Сообщение отредактировал gotcha - Oct 24 2014, 06:56