Subversion Repositories ngs

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. // clocker module for simulation
  2.  
  3. module clocker(
  4.  
  5.         input  wire clk1,
  6.         input  wire clk2,
  7.  
  8.         input  wire clksel,
  9.         input  wire divsel,
  10.  
  11.         output wire clkout
  12. );
  13.  
  14. /*
  15. ъръ сы Є№ ЄєЄ яхЁхъы■ўшЄ№ ъыюъш?
  16. ёэрўрыр clksel ЁхёшэїЁшь яю т√їюфэюьє ъыюъє, ъръ яЁющф╕Є -
  17. т√їюфэющ ъыюъ т√ъы■ўшыш
  18. яюЄюь яю эютюьє тїюфэюьє ъыюъє єцх яЁюЁхёшэїЁхээюх яЁюуюэ хь
  19. х∙х Ёрч ЁхёшэїЁ  - ш ъръ яЁю°ыю, тъы■ўрхь т√їюф юя Є№
  20. */
  21.  
  22.         wire midck,ck;
  23.  
  24.         reg cksel,midsel;
  25.         reg ckon;
  26.  
  27.         reg divby2,idiv;
  28.  
  29.  
  30.  
  31.         initial
  32.         begin
  33.                 ckon = 1'b1;
  34.                 cksel = 1'b0;
  35.                 midsel = 1'b0;
  36.         end
  37.  
  38.  
  39.  
  40.         assign midck = midsel ? clk2 : clk1;
  41.  
  42.         always
  43.         begin
  44.                 @(negedge ck);
  45.  
  46.                 if( cksel!=clksel )
  47.                 begin
  48.                         ckon   <= 1'b0;
  49.                         midsel <= clksel;
  50.  
  51.                         repeat(2) @(negedge midck);
  52.  
  53.                         ckon  <= 1'b1;
  54.                         cksel <= midsel;
  55.                 end
  56.         end
  57.  
  58.         assign ck = ckon ? (cksel ? clk2 : clk1) : 1'b0;
  59.  
  60.  
  61.  
  62.         initial
  63.                 divby2 = 1'b0;
  64.  
  65.         always @(posedge ck)
  66.                 divby2 <= ~divby2;
  67.  
  68.  
  69.         always @(negedge clkout)
  70.                 idiv <= divsel;
  71.  
  72.  
  73.         assign clkout = idiv ? divby2 : ck;
  74.  
  75.  
  76.  
  77. endmodule
  78.  
  79.