Advertisement
Guest User

count

a guest
May 3rd, 2015
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module bcdcounter_ms(rst, clk, valor, ss,sf);
  2.     input rst, clk,ss,sf;
  3.     output reg[15:0] valor=0;
  4.     reg [15:0] valor_siguiente=0;
  5.     wire d0_9;//indica si llega de 0 a 9
  6.     wire d1_9;//indica si llega de 0 a 9
  7.     wire d2_9;//indica si llega de 0 a 9
  8.     wire d3_9;//indica si llega de 0 a 9
  9.     wire clk2;
  10.      
  11.     reg clk3;
  12.  
  13.     assign d0_9=(valor[3:0]==4'd9);
  14.     assign d1_9=(valor[7:4]==4'd9);
  15.     assign d2_9=(valor[11:8]==4'd9);
  16.     assign d3_9=(valor[15:12]==4'd9);
  17.      
  18.     clk_dos m2(clk,clk2);
  19.      
  20.      always@(*)begin
  21.     if(sf)
  22.      clk3=clk2;
  23.     else
  24.      clk3=clk;
  25.      end       
  26.  
  27.  
  28.     always@(*)begin
  29.         case({d0_9,ss})
  30.          2'b00: valor_siguiente[3:0] = valor[3:0] + 4'd1;
  31.      2'b01: valor_siguiente[3:0] = valor[3:0] - 4'd1;
  32.      default: valor_siguiente[3:0] = 4'd0;
  33.         endcase
  34.     end
  35.            
  36.  
  37.     always@(*)begin
  38.         case({ss,d1_9,d0_9})
  39.             3'b001:valor_siguiente[7:4] = valor[7:4] + 4'd1;
  40.             3'b011:valor_siguiente[7:4] = 4'd0;
  41.         3'b101:valor_siguiente[7:4] = valor[7:4] - 4'd1;
  42.         3'b111:valor_siguiente[7:4] = 4'd0;
  43.             default:valor_siguiente[7:4] = valor[7:4];
  44.         endcase
  45.     end  
  46.  
  47.     always@(*)begin
  48.         case({ss,d2_9,d1_9,d0_9})
  49.             4'b0011:valor_siguiente[11:8] = valor[11:8] + 4'd1;
  50.             4'b0111:valor_siguiente[11:8] = 4'd0;
  51.         4'b1011:valor_siguiente[11:8] = valor[11:8] - 4'd1;
  52.             4'b1111:valor_siguiente[11:8] = 4'd0;
  53.             default:valor_siguiente[11:8] = valor[11:8];
  54.         endcase
  55.     end  
  56.  
  57.     always@(*)begin
  58.        case({ss,d3_9,d2_9,d1_9,d0_9})
  59.         5'b00111:valor_siguiente[15:12] = valor[15:12] + 4'd1;
  60.         5'b01111:valor_siguiente[15:12] = 4'd0;
  61.         5'b10111:valor_siguiente[15:12] = valor[15:12] - 4'd1;
  62.         5'b11111:valor_siguiente[15:12] = 4'd0;
  63.         default:valor_siguiente[15:12] = valor[15:12];
  64.        endcase   
  65.     end
  66.  
  67.     always@(posedge clk3)begin
  68.         if(rst)
  69.             valor <= 12'd0;
  70.         else valor <= valor_siguiente;
  71.     end  
  72.  
  73. endmodule
  74.  
  75. module clk_dos(clk,clk_out);
  76.  input clk;
  77.  output clk_out;
  78.  reg a=0;
  79.  reg b;
  80.  
  81.  always @(*)
  82.  b=a+1;
  83.  
  84.  
  85.  always @(posedge clk)begin
  86.  a<=b;
  87.  end
  88.  
  89.  
  90.  assign clk_out=a;
  91.  
  92. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement