Advertisement
Guest User

Untitled

a guest
May 17th, 2019
97
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: 13.05.2019 22:22:16
  7. // Design Name:
  8. // Module Name: seclock
  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 final_aue(
  22.         input clk32m,
  23.         input [3:0] btn,
  24.         output [6:0] digit1,
  25.         output [6:0] digit10,
  26.         output [6:0] digit100,
  27.         output [6:0] digit1000,
  28.         output [7:0] led
  29.     );
  30.    
  31.     seclock(
  32.         .clk(clk32m),
  33.         .enter(btn[0]),
  34.         .exit(btn[1]),
  35.         .next_dig(btn[2]),
  36.         .rotate(btn[3]),
  37.        
  38.         .q1(digit1[6:0]),
  39.         .q2(digit10[6:0]),
  40.         .q3(digit100[6:0]),
  41.         .q4(digit1000[6:0]),
  42.         .lamp(led[7:0])
  43.     );
  44.    
  45. endmodule    
  46.  
  47. module seclock(
  48.     input clk,
  49.     input enter,
  50.     //input reset,
  51.     input exit,
  52.     input next_dig,
  53.     input rotate,
  54.    
  55.     output [6:0] q1,
  56.     output [6:0] q2,
  57.     output [6:0] q3,
  58.     output [6:0] q4,
  59.     output [7:0] lamp
  60.     );
  61.    
  62.     logic [3:0] num1;
  63.     logic [3:0] num2;
  64.     logic [3:0] num3;
  65.     logic [3:0] num4;
  66.    
  67.     integer condition = 0;
  68.     integer block = 0;
  69.     int count = 0;
  70.    
  71.     logic [3:0] pass1 = 4'b0001;
  72.     logic [3:0] pass2 = 4'b0010;
  73.     logic [3:0] pass3 = 4'b0011;
  74.     logic [3:0] pass4 = 4'b0100;
  75.    
  76.     logic [3:0] code1 = 4'b0000;
  77.     logic [3:0] code2 = 4'b0000;
  78.     logic [3:0] code3 = 4'b0000;
  79.     logic [3:0] code4 = 4'b0000;
  80.    
  81.     logic [2:0] cur_dig = 3'b000;
  82.    
  83.     //поiхали
  84.     main_menu c0(
  85.         .cond(condition),
  86.         .block(block),
  87.         .num1(num1),
  88.         .num2(num2),
  89.         .num3(num3),
  90.         .num4(num4),
  91.         .lamp(lamp)
  92.     );
  93.    
  94.     cond_change c1(
  95.         .clk(clk),
  96.         .enter(enter),
  97.         //.reset(reset),
  98.         .exit(exit),
  99.         .cond_out(condition)
  100.     );
  101.    
  102.     entering c2(
  103.         .cond(condition),
  104.         .clk(clk),
  105.         .nextd(next_dig),
  106.         .rotate(rotate),
  107.         .pass1(pass1),
  108.         .pass2(pass2),
  109.         .pass3(pass3),
  110.         .pass4(pass4),
  111.         .block(block),
  112.         .count(count),
  113.         .code1(code1),
  114.         .code2(code2),
  115.         .code3(code3),
  116.         .code4(code4),
  117.         .lamp(lamp)
  118.     );
  119.    
  120.     block_rule c3(
  121.         .block(block),
  122.         .count(count)
  123.     );
  124.    
  125.     block_module c4(
  126.         //.cond(condition),
  127.         .block(block),
  128.         .num1(num1),
  129.         .num2(num2),
  130.         .num3(num3),
  131.         .num4(num4),
  132.         .count(count),
  133.         .block_out(block)
  134.     );
  135.    
  136.     digits_conv c5(
  137.         .num(num1),
  138.         .dig(q1)
  139.     );
  140.            
  141.     digits_conv c6(
  142.         .num(num2),
  143.         .dig(q2)
  144.     );
  145.    
  146.     digits_conv c7(
  147.         .num(num3),
  148.         .dig(q3)
  149.     );
  150.            
  151.     digits_conv c8(
  152.         .num(num4),
  153.         .dig(q4)
  154.     );
  155.    
  156.     show_enter c9(
  157.         .code1(code1),
  158.         .code2(code2),
  159.         .code3(code3),
  160.         .code4(code4),
  161.         .num1(num1),
  162.         .num2(num2),
  163.         .num3(num3),
  164.         .num4(num4)
  165.     );
  166.    
  167. endmodule
  168.  
  169. module cond_change(
  170.     input clk,
  171.     input enter,
  172.     input reset,
  173.     input exit,
  174.     output integer cond_out
  175.     );
  176.    
  177.     always @(posedge clk) begin
  178.         if(enter) begin
  179.             cond_out = 2;
  180.         end
  181.         else if(exit) begin
  182.             cond_out = 0;
  183.         end
  184.     end
  185.    
  186. endmodule
  187.  
  188. module main_menu(
  189.     input cond,
  190.     input block,
  191.     output logic [3:0] num1,
  192.     output logic [3:0] num2,
  193.     output logic [3:0] num3,
  194.     output logic [3:0] num4,
  195.     output logic [6:0] lamp
  196.     );
  197.    
  198.     always @ (cond == 0 && block == 0) begin
  199.         num1 <= 4'b1010;
  200.         num2 <= 4'b1010;
  201.         num3 <= 4'b1010;
  202.         num4 <= 4'b1010;
  203.         lamp <= 7'b0000000;
  204.     end;
  205.    
  206. endmodule
  207.  
  208. module block_rule(
  209.         input integer count,
  210.         output integer block
  211.     );
  212.    
  213.     always @ (count == 3) begin
  214.         block <= 1;
  215.     end
  216.    
  217. endmodule
  218.  
  219. module block_module(
  220.     input integer block,
  221.     output logic [3:0] num1,
  222.     output logic [3:0] num2,
  223.     output logic [3:0] num3,
  224.     output logic [3:0] num4,
  225.     output integer block_out,
  226.     //output integer cond,
  227.     output integer count
  228.     );
  229.     always @ (block == 1) begin
  230.         num1 <= 4'b0000;
  231.         num2 <= 4'b0000;
  232.         num3 <= 4'b0000;
  233.         repeat (60) begin
  234.             #50 num4 <= num4 + 1;                   //maybe not 1000000
  235.             if(num4 > 10) begin
  236.                 num4 <= 4'b0000;
  237.                 num3 <= num3 + 1;
  238.             end;
  239.         end;
  240.         //cond <= 0;
  241.         block_out <= 0;
  242.         count <= 0;
  243.     end;
  244.  
  245. endmodule
  246.  
  247. module digits_conv(
  248.     input [3:0]num,
  249.     output logic [6:0] dig
  250.     );
  251.    
  252.     always_comb begin
  253.         if (num == 4'b0000) dig <= 7'b0111111; // 0d
  254.         if (num == 4'b0001) dig <= 7'b0110000; // 1d
  255.         if (num == 4'b0010) dig <= 7'b1011011; // 2d
  256.         if (num == 4'b0011) dig <= 7'b1001111; // 3d
  257.         if (num == 4'b0100) dig <= 7'b1100110; // 4d
  258.         if (num == 4'b0101) dig <= 7'b1101101; // 5d
  259.         if (num == 4'b0110) dig <= 7'b1111101; // 6d
  260.         if (num == 4'b0111) dig <= 7'b0000111; // 7d
  261.         if (num == 4'b1000) dig <= 7'b1111111; // 8d
  262.         if (num == 4'b1001) dig <= 7'b1101111; // 9d
  263.         if (num == 4'b1010) dig <= 7'b1000000; // -d
  264.     end
  265.    
  266. endmodule
  267.  
  268. module show_enter(
  269.         input logic [3:0] code1,
  270.         input logic [3:0] code2,
  271.         input logic [3:0] code3,
  272.         input logic [3:0] code4,
  273.         input integer cond,
  274.         output logic [3:0] num1,
  275.         output logic [3:0] num2,
  276.         output logic [3:0] num3,
  277.         output logic [3:0] num4
  278.     );
  279.    
  280.     always @ (cond == 2) begin
  281.         num1 <= code1;
  282.         num2 <= code2;
  283.         num3 <= code3;
  284.         num4 <= code4;
  285.     end
  286.    
  287. endmodule
  288.  
  289. module entering(
  290.     input cond,
  291.     input clk,
  292.     input nextd,
  293.     input rotate,
  294.     input logic [3:0] pass1,
  295.     input logic [3:0] pass2,
  296.     input logic [3:0] pass3,
  297.     input logic [3:0] pass4,
  298.     output integer count,
  299.     input integer block,
  300.     output logic [3:0] code1,
  301.     output logic [3:0] code2,
  302.     output logic [3:0] code3,
  303.     output logic [3:0] code4,
  304.     output logic [7:0] lamp
  305.     //output logic [2:0] dig
  306.    
  307.     );
  308.    
  309.     logic [2:0] dig;
  310.     initial dig = 3'b000;
  311.     initial code1 = 4'b0000;
  312.     initial code2 = 4'b0000;
  313.     initial code3 = 4'b0000;
  314.     initial code4 = 4'b0000;
  315.  
  316.     always @ (posedge clk) begin
  317.         if((rotate) & (cond == 2) & (block == 0) & (dig == 0)) begin
  318.             code1 <= code1 + 1;
  319.             if(code1 > 9) begin
  320.                 code1 <= 4'b0000;
  321.             end
  322.         end
  323.         if((rotate) & (cond == 2) & (block == 0) & (dig == 1)) begin
  324.             code1 <= code1 + 1;
  325.             if(code1 > 9) begin
  326.                 code1 <= 4'b0000;
  327.             end
  328.         end
  329.         if((rotate) & (cond == 2) & (block == 0) & (dig == 2)) begin
  330.             code1 <= code1 + 1;
  331.             if(code1 > 9) begin
  332.                 code1 <= 4'b0000;
  333.             end
  334.         end
  335.         if((rotate) & (cond == 2) & (block == 0) & (dig == 3)) begin
  336.             code1 <= code1 + 1;
  337.             if(code1 > 9) begin
  338.                 code1 <= 4'b0000;
  339.             end
  340.         end
  341.        
  342.         if((nextd) & (cond == 2) & (block == 0) & (dig == 3)) begin
  343.             if(code1 == pass1 && code2 == pass2 && code3 == pass3 && code4 == pass4) begin
  344.                 lamp <= 8'b11111111;
  345.                 dig <= 3'b000;
  346.             end
  347.             else begin
  348.                 lamp <= 8'b10000001;
  349.                 count <= count + 1;
  350.                 dig <= 3'b000;
  351.             end
  352.         end
  353.         else if((nextd) & (cond == 2) & (block == 0)) begin
  354.             dig <= dig + 1;
  355.         end
  356.     end
  357.  
  358. endmodule
  359.  
  360. //module dig_cur(
  361. //        input [2:0] dig1,
  362. //        output logic [2:0] dig2
  363. //    );
  364.    
  365. //    if(dig1 == 4) begin
  366.    
  367. //    end
  368. //endmodule
  369. //module clicker(
  370. //    input btn,
  371. //    input clk,
  372. //    output logic q
  373. //    );
  374.    
  375. //    logic t1;
  376. //    logic t2;
  377.    
  378. //    always_ff @(posedge clk) begin
  379. //        {t2,t1} <= {t1,!btn};
  380. //    end
  381.    
  382. //    assign q = t1 & !t2;
  383. //endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement