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) countlt;=count 1' b1;
siempre @(posedge clk781_25khz) cntlt;=cnt 1'b1;
siempre @(posedge cnt[12]) poutlt;=ri;
asignar readdata=(chipselect amp; ~read_n)? puchero: 16'b0;
reg reset, lo, hola, rd
siempre @(posedge cnt[0]) resetlt; =cnt[12]|cnt[10]|cnt[9];
siempre @(posedge cnt[0]) lo lt;=|cnt[5:1] ~cnt[10 ];
siempre @(posedge cnt[0]) hola lt;=amp;cnt[5:1] ~cnt[10];
siempre @(posedge cnt[ 0] ) rd lt;=cnt[3]|cnt[4]|cnt[5]|~cnt[10]|cnt[11]|~cnt[12];
siempre @(negedge lo o posedge cnt[12])
if (cnt[12]==1) rolt;=32'hbecc44cc;
else {ro[30:0],dout} lt; = ro;
siempre @(posedge rd) ri lt;= {dio,ri[15:1]};
asignar dio=resetamp;(hi|(loamp ;dout ))?1'bz: 1'b0;
endmodule
Segundo archivo: ds18b20_hw.tcl
# Archivo TCL generado por el editor de componentes
11.0
# lunes 12 de diciembre 00:54:43 CST 2011
# NO MODIFICAR
# ------------ - -----------------------
# |
# | ds18b20 "ds18b20" v1.0
# | nulo 2011.12.12.00:54:43
# |
# | v
# |
# | - ----------------------------
# ------------- -- ---------------------
# | solicitar paquete TCL desde ACDS 11.0
#
paquete requiere -exact sopc 11.0
# |p>
# ----------------------- --- ----------
# ----------------------- --- ---
# | módulo ds18b20
# |p>
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_LEVEL_HD L_MODULE ds1 8b20
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"
set_module_property FIX _110_VIP_PATH falso
# |p>
# ------------------------------- ---
# ----------------------------------
# | archivos
# |
add_file ds18b20.v {SIMULACIÓN DE SÍNTESIS}
#
# ---
--------------------------------
# ---------- --------------------------
# | parámetros
#
# |
# ----------------------------------
# ----------------------------------
# | mostrar elementos
# |
# | ---------
# ------------------------------- -- --
# | reloj del punto de conexión
# |p>
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
#
add_interface avalon_slave_0 avalon end p>
set_interface_property avalon_slave_0 direcciónAlineación NATIVO
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_esclavo_0 isNonVolatileStorage false
set_interface_property
avalon_slave_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 Hora 1 p >
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 chipelect 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
# | p>
add_interface conduit_end final del conducto
set_interface_property conduit_end ENABLED true
add_interface_port conduit_end dio export Bidir 1
#
# ----------------------------------
Los dos archivos anteriores se completaron en quartus 11, escrito como una IP para DS18B20.
A continuación: conecte esta IP al bus Avalon, lea directamente el entero de 16 bits y luego traduzca la temperatura a contenido comprensible de acuerdo con el manual de datos.