Krystian102

Untitled

Apr 9th, 2020
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module zad2(
  2.     input CLOCK_50,
  3.     input [0:0] KEY,
  4.     output [0:6] HEX0, HEX1, HEX2,
  5.     output [0:0] LEDR);
  6.    
  7.     wire unitsToDozens, dozensToHundreds, terminator;
  8.     wire clockTakt;
  9.     wire [3:0] unitsHex, dozensHex, hundredsHex;
  10.    
  11.     assign enable = ~((unitsHex==4'b1001)&(dozensHex==4'b1001)&(hundredsHex==4'b1001));
  12.    
  13.     counter_to_make_delay delay(CLOCK_50, KEY[0], clockTakt);
  14.    
  15.     counter_modulo_10 units(clockTakt,KEY[0],enable,unitsHex, unitsToDozens);
  16.     counter_modulo_10 dozens(unitsToDozens,KEY[0],1,dozensHex, dozensToHundreds);
  17.     counter_modulo_10 hundreds(dozensToHundreds,KEY[0],1,hundredsHex, terminator);
  18.    
  19.     decoder_hex_10 ex1(unitsHex, HEX0);
  20.     decoder_hex_10 ex2(dozensHex, HEX1);
  21.     decoder_hex_10 ex3(hundredsHex, HEX3);
  22.    
  23. endmodule
  24.  
  25. module counter_to_make_delay(
  26.     input clk, aclr,
  27.     output reg clockTact);
  28.    
  29.     reg [25:0] i;
  30.    
  31.     always@(posedge clk, negedge aclr)
  32.         if(!aclr)
  33.             begin
  34.                 i<=0;
  35.                 clockTact<=0;
  36.             end
  37.         else
  38.             begin
  39.                 if(i==3)
  40.                     begin
  41.                         i<=0;
  42.                         clockTact<=1;
  43.                     end
  44.                 else
  45.                     begin
  46.                         i<=i+1;
  47.                         clockTact<=0;
  48.                     end
  49.             end
  50.    
  51. endmodule
  52.  
  53. module counter_modulo_10
  54.     #(parameter k=10)
  55.     (input clk, aclr, enable,
  56.     output reg [N-1:0] Q,
  57.     output reg rollover);
  58.    
  59.     localparam N=clogb2(k-1);
  60.     function integer clogb2(input [31:0] v);
  61.     for(clogb2=0;v>0;clogb2=clogb2+1)
  62.         v=v>>1;
  63.     endfunction
  64.    
  65.     always@(posedge clk, negedge aclr)
  66.         if(!aclr)
  67.             Q<=0;
  68.         else
  69.             if(enable==1)
  70.                 begin
  71.                     if(Q==(k-1))
  72.                         begin
  73.                             rollover<=1;
  74.                             Q<=0;
  75.                         end
  76.                     else
  77.                         begin
  78.                             rollover<=0;
  79.                             Q<=Q+1;
  80.                         end
  81.                 end
  82.    
  83. endmodule
  84.  
  85. module decoder_hex_10(
  86.     input [3:0] x,
  87.     output reg [0:6] h);
  88.    
  89.     always@(*)
  90.         case(x)
  91.             4'b0000: h=7'b0000001;
  92.             4'b0001: h=7'b1001111;
  93.             4'b0010: h=7'b0010010;
  94.             4'b0011: h=7'b0000110;
  95.             4'b0100: h=7'b1001100;
  96.             4'b0101: h=7'b0100100;
  97.             4'b0110: h=7'b0100000;
  98.             4'b0111: h=7'b0001111;
  99.             4'b1000: h=7'b0000000;
  100.             4'b1001: h=7'b0000100;
  101.        
  102.         endcase
  103.    
  104. endmodule
Advertisement
Add Comment
Please, Sign In to add comment