RenHao

Lab6

May 13th, 2013
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module seg_scan(clk, rst, seg_en, seg);
  2. input  clk, rst;
  3. output [3:0] seg_en;
  4. output [7:0] seg;
  5.  
  6. wire scan_clk, count_clk;
  7. wire [3:0] scan_code;
  8. reg [31:0] div;
  9. reg [15:0] count;
  10. reg [3:0] seg_en;
  11.  
  12. always@(posedge clk, negedge rst)
  13. begin
  14.     if(!rst)
  15.       div <= 32'b0;
  16.     else
  17.       div <= div + 1;
  18. end
  19.  
  20. assign scan_clk  = div[16];  // 約5ms   250Hz scan period 20ms / 4(segs)
  21. assign count_clk = div[17];  // 約10ms  100Hz
  22.  
  23. always@(posedge scan_clk, negedge rst) //low level to enable seg
  24. begin
  25.     if(!rst)
  26.         seg_en <= 4'b1110 ;
  27.     else
  28.         seg_en <= !seg_en[0]?4'b1101:
  29.                   !seg_en[1]?4'b1011:
  30.                   !seg_en[2]?4'b0111:
  31.                   4'b1110;
  32. end
  33.  
  34.  
  35. assign scan_code =  (seg_en == 4'b1110) ? (count[3:0]) :
  36.                     (seg_en == 4'b1101) ? (count[7:4]) :
  37.                     (seg_en == 4'b1011) ? (count[11:8]) :
  38.                     (count[15:12]) ;
  39.  
  40. always@(posedge count_clk, negedge rst) //plus 6 to fix the BCD_code
  41. begin
  42.     if(!rst)
  43.         count <= 0 ;
  44.     else if(count[15:12]==9)
  45.         count[15:12] <= count[15:12]+6;
  46.     else if(count[11:8]==9)
  47.         count[12:8] <= count[12:8]+6;
  48.     else if(count[7:4]==9)
  49.         count[8:4] <= count[8:4]+6;
  50.     else if(count[3:0]==9)
  51.         count[4:0] <= count[4:0]+6;
  52.     else
  53.         count <= count+1 ;
  54.    
  55. end
  56.  
  57. assign seg = (scan_code==0)?(8'b00000011):
  58.              (scan_code==1)?(8'b10011111):
  59.              (scan_code==2)?(8'b00100101):
  60.              (scan_code==3)?(8'b00001101):
  61.              (scan_code==4)?(8'b10011001):
  62.              (scan_code==5)?(8'b01001001):
  63.              (scan_code==6)?(8'b01000001):
  64.              (scan_code==7)?(8'b00011011):
  65.              (scan_code==8)?(8'b00000001):
  66.              (8'b00001001);
  67.  
  68. endmodule
Advertisement
Add Comment
Please, Sign In to add comment