Advertisement
Krystian102

Untitled

Apr 13th, 2020
838
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, HEX2);
  22.  
  23. reg dioda;
  24.     assign LEDR[0]=dioda;
  25.    
  26.     always@(*)
  27.         if((unitsHex==4'b1001)&(dozensHex==4'b1001)&(hundredsHex==4'b1001))
  28.             dioda<=1;
  29.         else
  30.             dioda<=0;
  31.  
  32.    
  33. endmodule
  34.  
  35. module counter_to_make_delay(
  36.     input clk, aclr,
  37.     output reg clockTact);
  38.    
  39.     reg [25:0] i;
  40.    
  41.     always@(posedge clk, negedge aclr)
  42.         if(!aclr)
  43.             begin
  44.                 i<=0;
  45.                 clockTact<=0;
  46.             end
  47.         else
  48.             begin
  49.                 if(i==3)
  50.                     begin
  51.                         i<=0;
  52.                         clockTact<=1;
  53.                     end
  54.                 else
  55.                     begin
  56.                         i<=i+1;
  57.                         clockTact<=0;
  58.                     end
  59.             end
  60.    
  61. endmodule
  62.  
  63. module counter_modulo_10
  64.     #(parameter k=10)
  65.     (input clk, aclr, enable,
  66.     output reg [N-1:0] Q,
  67.     output reg rollover);
  68.    
  69.     localparam N=clogb2(k-1);
  70.     function integer clogb2(input [31:0] v);
  71.     for(clogb2=0;v>0;clogb2=clogb2+1)
  72.         v=v>>1;
  73.     endfunction
  74.    
  75.     always@(posedge clk, negedge aclr)
  76.         if(!aclr)
  77.             Q<=0;
  78.         else
  79.             if(enable==1)
  80.                 begin
  81.                     if(Q==(k-1))
  82.                         begin
  83.                             rollover<=1;
  84.                             Q<=0;
  85.                         end
  86.                     else
  87.                         begin
  88.                             rollover<=0;
  89.                             Q<=Q+1;
  90.                         end
  91.                 end
  92.    
  93. endmodule
  94.  
  95. module decoder_hex_10(
  96.     input [3:0] x,
  97.     output reg [0:6] h);
  98.    
  99.     always@(*)
  100.         case(x)
  101.             4'b0000: h=7'b0000001;
  102.             4'b0001: h=7'b1001111;
  103.             4'b0010: h=7'b0010010;
  104.             4'b0011: h=7'b0000110;
  105.             4'b0100: h=7'b1001100;
  106.             4'b0101: h=7'b0100100;
  107.             4'b0110: h=7'b0100000;
  108.             4'b0111: h=7'b0001111;
  109.             4'b1000: h=7'b0000000;
  110.             4'b1001: h=7'b0000100;
  111.        
  112.         endcase
  113.    
  114. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement