Documentos de Académico
Documentos de Profesional
Documentos de Cultura
De:
Para:
Lectura de documentos:
https://web.stanford.edu/class/archive/ee/ee371/ee371.1066/tools/verilog_tips.pdf
https://www.xilinx.com/support/documentation/sw_manuals/xilinx11/cgn_c_df_verilog_create_
test_bench.htm
http://www.syncad.com/web_manual_bughunter_verilogger/bughunter_verilogger_main_inde
x.html?v2vh_appendix.htm
https://verilogguide.readthedocs.io/en/latest/verilog/testbench.html
Lectura de un documento:
https://pdf1.alldatasheet.com/datasheet-pdf/view/73692/MAXIM/MAX6675.html
Lectura de documentos:
https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-4:-26-bit-counter
https://hetpro-store.com/TUTORIALES/contadores-y-clocks/
Actividad Fecha: 4 Febrero del 2020
Lectura de un documento:
Se lee en una página web un método para convertir un numero binario a BCD en vhdl, esto
con el fin de entender como es el proceso en un lenguaje conocido.
http://www.boletin.upiita.ipn.mx/index.php/ciencia/735-cyt-numero-63/1434-metodo-de-conver
sion-de-binario-a-bcd-con-vhdl
Escritura de Código:
Revisión de un video:
Se ve un video acerca de cómo crear un 7 segmentos en verilog donde se toma parte del
código para crear diferentes módulos.
https://www.youtube.com/watch?v=v2CM8RaEeQU
Prueba de funcionamiento:
divisorReloj:
module divisorReloj(
sck, //Serial Clock Input
Testbench
chipSelector:
module chipSelector(
cs, //Chip Select
clk
);
output reg cs = 1;
input clk;
reg [24:0] contador = 0;
endmodule
Testbench
receptor_datos:
module receptor_datos(
cs, //Chip Select
sck, //Serial Clock Input
so, //Serial Data Output
data
);
input cs;
input sck;
input so;
output reg [11:0] data = 12'b000000000000;
reg [15:0] temp;
reg [5:0] i = 15;
max6675:
module max6675(clk,so,cs,sck,data);
input clk;
input so;
output cs;
output sck;
output [11:0] data;
//divisor reloj
divisorReloj divisor_instance(.sck(sck),.clk(clk));
//chip selector
chipSelector chip_instance(.cs(cs),.clk(clk));
//receptor datos
receptor_datos receptor_instance(.cs(cs),.sck(sck),.so(so),.data(data));
endmodule
Testbench
Se envió bit por bit una señal de 16 bits(0111010101010100)
refreshcounter:
module refreshcounter(
input refresh_clock,
output reg [1:0] refreshcounter =0
);
always@(posedge refresh_clock) refreshcounter <= refreshcounter + 1;
endmodule
binaryToBcd:
module binaryToBcd(
so,
um,
c,
d,
u
);
input [11:0] so ;
reg [27:0]un_c_d_u = 0;
output reg[3:0]um;
output reg [3:0]c;
output reg [3:0]d;
output reg [3:0]u;
integer i;
always@(so)
begin
un_c_d_u[27:0] = so;
for(i = 0;i < 12;i = i + 1)begin
if(un_c_d_u[15:12] > 4)begin //unidades
un_c_d_u[15:12] = un_c_d_u[15:12] + 4'b011;//suma b001(3) en la zona
de unidades
end
if(un_c_d_u[19:16] > 4)begin //decenas
un_c_d_u[19:16] = un_c_d_u[19:16] + 4'b011;
end
if(un_c_d_u[23:20] > 4)begin //centenas
un_c_d_u[23:20] = un_c_d_u[23:20] + 3;
end
if(un_c_d_u[27:24]> 4)begin //unidades de mil
un_c_d_u[27:24] = un_c_d_u[27:24] + 3;
end
un_c_d_u = un_c_d_u << 1;// realiza el desplazamiento
end
u[3:0] = un_c_d_u[15:12];
d[3:0] = un_c_d_u[19:16];
c[3:0] = un_c_d_u[23:20];
um[3:0] = un_c_d_u[27:24];
end
endmodule
Testbench
displaySelector:
module displaySelector(
input [3:0]u,
input [3:0]d,
input [3:0]c,
input [3:0]um,
input [1:0]refreshcounter,
output reg [3:0] OUT_DIGIT = 0
);
always@(refreshcounter)
begin
case(refreshcounter)
2'b0:
OUT_DIGIT[3:0] = u[3:0];// anodo 1
2'b1:
OUT_DIGIT[3:0] = d[3:0];// anodo 2
2'b10:
OUT_DIGIT[3:0] = c[3:0];// anodo 3
2'b11:
OUT_DIGIT[3:0] = um[3:0];// anodo 4
endcase
end
endmodule
Testbench
controlAnodo:
module controlAnodo(
input [1:0] refreshcounter,
output reg [3:0] anode = 0
);
always@(refreshcounter)
begin
case(refreshcounter)
2'b00:
anode = 4'b1110;// anodo 1
2'b01:
anode = 4'b1101;// anodo 2
2'b10:
anode = 4'b1011;// anodo 3
2'b11:
anode = 4'b0111;// anodo 4
endcase
end
endmodule
siete_segmentos:
module siete_segmentos(
input [3:0] i_numero,
output [6:0] o_leds
);
//GFEDCBA
assign o_leds = (i_numero == 4'b0000)? 7'b1000000:
(i_numero == 4'b0001)? 7'b1111001:
(i_numero == 4'b0010)? 7'b0100100:
(i_numero == 4'b0011)? 7'b0110000:
(i_numero == 4'b0100)? 7'b0011001:
(i_numero == 4'b0101)? 7'b0010010:
(i_numero == 4'b0110)? 7'b0000010:
(i_numero == 4'b0111)? 7'b1111000:
(i_numero == 4'b1000)? 7'b0000000:
(i_numero == 4'b1001)? 7'b0011000:
7'b0111111;
endmodule
mostrarTemperatura:
//refreshcounter
wire [1:0] refreshcounter;
refreshcounter refreshcounter_instance
(.refresh_clock(clk),.refreshcounter(refreshcounter));
//displaySelector
wire [3:0] digito;
displaySelector display_instance
(.u(unidades),.d(decenas),.c(centenas),.um(u_mil),.refreshcounter(refreshcounter),.OUT_DIG
IT(digito));
//Control Anodo
controlAnodo controlAnodo_instance(.refreshcounter(refreshcounter),.anode(anodo));
//siete_segmentos
siete_segmentos sieteSegmentos_instance(.i_numero(digito),.o_leds(leds));
endmodule
Testbench
termometro:
module termometro(clk,so,cs,sck,anodo,leds);
input clk;
input so;
output cs;
output sck;
output [3:0] anodo;
output [6:0] leds;
//max6675
wire [11:0] data;
max6675 max6675_instance(.clk(clk),.so(so),.cs(cs),.sck(sck),.data(data));
//Siete Segmentos
mostrarTemperatura mostrarTemperatura_instance
(.so(data),.clk(clk),.anodo(anodo),.leds(leds));
endmodule
Testbench
Se envió bit por bit una señal de 16 bits(0111010101010100), siendo los 12 bits de lectura de
temperatura 111010101010 en decimal 3754.