Verilog hexadecimal a pantalla de 7 segmentos con punto decimal

0

Estoy tratando de escribir un código sintetizable para una pantalla LED de siete segmentos que consta de 7 barras de LED y un único punto decimal redondo. El LED de segmento está configurado como activo bajo (cuando 0: se ilumina y cuando 1: está apagado)

Tengo una entrada de 4 como dígito hexadecimal y genera patrones de LED, para completar, asumimos que también hay una entrada dp de 1 bit, conectada al LED de punto decimal. Las señales de control de led, dp, a, b, c, d, e, f, g se agrupan como una única señal de 8 bits donde dp mush siempre estará apagado.

Estoy intentando escribir un código, pero no puedo decidir cómo combinar dp con mi salida. Por favor, encuentre mi código rtl a continuación y sugiera el mismo

RTL code:

module led_decode(

 input [3:0] x,
 input dp,

 output [7:0] Z,


 );

 reg [6:0] z_out;
 reg DP;


 always@(*)
  begin

   case (x)    
    4'd0    : z_out = 8'b00000010;
    4'd1    : z_out = 8'b10011110;
    4'd2    : z_out = 8'b00100100;
    4'd3    : z_out = 8'b00001100;
    4'd4    : z_out = 8'b11010100;
    4'd5    : z_out = 8'b01001000;
    4'd6    : z_out = 8'b01000000;
    4'd7    : z_out = 8'b00011110;
    4'd8    : z_out = 8'b00000000;
    4'd9    : z_out = 8'b00011000;
    4'd10   : z_out = 8'b00010000;
    4'd11   : z_out = 8'b11000000;
    4'd12   : z_out = 8'b01100010;
    4'd13   : z_out = 8'b10000100;
    4'd14   : z_out = 8'b01100000;
    4'd15   : z_out = 8'b01110000;
    default : z_out = 8'b00000000;
   endcase

   assign Z = {z_out,dp};

   end  

endmodule

Obtuve la salida para mi programa rtl. La única duda que tengo es que bcz dice que dp debe estar siempre desactivado, ¿se supone que debo asignar un valor de 0 a dp en rtl o tb? solo por curiosidad.

mi código RTL:

module led_decode(

 input [3:0] x,
 input dp, 
 output  [7:0] Z  
 );

 reg [6:0] z_out;



 always@(*)
  begin       

   case(x)    
    4'd0    : z_out  = 7'b0000001;    
    4'd1    : z_out  = 7'b1001111;
    4'd2    : z_out  = 7'b0010010;
    4'd3    : z_out  = 7'b0000110;
    4'd4    : z_out  = 7'b1101010;
    4'd5    : z_out  = 7'b0100100;
    4'd6    : z_out  = 7'b0100000;
    4'd7    : z_out  = 7'b0001111;
    4'd8    : z_out  = 7'b0000000;
    4'd9    : z_out  = 7'b0001100;
    4'd10   : z_out  = 7'b0001000;
    4'd11   : z_out  = 7'b1100000;
    4'd12   : z_out  = 7'b0110001;
    4'd13   : z_out  = 7'b1000010;
    4'd14   : z_out  = 7'b0110000;
    4'd15   : z_out  = 7'b0111000;

    default : z_out  = z_out;

   endcase

    end    

    assign Z = {z_out,dp};

endmodule

my test bench:
module tb_led_decode;

  reg [3:0] x;
  reg dp;

   wire [7:0] Z;

   integer i;


   led_decode DUT(
     .x(x),
     .dp(dp),
     .Z(Z)
     );

   initial
    begin

     x = 4'd0;
     dp = 1'b0;  
   #10 x = 4'd1;
   #10 x = 4'd2;
   #10 x = 4'd3;
   #10 x = 4'd4;
   #10 x = 4'd5;
   #10 x = 4'd6;
   #10 x = 4'd7;
   #10 x = 4'd8;
   #10 x = 4'd9;
   #10 x = 4'd10;
   #10 x = 4'd11;
   #10 x = 4'd12;
   #10 x = 4'd13;
   #10 x = 4'd14;
   #10 x = 4'd15;  
   #20;   
    #20 $finish;  
    end

      initial
      begin
      $monitor ("values of x =%h,  dp = %b, Z = %b",x,dp,Z);
      end

     initial begin
      $shm_open("waves.shm");
      $shm_probe(tb_led_decode,"AC");
     end
endmodule
    
pregunta Digital_Treasure

0 respuestas

Lea otras preguntas en las etiquetas