Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    12:56:50 11/14/2018
  7. // Design Name:
  8. // Module Name:    zad
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module zad #(parameter range=15)(input clk, rst, in,
  22.                     output reg ready, ovl, output reg[clogb2(range)-1:0] data
  23.     );
  24.  
  25. // detektor zbocza opadajacego
  26. reg[1:0] tmp;
  27. wire zbocze;
  28.  
  29. always @(posedge clk, posedge rst)
  30.     if(rst)
  31.         tmp <= 2'b00;
  32.     else begin
  33.         tmp[0] <= in;
  34.         tmp[1] <= tmp[0];
  35.     end
  36.  
  37. assign zbocze = ~tmp[0] & tmp[1];
  38.  
  39. reg[clogb2(range)-1:0] licznik;
  40.  
  41. // licznik
  42. always @(posedge clk, posedge rst) begin
  43.     if(rst) begin
  44.         licznik <= 1'b0;
  45.         ovl <= 1'b0;
  46.     end
  47.     else begin
  48.         if (zbocze) begin
  49.             licznik <= 1'b0;
  50.         end
  51.         else if (in) begin
  52.             licznik <= licznik + 1'b1;
  53.             if (licznik == range)
  54.                 ovl <= 1'b1;
  55.         end
  56.     end
  57. end
  58.  
  59. // rejestr wyjsciowy
  60. always @(posedge clk, posedge rst) begin
  61.     if (rst) begin
  62.         ready <= 1'b0;
  63.         data <= 1'b0;
  64.     end
  65.     else if (zbocze) begin
  66.             ready <= 1'b1;
  67.             data <= licznik;
  68.         end
  69.         else begin
  70.             ready <= 1'b0;
  71.         end
  72. end
  73.  
  74. // funkcja logarytmujaca
  75. function integer clogb2(input integer value);
  76.     begin
  77.         value = value - 1;
  78.         for(clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
  79.             value = value >> 1;
  80.     end
  81. endfunction
  82.  
  83. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement