Advertisement
Guest User

fff

a guest
May 3rd, 2015
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module bcdcounter_ms(rst, clk, valor,sf);
  2.     input rst, clk,sf; // reset, clock, contador ascendente o descendente, frecuencia.
  3.     output reg[15:0] valor; // 3 digitos BCD
  4.     reg [15:0] valor_siguiente;
  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.  always@(*)
  28.         if(d0_9)
  29.             valor_siguiente[3:0] = 4'd0;
  30.         else
  31.             valor_siguiente[3:0] = valor[3:0] + 4'd1;
  32.  
  33.     always@(*)
  34.         case({d1_9,d0_9})
  35.             2'b01:valor_siguiente[7:4] = valor[7:4] + 4'd1;
  36.             2'b11:valor_siguiente[7:4] = 4'd0;
  37.             default:valor_siguiente[7:4] = valor[7:4];
  38.         endcase
  39.  
  40.     always@(*)
  41.         case({d2_9,d1_9,d0_9})
  42.             3'b011:valor_siguiente[11:8] = valor[11:8] + 4'd1;
  43.             3'b111:valor_siguiente[11:8] = 4'd0;
  44.             default:valor_siguiente[11:8] = valor[11:8];
  45.         endcase
  46.  
  47.     always@(*)
  48.     case({d3_9,d2_9,d1_9,d0_9})
  49.         4'b0111:valor_siguiente[15:12] = valor[15:12] + 4'd1;
  50.         4'b1111:valor_siguiente[15:12] = 4'd0;
  51.         default:valor_siguiente[15:12] = valor[15:12];
  52.  
  53.     always@(posedge clk3 or posedge rst)begin
  54.         if(rst)
  55.             valor <= 12'd0;
  56.                
  57.         else valor <= valor_siguiente;
  58.     end  
  59.  
  60. endmodule
  61.  
  62. module clk_dos(clk,clk_out);
  63.  input clk;
  64.  output clk_out;
  65.  reg a=0;
  66.  reg b;
  67.  
  68.  always @(*)
  69.  b=a+1;
  70.  
  71.  
  72.  always @(posedge clk)begin
  73.  a<=b;
  74.  end
  75.  
  76.  
  77.  assign clk_out=a;
  78.  
  79. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement