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

Placas completas (con o sin programador incorporado): Terasic, Altera, "chinas", etc
Responder
Avatar de Usuario
Subcritical
Spartan 3
Mensajes: 225
Registrado: 24 Ago 2018, 14:52

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

Mensaje por Subcritical » 28 Ene 2019, 23:06

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 348 veces
photo_2019-01-28_23-53-00.jpg
photo_2019-01-28_23-53-00.jpg (267.17 KiB) Visto 7755 veces

Avatar de Usuario
Subcritical
Spartan 3
Mensajes: 225
Registrado: 24 Ago 2018, 14:52

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

Mensaje por Subcritical » 29 Ene 2019, 13:51

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 388 veces
photo_2019-01-29_14-06-10.jpg
photo_2019-01-29_14-06-10.jpg (230.46 KiB) Visto 7744 veces

Avatar de Usuario
Subcritical
Spartan 3
Mensajes: 225
Registrado: 24 Ago 2018, 14:52

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

Mensaje por Subcritical » 01 Feb 2019, 18:14

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 407 veces

Avatar de Usuario
Subcritical
Spartan 3
Mensajes: 225
Registrado: 24 Ago 2018, 14:52

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

Mensaje por Subcritical » 04 Feb 2019, 18:41

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 325 veces

Avatar de Usuario
Subcritical
Spartan 3
Mensajes: 225
Registrado: 24 Ago 2018, 14:52

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

Mensaje por Subcritical » 05 Feb 2019, 15:14

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 343 veces

Avatar de Usuario
Subcritical
Spartan 3
Mensajes: 225
Registrado: 24 Ago 2018, 14:52

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

Mensaje por Subcritical » 06 Feb 2019, 16:36

Agregando un contador de 8 bits y un reloj de 1Hz para pasar toda la secuencia de valores hexadecimales en orden.
Adjuntos
Entrenadora_7_contador8bit_1hz.zip
(9.97 KiB) Descargado 350 veces

Responder

Volver a “Placas entrenadoras”