Advertisement
Krystian102

Untitled

Apr 9th, 2020
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module zad3(
  2.     input CLOCK_50,
  3.     input [7:0] SW,
  4.     input [0:3] KEY,
  5.     output [0:6] HEX0, HEX1, HEX2, HEX3, HEX4, HEX5);
  6.    
  7.     wire unitsSetToDozensSet, dozensSetToUnitsSek, unitsSekToDozensSek;
  8.     wire dozensSekToUnitsMin, unitsMinToDozensMin;
  9.     wire clk, terminator;
  10.     wire [3:0] unitsSetHex, dozensSetHex, unitsSekHex, dozensSekHex, unitsMinHex, dozensMinHex;
  11.    
  12.     counter_to_make_delay_10_ms(CLOCK_50, 1, clk);
  13.    
  14.     counter_mod_M_rollover_aload #(10) setUnits(clk,1, KEY[0],KEY[1],SW[3:0],unitsSetHex,unitsSetToDozensSet);
  15.     counter_mod_M_rollover_aload #(10) setDozens(unitsSetToDozensSet,1, 1,KEY[1],SW[7:4],dozensSetHex,dozensSetToUnitsSek);
  16.    
  17.     counter_mod_M_rollover_aload #(10) sekUnits(dozensSetToUnitsSek,1,1,KEY[2],SW[3:0],unitsSekHex,unitsSekToDozensSek);
  18.     counter_mod_M_rollover_aload #(6) sekDozens(unitsSekToDozensSek,1, 1,KEY[2],SW[7:4],dozensSekHex,dozensSekToUnitsMin);
  19.    
  20.     counter_mod_M_rollover_aload #(10) minUnits(dozensSekToUnitsMin,1,1,KEY[3],SW[3:0],unitsMinHex,unitsMinToDozensMin);
  21.     counter_mod_M_rollover_aload #(6) minDozens(unitsMinToDozensMin,1, 1,KEY[3],SW[7:4],dozensMinHex,terminator);
  22.    
  23.     decoder_hex_10 ex1(unitsSetHex,HEX0);
  24.     decoder_hex_10 ex2(dozensSetHex,HEX1);
  25.     decoder_hex_10 ex3(unitsSekHex,HEX2);
  26.     decoder_hex_10 ex4(dozensSekHex,HEX3);
  27.     decoder_hex_10 ex5(unitsMinHex,HEX4);
  28.     decoder_hex_10 ex6(dozensMinHex,HEX5);
  29.    
  30. endmodule
  31.  
  32. module counter_to_make_delay_10_ms(
  33.     input clk, aclr,
  34.     output reg clockTact);
  35.    
  36.     reg [25:0] i;
  37.    
  38.     always@(posedge clk, negedge aclr)
  39.         if(!aclr)
  40.             begin
  41.                 i<=0;
  42.                 clockTact<=0;
  43.             end
  44.         else
  45.             begin
  46.                 if(i==2)
  47.                     begin
  48.                         i<=0;
  49.                         clockTact<=1;
  50.                     end
  51.                 else
  52.                     begin
  53.                         i<=i+1;
  54.                         clockTact<=0;
  55.                     end
  56.             end
  57.    
  58. endmodule
  59.  
  60. module counter_mod_M_rollover_aload
  61.     #(parameter M=16)
  62.     (input clk, aclr, enable, aload,
  63.     input [N-1:0] data,
  64.     output reg [N-1:0] Q={N{1'b0}},
  65.     output reg rollover=0);
  66.    
  67.     localparam N=clogb2(M-1);
  68.     function integer clogb2(input [31:0] v);
  69.         for(clogb2=0;v>0;clogb2=clogb2+1)
  70.             v=v>>1;
  71.     endfunction
  72.    
  73.     always@(posedge clk, negedge aclr, posedge aload)
  74.         if(!aclr) Q<={N{1'b0}};
  75.         else if(aload) Q<=data;
  76.         else if(Q==M-1)
  77.             begin
  78.                 Q<={N{1'b0}};
  79.                 rollover<=1;
  80.             end
  81.         else if(enable)
  82.             begin
  83.                 Q<=Q+1'b1;
  84.                 rollover<=0;
  85.             end
  86.         else Q<=Q;
  87.    
  88. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement