FPGA recopila múltiples canales de temperatura. Compré una placa de desarrollo FPGA con chip EP1C3T144C8. ¿Cómo escribir la programación Verilog?
Primer archivo: ds18b20.v
`escala de tiempo 1ns/1ps
módulo ds18b20 (
clk, chipselect, read_n, // entrada
readdata, //salida
dio ); //entrada
entrada clk, chipelect, read_n;
salida [15 :0] readdata;
inout dio;
reg [31:0] ro=32'hbecc44cc;
reg [15:0] ri ;
reg [15:0] puchero;
reg [5:0] conteo;
reg [12:0] cnt;
reg dout;
cable clk781_25khz;
asignar clk781_25khz=count[5];
siempre @(posedge clk) count<=count+1 'b1 ;
siempre @(posedge clk781_25khz) cnt<=cnt+1'b1;
siempre @(posedge cnt[12]) puchero<=ri;
asignar readdata=(chipselect & ~read_n)? pout: 16'b0;
reg reset,lo, hi,rd
siempre @(posedge cnt[0] ) reset <=cnt[12]|cnt[10]|cnt[9];
siempre @(posedge cnt[0]) lo <=|cnt[5:1] ~cnt[10 ];
siempre @(posedge cnt[0]) hola <=&cnt[5:1] | ~cnt[10];
siempre @(posedge cnt[0]) rd < =cnt[3]|cnt[4]|cnt[5]|~cnt[10]|cnt[11]|~cnt[12];
siempre @(negedge lo or posedge cnt [12 ])
if (cnt[12]==1) ro<=32'hbecc44cc;
else {ro[30:0],dout} <= ro ; p>
siempre @(posedge rd) ri <= {dio,ri[15:1]};
asignar dio=reset&(hi|(lo&dout))?1'bz: 1' b0;
endmodule
Segundo archivo: ds18b20_hw.tcl
# Archivo TCL generado por Component Editor 11.0
# Lun 12 de diciembre 00 :54:43 CST 2011
# NO MODIFICAR
# +------------
-----------------------
# |
# | ds18b20 "ds18b20" v1.0 p>
# | nulo 2011.12.12.00:54:43
# |
# |
# |
# | --------------------------
# +--------------- ------ -----------------------
# | solicitar paquete TCL desde ACDS 11.0
# |
el paquete requiere -exact sopc 11.0
# | ------ -------------
# +---------------------- ------ -------
# | módulo ds18b20
#
set_module_property NOMBRE ds18b20
set_module_property VERSIÓN 1.0
set_module_property INTERNAL false
set_module_property OPAQUE_ADDRESS_MAP true
set_module_property DISPLAY_NAME ds18b20
set_module_property TOP_LEVEL_HDL_FILE ds18b20.v
set_module_property TOP_LE VEL_HDL_MODULE ds18b20
set_module_property INSTANTIATE_IN_SYSTEM_MODULE true
set_module_property EDITABLE true
set_module_property ANALYZE_HDL TRUE
set_module_property STATIC_TOP_LEVEL_MODULE_NAME "ds18b20" p>
set_module_prop erty FIX_110_VIP_PATH false
#
# +----------------------- ----------- ----
# +-------------------- --------- p>
# | archivos
# |p>
add_file ds18b20.v {SIMULACIÓN DE SÍNTESIS}
# |
# + ----------------------------------
# +------ --------------------------
# | parámetros
# | p>
# |
# +--------------------- ------- -
# +-----------
--------------------------
# | mostrar elementos
#
# |
# +----------------------------------
# +-----------------------------------
# | reloj del punto de conexión
# |
add_interface reloj final
set_interface_property reloj clockRate 0
set_interface_property reloj HABILITADO verdadero
add_interface_port reloj clk clk Entrada 1
#
# +---------------------- -- ----------
# +-------------------------------- ---- -----
# | punto de conexión avalon_slave_0
# |p>
add_interface avalon_slave_0 final de avalon
set_interface_property avalon_slave_0 direcciónAlignment NATIVO p>
set_interface_property avalon_slave_0 direcciónUnidades PALABRAS
set_interface_property avalon_slave_0 asociadoReloj reloj
set_interface_property avalon_slave_0 asociadoRestablecer reloj_reset
set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false
set_interface_property avalon_slave_0 explicitAddressSpan 0
set_interface_property avalon_slave_0 holdTime 0
set_interface_property avalon_slave_0 isMemoryDevice false
set_interface_property avalon_slave_0 isNonVolatileStorage false
set_interface_property avalon_esclavo_0 linewrapBursts false
set_interface_property avalon_slave_0 MaximumPendingReadTransactions 0
set_interface_property avalon_slave_0 printableDevice false
set_interface_property avalon_slave_0 readLatency 0
set_interface_property avalon_slave_0 read
WaitTime 1
set_interface_property avalon_slave_0 setupTime 0
set_interface_property avalon_slave_0 timingUnits Cycles
set_interface_property avalon_slave_0 writeWaitTime 0
set_interface_property avalon_slave_0 ENABLED true
add_interface_port avalon_slave_0 chipselect chipselect Entrada 1
add_interface_port avalon_slave_0 read_n read_n Entrada 1
add_interface_port avalon_slave_0 readdata readdata Salida 16
#
# +-----------------------------------
# +--- --------------------------------
# | punto de conexión conduit_end
># |
add_interface conduit_end conduit end
set_interface_property conduit_end ENABLED true
add_interface_port conduit_end dio export Bidir 1
#
# +----------------------------------
Lo anterior dos Cada archivo se completa en quartus 11 y el DS18B20 se documenta como una IP.
A continuación: conecte esta IP al bus Avalon, lea directamente el entero de 16 bits y luego configure la temperatura de acuerdo con el manual de datos. Simplemente tradúzcalo a contenido comprensible.