Página 1 de 1

Con ocho interruptores mostrar el número en 3 displays y su código BCD - TERASIC DE2

Publicado: 28 Ene 2019, 23:06
por Subcritical
Con el código proporcionado por mcleod_ideafix
n --> son los 8 bits que usamos de entrada binaria desde interruptores
bcd --> son 12 bits de salida bcd, que tenemos que segmentar en 3 partes para mostrarlos en tres displays de 7 segmentos.

Código: Seleccionar todo


module binary2bcd (
   input wire clk,
   input wire [7:0] n,
   input wire start,
   output wire [11:0] bcd,
   output reg finish
   );

   reg [3:0] loop = 4'h0;
   reg [19:0] scratch = 20'h00000;
   reg [19:0] scratch_modificado;
   reg [11:0] output_reg = 12'h000;
   assign bcd = output_reg;

   initial finish = 1'b1;
   always @(posedge clk) begin
      if (start && finish) begin
         loop <= 4'h0;
         scratch <= {12'h000, n};
         finish <= 1'b0;
      end
      else if (loop == 4'd8) begin
         output_reg <= scratch[19:8];
         loop <= loop + 1;
         finish <= 1'b1;
      end
      else if (loop == 4'd9) begin
         finish <= 1'b0;
      end
      else begin
         loop <= loop + 1;
         scratch <= {scratch_modificado[18:0],1'b0};
      end
   end

   always @* begin
      scratch_modificado[7:0] = scratch[7:0];
      if (scratch[11:8]>4)
         scratch_modificado[11:8] = scratch[11:8] + 4'd3;
      else
         scratch_modificado[11:8] = scratch[11:8];
      if (scratch[15:12]>4)
         scratch_modificado[15:12] = scratch[15:12] + 4'd3;
      else
         scratch_modificado[15:12] = scratch[15:12];
      if (scratch[19:16]>4)
         scratch_modificado[19:16] = scratch[19:16] + 4'd3;
      else
         scratch_modificado[19:16] = scratch[19:16];
   end
endmodule


El código modificado para una altera de2_70 de una forma rápida y sin ser estructurada(mi culpa) es la siguiente.
Entrenadora 5.zip
(4.54 KiB) Descargado 1521 veces
photo_2019-01-28_23-53-00.jpg
photo_2019-01-28_23-53-00.jpg (267.17 KiB) Visto 26716 veces

Re: Con ocho interruptores mostrar el número en 3 displays y su código BCD - TERASIC DE2

Publicado: 29 Ene 2019, 13:51
por Subcritical
Pequeña modificación donde en otros dos displays 6 y 7 se ve el número en hexadecimal.
Entrenadora 6.zip
(4.52 KiB) Descargado 1695 veces
photo_2019-01-29_14-06-10.jpg
photo_2019-01-29_14-06-10.jpg (230.46 KiB) Visto 26705 veces

Re: Con ocho interruptores mostrar el número en 3 displays y su código BCD - TERASIC DE2

Publicado: 01 Feb 2019, 18:14
por Subcritical
Aquí esta una solución al ejercicio usando módulos.
-modulo principal
-modulo display
-modulo bcd

El qsf es válido el mismo que hay anteriormente
Entrenadora 6procedural3.7z
(3.21 KiB) Descargado 1805 veces

Re: Con ocho interruptores mostrar el número en 3 displays y su código BCD - TERASIC DE2

Publicado: 04 Feb 2019, 18:41
por Subcritical
La el mismo proyecto pero con la posibilidad de usar 2 diferentes algoritmos Double dabble.
https://en.wikipedia.org/wiki/Double_dabble
En el fichero MultiplesBCD_top.v al llamar a módulos externos sólo es comentar la definición de un modulo y descomentar la definición del módulo.

Módulos intercambiables:
Binary_to_BCD --> https://www.nandland.com/vhdl/modules/d ... abble.html
binary2bcd --> mcleod_ideafix
Entrenadora 6procedural3 - 2modulos.zip
(8.84 KiB) Descargado 1528 veces

Re: Con ocho interruptores mostrar el número en 3 displays y su código BCD - TERASIC DE2

Publicado: 05 Feb 2019, 15:14
por Subcritical
Usando directivas del compilador `define , para seleccionar entre módulos de un fuente en verilog.
Con sólo descomentar y comentar con // al inicio del modulo principal tenemos el código de los módulos seleccionados.

Código: Seleccionar todo

//`define mcleod_ideafix 1
//`define nandland 1
Entrenadora 6procedural4.zip
(8.65 KiB) Descargado 1735 veces

Re: Con ocho interruptores mostrar el número en 3 displays y su código BCD - TERASIC DE2

Publicado: 06 Feb 2019, 16:36
por Subcritical
Agregando un contador de 8 bits y un reloj de 1Hz para pasar toda la secuencia de valores hexadecimales en orden.