[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
//*****************************************************
module cc (cH, wr, cL, rst, go);input cH; //такт шины (быстрый)
input wr; //сигнал записи
input cL; // медленный такт
input rst; // сброс
output go; // запись во внешнее устройствоreg A, AA, B, BB;
wire go;
//----------------------------------------------
always @(posedge cH)
begin
if (rst) A=0; else
begin
if(wr)
begin
if(B) AA = 1;
A= 1;
end
else
begin
if(B &(!BB)) A=0;
if(BB) AA=0;
end
end
end
//-----------------------------------------------
always @(posedge cL)
begin
if (rst) B=0; else
begin
B= A | AA ;
if(AA) BB=1; else BB=0;
end
end
//-----------------------------------------------
assign go= B;
//-----------------------------------------------
endmodule
//*****************************************************
P.S. Результат ес-но не гарантируется :)
Стандартных решений не припомню, вроде что-то подобное может быть в реализации двухпортового ОЗУ или FIFO.
Некоторые соображения:
1)Используя асинхронные входы можно сделать несколько проще.
2)Если допустим асинхронный выход (по отношению к медленному такту) проще поставить счетчик с предустановкой по wr и декрементом от такта шины.
На мой взгляд, в общем случае, это не совсем тривиальная задача. Интересно как Вы её решили?
С уважением
SNN
E-mail: info@telesys.ru