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