Rev 23 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
// clocker module for simulation
module clocker(
input wire clk1,
input wire clk2,
input wire clksel,
input wire divsel,
output wire clkout
);
/*
êàê áëÿòü òóò ïåðåêëþ÷èòü êëîêè?
ñíà÷àëà clksel ðåñèíõðèì ïî âûõîäíîìó êëîêó, êàê ïðîéä¸ò -
âûõîäíîé êëîê âûêëþ÷èëè
ïîòîì ïî íîâîìó âõîäíîìó êëîêó óæå ïðîðåñèíõðåííîå ïðîãîíÿåì
åùå ðàç ðåñèíõðÿ - è êàê ïðîøëî, âêëþ÷àåì âûõîä îïÿòü
*/
/*
* âûøå íàïèñàíà õóåòà!11
*/
wire midck,ck;
reg cksel,midsel;
reg ckon;
reg divby2,idiv;
initial
begin
ckon = 1'b1;
cksel = 1'b0;
midsel = 1'b0;
end
assign midck = midsel ? clk2 : clk1;
always
begin
@(negedge ck);
if( cksel!=clksel )
begin
ckon <= 1'b0;
midsel <= clksel;
repeat(2) @(negedge midck);
ckon <= 1'b1;
cksel <= midsel;
end
end
assign ck = ckon ? (cksel ? clk2 : clk1) : 1'b0;
initial
begin
divby2 = 1'b0;
idiv=1'b0;
end
always @(posedge ck)
divby2 <= ~divby2;
always @(posedge divby2)
idiv <= divsel;
assign clkout = idiv ? divby2 : ck;
endmodule