TheLegace

CSE3215_Lab5

Mar 16th, 2012
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Lab5(
  2.                 input CLOCK_50,
  3.                 input [3:0] KEY,
  4.                 output reg [17:0] LEDR,
  5.                 inout reg [35:0] GPIO_0,
  6.                 output reg [6:0] HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7
  7. );
  8.    
  9.     reg [31:0] time4k, time50, time118, duty;
  10.     reg [15:0] count, index, sum, integral[0:1], error, pid, ki, kp;
  11.     reg [15:0] freq[0:2],temp[0:2];
  12.     reg [8:0] div, setTemp, avTemp, mult;
  13.     reg flag1, flag2;
  14.     wire [6:0] h0,h1,h2,h3,h4,h5,h6,h7,s0,s1,s2,s3;
  15.     wire K0, K1, K2, K3;
  16.    
  17.     hex_7seg(((temp[0]+temp[1]+temp[2])/3)%10, h0);
  18.     hex_7seg(((temp[0]+temp[1]+temp[2])/3)/10%10, h1);
  19.     hex_7seg(((temp[0]+temp[1]+temp[2])/3)/100%10, h2);
  20.     hex_7seg(((temp[0]+temp[1]+temp[2])/3)/1000%10, h3);
  21.    
  22.     hex_7seg(mult%10,h4);
  23.     hex_7seg(mult/10%10,h5);
  24.    
  25.     hex_7seg(setTemp%10,s0);
  26.     hex_7seg(setTemp/10%10,s1);
  27.     hex_7seg(setTemp/100%10,s2);
  28.     hex_7seg(setTemp/1000%10,s3);
  29.    
  30.     oneshot g1(K1, CLOCK_50, ~KEY[1]);
  31.     oneshot g2(K2, CLOCK_50, ~KEY[2]);
  32.  
  33.     initial begin
  34.         time50 = 0;
  35.           time4k = 0;
  36.           time118 = 0;
  37.           flag1 = 0;
  38.           flag2 = 0;
  39.           div = 2;
  40.           setTemp = 240;
  41.           index = 0;
  42.           mult = 0;
  43.          
  44.          
  45.     end
  46.    
  47.     always begin
  48.         if(!KEY[0]) begin
  49.             LEDR[3] = 1;
  50.             HEX0 <= s0;
  51.             HEX1 <= s1;
  52.             HEX2 <= s2;
  53.             HEX3 <= s3;
  54.         end
  55.         else begin
  56.             LEDR[3] = 0;
  57.             HEX0 <= h0;
  58.             HEX1 <= h1;
  59.             HEX2 <= h2;
  60.             HEX3 <= h3;        
  61.            
  62.         end
  63.        
  64.         HEX4 <= h4;
  65.         HEX5 <= h5;
  66.         HEX6 <= h6;
  67.         HEX7 <= h7;
  68.        
  69.         duty = 139474  ;   
  70.            
  71.         /*HEX6 <= h6;
  72.         HEX7 <= h7;*/
  73.     end
  74.    
  75.     always @(negedge CLOCK_50) begin
  76.        
  77.         if(K1) begin
  78.             setTemp = setTemp+1;
  79.             if(setTemp > 280)
  80.                 setTemp = 200;
  81.         end
  82.        
  83.         if(K2) begin
  84.             mult <= mult+1;
  85.             if(mult >= 5)
  86.                 mult <= 0;
  87.         end
  88.        
  89.         if(time50 >= 12500) begin
  90.             time4k = time4k + 1;
  91.             if(time4k >= 4000) begin
  92.                     LEDR[0] = 1'b1;
  93.                     flag1 = 1;
  94.                     time4k = 0;
  95.             end
  96.             if(flag2) begin
  97.                 flag1 = 0;
  98.             end
  99.             time50 = 0;
  100.         end
  101.        
  102.         time50 = time50+1;
  103.  
  104.     end
  105.      
  106.      always @ (negedge GPIO_0[0]) begin
  107.         count = count + 1;
  108.         if(flag1) begin
  109.            
  110.             LEDR[2] = ~LEDR[2];
  111.             freq[index] = count;
  112.             //freq[index] = count;
  113.            
  114.             temp[index] = 160 + ((((freq[index])) - 800)/11);
  115.             index = index + 1;
  116.             count = 0;
  117.             flag2 = 1;
  118.         end
  119.         else begin
  120.             flag2 = 0;
  121.             if(index > 2)
  122.                 index = 0;
  123.         end
  124.        
  125.      end
  126.      
  127.     always@(negedge CLOCK_50) begin
  128.        
  129.         /*error = setTemp - temp[index];
  130.         integral[1] = ki*error + integral[0];
  131.         pid = kp*error + integral[1];
  132.         integral[0] = integral[1];*/
  133.        
  134.        
  135.         if(time118 >= 423728) begin
  136.             time118 = 0;
  137.         end
  138.        
  139.         if(time118 <= duty) begin
  140.             LEDR[1] = 1'b1;
  141.             GPIO_0[1] = 1'b1;
  142.         end
  143.         else begin
  144.             LEDR[1] = 1'b0;
  145.             GPIO_0[1] = 1'b0;
  146.         end
  147.            
  148.         time118 = time118 + 1;
  149.     end
  150.      
  151. endmodule
  152.  
  153. module oneshot(output reg pulse_out,input clk,input trigger_in);
  154. reg delay;
  155.  
  156. always @ (posedge clk)
  157. begin
  158.        if (trigger_in && !delay) pulse_out <= 1'b1;
  159.        else pulse_out <= 1'b0;
  160.                delay <= trigger_in;
  161. end
  162. endmodule
  163.  
  164.  
  165. module hex_7seg(hex_digit,seg);
  166. input [3:0] hex_digit;
  167. output reg [6:0] seg;
  168. // seg = {g,f,e,d,c,b,a};
  169. // 0 is on and 1 is off
  170.  
  171. always @ (hex_digit)
  172. case (hex_digit)
  173.         4'h0: seg = 7'b1000000;
  174.         4'h1: seg = 7'b1111001;     // ---a----
  175.         4'h2: seg = 7'b0100100;     // |      |
  176.         4'h3: seg = 7'b0110000;     // f      b
  177.         4'h4: seg = 7'b0011001;     // |      |
  178.         4'h5: seg = 7'b0010010;     // ---g----
  179.         4'h6: seg = 7'b0000010;     // |      |
  180.         4'h7: seg = 7'b1111000;     // e      c
  181.         4'h8: seg = 7'b0000000;     // |      |
  182.         4'h9: seg = 7'b0011000;     // ---d----
  183.         4'ha: seg = 7'b0001000;
  184.         4'hb: seg = 7'b0000011;
  185.         4'hc: seg = 7'b1000110;
  186.         4'hd: seg = 7'b0100001;
  187.         4'he: seg = 7'b0000110;
  188.         4'hf: seg = 7'b0001110;
  189. endcase
  190. endmodule
Advertisement
Add Comment
Please, Sign In to add comment