Advertisement
fellpz

Projeto Final

Aug 30th, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module projeto_final(CLOCK_50, KEY, SW, HEX0, HEX1, HEX2, HEX3, LEDR, LEDG, co_soma1, soma1, co_soma_1, co_soma_2, soma2, co_soma_2, co_soma_3, soma3, sub_1, bo_sub_1, sub_2, bo_sub_2, sub_3, bo_sub_3);
  2.  
  3. reg [2:0] mem [0:3];
  4.  
  5. input [9:0] SW;
  6. output [6:0]HEX0;
  7. output [6:0]HEX1;
  8. output [6:0]HEX2;
  9. output [6:0]HEX3;
  10. output reg [9:0]LEDR;
  11. output reg [7:0]LEDG;
  12. input CLOCK_50;
  13. input [3:0]KEY;
  14.  
  15. output wire co_soma1, soma1, co_soma_1, co_soma_2, soma2, co_soma_2, co_soma_3, soma3, sub_1, bo_sub_1, sub_2, bo_sub_2, sub_3, bo_sub_3;
  16.  
  17. assign data_1 = {SW[5], SW[4], SW[3]};
  18. assign data_2 = {SW[9], SW[8], SW[7]};
  19.  
  20. reg[31:0] cont;
  21. reg counter;
  22. assign clear = ~KEY[0];
  23.  
  24. reg [4:0]temp;
  25. reg salvar = 0;
  26.  
  27. hex_7seg_operation(LEDR[9:6],HEX3);
  28. hex_7seg(LEDR[4:0], HEX0, HEX1, HEX2, LEDR[4], LEDR[2], LEDR[1], LEDR[0]);
  29.  
  30. F_A f_a0(SW[3], SW[7], SW[6], co_soma_1 , soma1);
  31. F_A f_a1(SW[4], SW[8], co_soma_1, co_soma_2 , soma2);
  32. F_A f_a2(SW[5], SW[9], co_soma_2, co_soma_3 , soma3);
  33.  
  34. F_S f_s0(SW[7], SW[3], SW[6], sub_1, bo_sub_1);
  35. F_S f_s1(SW[8], SW[4], bo_sub_1, sub_2, bo_sub_2);
  36. F_S f_s2(SW[9], SW[5], bo_sub_2, sub_3, bo_sub_3);
  37.  
  38. always @(negedge CLOCK_50) // Divisao de clock
  39. begin
  40.  if (clear)
  41.     cont = 0;
  42.  else begin
  43.     cont = cont + 1;
  44.     counter = cont[23]; // (50*10^6) / (2^23) = 5,9
  45.  end
  46.  
  47. end
  48.  
  49. always @ (negedge counter)
  50. begin
  51.     //Onde vai acontecer as coisas
  52.    
  53.     if (SW[2] == 0 && SW[1] == 0 && SW[0] == 0) begin //0 - Nada
  54.         LEDR[9:6] = 4'b0000; // Display 4
  55.         LEDR[4:0] = 5'b10000; // flag, blank1, blank2, blank3  
  56.        
  57.     end else if (SW[2] == 0 && SW[1] == 0 && SW[0] == 1) begin //1 - Soma
  58.         LEDR[9:6] = 4'b0001;
  59.         LEDR[4] = 1'b0;
  60.         LEDR[3:0] = {co_soma_3, soma3, soma2, soma1};
  61.        
  62.     end else if (SW[2] == 0 && SW[1] == 1 && SW[0] == 0) begin //2 - Subtração
  63.         LEDR[9:6] = 4'b0010;
  64.         LEDR[4] = 1'b0;
  65.         LEDR[3:0] = {bo_sub_3, sub_3, sub_2, sub_1};
  66.        
  67.     end else if (SW[2] == 0 && SW[1] == 1 && SW[0] == 1) begin //3 - Inversao
  68.         LEDR[9:6] = 4'b0011;
  69.         LEDR[4] = 5'b1;
  70.         LEDR[2:0] = {~SW[9], ~SW[8], ~SW[7]};
  71.        
  72.         //Falta implementar numeros negativos, se der tempo a gente faz
  73.     end else if (SW[2] == 1 && SW[1] == 1 && SW[0] == 0) begin //6 - Deslocamento direita
  74.         LEDR[9:6] = 4'b0110;
  75.         LEDR[4] = 1'b1;
  76.         if (KEY[2] == 0) begin
  77.             LEDR[2:0] = {SW[9], SW[8], SW[7]};
  78.         end
  79.         else if (KEY[3] == 0) begin
  80.             LEDR[2:0] = LEDR[2:0] >> 1;
  81.         end
  82.        
  83.     end else if (SW[2] == 1 && SW[1] == 1 && SW[0] == 1) begin //7 - Deslocamento Esquerda
  84.         LEDR[9:6] = 4'b0111;
  85.         LEDR[4] = 1'b1;
  86.         if (KEY[2] == 0)
  87.         LEDR[2:0] = {SW[9], SW[8], SW[7]};
  88.         if (KEY[3] == 0) begin
  89.             LEDR[2:0] = LEDR[2:0] << 1;
  90.         end
  91.        
  92.     end else if (SW[2] == 1 && SW[1] == 0 && SW[0] == 0) begin //4 - Escrita na memória
  93.         LEDR[9:6] = 4'b0100;
  94.         LEDR[4:3] = 1'b0;
  95.         LEDR[2:0] = SW[9:7];
  96.         if (SW[5] != 1'b0 || SW[4] != 1'b0 || SW[3] != 1'b0) begin
  97.             LEDG[3] = 0;
  98.             LEDG[2:0] = {SW[5], SW[4], SW[3]};
  99.         end
  100.         if (KEY[3] == 0) begin
  101.             mem[SW[9:7]] = LEDG[3:0];
  102.             LEDG[3:0] = 4'b0;
  103.             salvar = ~salvar;
  104.         end
  105.     end else if (SW[2] == 1 && SW[1] == 0 && SW[0] == 1) begin //5 - Leitura da memória
  106.         LEDR[9:6] = 4'b0101;
  107.         LEDR[4:3] = 1'b0;
  108.         LEDG[7:4] = mem[SW[9:7]];
  109.         LEDR[3:0] = LEDG[7:4];
  110.     end
  111.    
  112.     if (KEY[1] == 0) begin // Salvar temporariamente
  113.         if (salvar == 0)
  114.             LEDG[4:0] = LEDR[4:0];
  115.         else
  116.             LEDG[4:0] = 5'b0;
  117.         salvar = ~salvar;
  118.     end
  119. end
  120.  
  121. endmodule
  122.  
  123. //-----------------------------------------DISPLAY 3, 2, 1-----------------------------------------------------------
  124. //hex_7seg(LEDR[4:0], HEX0, HEX1, HEX2);
  125. module hex_7seg(hex_digit, seg, seg2, seg3, flag, blank_1, blank_2, blank_3);
  126.     input [4:0]hex_digit;
  127.     input blank_1, blank_2, blank_3, flag;
  128.     reg [3:0]div;
  129.     reg [3:0]resto;
  130.     output reg [6:0]seg;
  131.     output reg [6:0]seg2;
  132.     output reg [6:0]seg3;
  133.    
  134.     always@(hex_digit)// trocar o parametro por "1", talvez fique melhor. O mesmo para os casos posteriores
  135.     begin
  136.     if (~flag) begin
  137.         case (hex_digit%10)
  138.            
  139.             4'h0 : seg = 7'b1000000;
  140.             4'h1 : seg = 7'b1111001;
  141.             4'h2 : seg = 7'b0100100;
  142.             4'h3 : seg = 7'b0110000;
  143.             4'h4 : seg = 7'b0011001;
  144.             4'h5 : seg = 7'b0010010;
  145.             4'h6 : seg = 7'b0000010;
  146.             4'h7 : seg = 7'b1111000;
  147.             4'h8 : seg = 7'b0000000;
  148.             4'h9 : seg = 7'b0010000;  
  149.         endcase
  150.         case (hex_digit/10)
  151.             4'h0 : seg2 = 7'b1000000;
  152.             4'h1 : seg2 = 7'b1111001;
  153.             4'h2 : seg2 = 7'b0100100;
  154.             4'h3 : seg2 = 7'b0110000;
  155.             4'h4 : seg2 = 7'b0011001;
  156.             4'h5 : seg2 = 7'b0010010;
  157.             4'h6 : seg2 = 7'b0000010;
  158.             4'h7 : seg2 = 7'b1111000;
  159.             4'h8 : seg2 = 7'b0000000;
  160.             4'h9 : seg2 = 7'b0010000;
  161.          endcase    
  162.     end else if (flag) begin
  163.         //Falta por o case de blank1, blank2 e blank3, para saver se vai apagar ou nao. Fazer case ou o esquema do ?
  164.         if (blank_3 == 0) begin
  165.             seg = ~7'h00;
  166.         end else begin
  167.             seg = 7'h00;
  168.         end
  169.         if (blank_2 == 0) begin
  170.             seg2 = ~7'h00;
  171.         end else begin
  172.             seg2 = 7'h00;
  173.         end
  174.         if (blank_1 == 0) begin
  175.             seg3 = ~7'h00;
  176.         end else begin
  177.             seg3 = 7'h00;
  178.         end
  179.     end
  180. end
  181. endmodule
  182. //------------------------------------------------------------------------------------------
  183.  
  184. //-----------------Display 4 ---------------------------------------------------------------
  185. module hex_7seg_operation(hex_digit, seg);
  186.     input [4:0]hex_digit;
  187.     output reg [6:0]seg;
  188.    
  189.     always@(hex_digit)
  190.     case (hex_digit)
  191.        
  192.         4'h0 : seg = 7'b1000000;
  193.         4'h1 : seg = 7'b1111001;
  194.         4'h2 : seg = 7'b0100100;
  195.         4'h3 : seg = 7'b0110000;
  196.         4'h4 : seg = 7'b0011001;
  197.         4'h5 : seg = 7'b0010010;
  198.         4'h6 : seg = 7'b0000010;
  199.         4'h7 : seg = 7'b1111000;
  200.         4'h8 : seg = 7'b0000000;
  201.         4'h9 : seg = 7'b0010000;  
  202.      endcase
  203.  
  204. endmodule
  205. //----------------------------------------------------------------------------------------
  206.  
  207. //------------------Full Adder------------------------------------------------------------
  208. module F_A(a, b, ci, co, s);
  209.  
  210.     input a, b, ci;
  211.     output reg co, s;
  212.    
  213.     always @(1)
  214.     begin
  215.         s = ci ^ a ^ b;
  216.         co = ((a & b)) | ci&(a ^ b);
  217.     end
  218.  
  219. endmodule
  220. //-----------------------------------------------------------------------------
  221.  
  222. //-----------------Full Subtrator----------------------------------------------
  223. module F_S(a, b, bi, d, bo);
  224.  
  225.     input a, b, bi;
  226.     output reg d, bo;
  227.    
  228.     always @(1)
  229.     begin
  230.         d = a ^ b ^ bi;
  231.         bo = (bi & (~(a ^ b))) | ((~a)&b);
  232.     end
  233.  
  234. endmodule
  235. //------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement