Está en la página 1de 14

Bitácora proyecto laboratorio de electrónica digital

De:

Nicolas Narvaez Olaya

Juan David Leon Orjuela

Para:

Jose Alfredo Jaramillo Villegas

Universidad Tecnológica de Pereira


Bitácora

Actividad Fecha: 11 Febrero del 2020

Lectura de documentos:

Investigamos sobre el lenguaje Verilog.

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

Actividad Fecha: 25 Febrero del 2020

Lectura de un documento:

Se empieza a estudiar el datasheet del módulo MAX6675.

https://pdf1.alldatasheet.com/datasheet-pdf/view/73692/MAXIM/MAX6675.html

Actividad Fecha: 26 Febrero del 2020

Se inicia la programación del proyecto en Xilinx ISE 14.7 .

Actividad Fecha: 28 Febrero del 2020

Se lee documentos y artículos en páginas web sobre el protocolo SPI.


https://mindchasers.com/dev/spi-verilog
https://mashhurs.wordpress.com/2015/12/06/spi-communication-protocol-in-verilog/
https://hackaday.io/project/119133-rops/log/144622-starting-with-verilog-and-spi
http://www.boletin.upiita.ipn.mx/index.php/ciencia/745-cyt-numero-64/1453-implementacion-d
el-protocolo-de-comunicacion-spi-en-vhdl-para-el-modulo-pmodtc1

Actividad Fecha: 29 Febrero del 2020

Lectura de documentos:

Investigamos información sobre módulos con reloj y contadores en verilog.

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

Se inicia la programación de los módulos divisorReloj y siete_segmentos(este con asesoría


de los monitores).

Actividad Fecha: 7 Marzo 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

Actividad Fecha: 11 Marzo del 2020

Escritura de Código:

Se empieza a escribir código sobre el método de conversión de binario a BCD, y sus


respectivos módulos
- binaryToBcd

Actividad Fecha: 12 Marzo del 2020

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

Actividad Fecha: 18 de Marzo del 2020

Prueba de funcionamiento:

Se hace el test bench de binaryToBcd y de displaySelector y se corrigen errores.


Se adjuntan screenshots de ambos respectivamente.
Módulos

divisorReloj:

module divisorReloj(
sck, //Serial Clock Input

clk //Internal clock


);
output reg sck =1;
input clk;
reg [24:0] contador = 0;

always @(posedge clk)


begin
contador = contador + 1;
if(contador == 6)
begin
contador = 1;
sck = ~sck;
end
end
endmodule

Testbench
chipSelector:

module chipSelector(
cs, //Chip Select
clk
);
output reg cs = 1;
input clk;
reg [24:0] contador = 0;

always @(posedge clk)


begin
contador = contador + 1;
if(contador == 6 && cs ==1)
begin
contador = 1;
cs = ~cs;
end
if (contador == 171 && cs ==0)
begin
cs = ~cs;
end
if (contador == 10000171 && cs == 1)
begin
cs = ~cs;
contador=1;
end
end

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;

always @(posedge sck)


begin
if (cs == 0)
begin
temp [i]=so;
i = i - 1;
end
if (cs == 1)
begin
i = 15;
data [11:0]= temp [14:3];
end
end
endmodule
Testbench
Se envió bit por bit una señal de 16 bits(0111010101010100)

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:

module mostrarTemperatura(so, clk, anodo, leds);


input [11:0] so;
input wire clk;
output [3:0] anodo;
output [6:0] leds;
//bcd
wire [3:0]unidades;
wire [3:0]decenas;
wire [3:0]centenas;
wire [3:0]u_mil;

binaryToBcd bcd_instance (.so(so),.um(u_mil),.c(centenas),.d(decenas),.u(unidades));

//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.

También podría gustarte