[an error occurred while processing this directive]
|
Как уже сказали - только синхронная схема (проблем при анализе меньше будет).
При переходе от входных сигналов счётчика к внутренней - не забудьте поставить тригеры для борьбы с метастабильностью. Можно ещё поставить фильтрик по каждой линии (это уж сами смотрите, сейчас у вас не работает наверняка не из-за этого).
Вот мой декодер, только он для наглядности был сделан в графике ActiveHDL, но думаю и так разберётесь.
Входы - подавал после перехода к внутренней частоте, выходы - на управление счётчиком. Остальное по аналогии как по ссылкам.
// ---------- Design Unit Header ---------- //
`timescale 1ps / 1ps
module quad (CLK_I,Cos_I,ENA_I,Null_I,RST_I,Sin_I,Cnt_Dir_O,Cnt_O,Null_O) ;
// ------------ Port declarations --------- //
input CLK_I;
wire CLK_I;
input Cos_I;
wire Cos_I;
input ENA_I;
wire ENA_I;
input Null_I;
wire Null_I;
input RST_I;
wire RST_I;
input Sin_I;
wire Sin_I;
output Cnt_Dir_O;
wire Cnt_Dir_O;
output Cnt_O;
wire Cnt_O;
output Null_O;
wire Null_O;
// ----------- Signal declarations -------- //
wire clk;
wire clrn;
wire ena;
wire NET1029;
wire NET1237;
wire NET2918;
wire NET2948;
wire NET529;
wire NET550;
wire prn;
// ----------- Continues assignments -------//
assign prn=1'b1;
// -------- Component instantiations -------//
assign clk = CLK_I;
assign Null_O = NET2948 & NET1237 & NET1029;
assign clrn = ~(RST_I);
ffde U13
(
.clk(clk),
.clrn(clrn),
.d(Sin_I),
.ena(ena),
.prn(prn),
.q(NET1237)
);
ffde U14
(
.clk(clk),
.clrn(clrn),
.d(Cos_I),
.ena(ena),
.prn(1'b1),
.q(NET2948)
);
assign ena = ENA_I;
ffde U3
(
.clk(clk),
.clrn(clrn),
.d(Null_I),
.ena(ena),
.prn(prn),
.q(NET1029)
);
ffde U5
(
.clk(clk),
.clrn(clrn),
.d(NET1237),
.ena(ena),
.prn(prn),
.q(NET2918)
);
ffde U6
(
.clk(clk),
.clrn(clrn),
.d(NET2948),
.ena(ena),
.prn(prn),
.q(NET529)
);
assign NET550 = NET529 ^ NET1237;
assign Cnt_Dir_O = NET2948 ^ NET2918;
assign Cnt_O = Cnt_Dir_O ^ NET550;
endmodule
E-mail: info@telesys.ru