EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于SOPC的单通道TDC设计(1)
0 A# k! m+ x2 E# c- |) ]7 {# K! P" d
1 硬件系统的构建经过“基于超前进位延时链的时间数字转换器”和“延时链测试以及亚稳态分析”两篇文章后,开始着手构建基于SOPC的单通道TDC。 最终构建的硬件系统框图如图 11所示。Top_sch的内部结构图如图 12所示,其中各模块的相关说明请参见前文。Sysfifo的内部框图如图 13所示。Nios II硬件系统连接如图 14所示。 图 11系统的顶层框图 Top_sch为单通道TDC;sysfifo为先入先出存储器,主要作用是起到数据缓冲作用,因为tdc的时钟频率为300MHz,而Nios II的频率为100MHz,端口操作频率为10MHz赫兹;audio—_nios为基于Nios II的硬件系统。 图 12 top_sch的RTL视图 图 13 sysfifo内部框图 4 s+ [: Z/ ]- @
图 14 Nios II硬件系统连接图 硬件系统源程序如下: 1.1 系统顶层源程序module tdc1000_soc( ///input tdc/// input sin,
5 d. k A) n8 m/ {, @ ///////// ADC ///////// inout ADC_CS_N, output ADC_DIN, input ADC_DOUT, output ADC_SCLK,
) e- M1 e9 r: A5 Y: S: @1 k ///////// AUD ///////// input AUD_ADCDAT, inout AUD_ADCLRCK, inout AUD_BCLK, output AUD_DACDAT, inout AUD_DACLRCK, output AUD_XCK, 0 Q6 a' r, y! m" J3 Q
///////// CLOCK2 ///////// input CLOCK2_50,
/ R. T$ T& w% H) q: ~ h/ F ///////// CLOCK3 ///////// input CLOCK3_50,
. `: R* x8 v4 \+ G6 c r/ ~4 ] ///////// CLOCK4 ///////// input CLOCK4_50,
$ l, f2 ]& L H: w J ///////// CLOCK ///////// input CLOCK_50, 5 Q% [! F5 J1 g) L* \
///////// DRAM ///////// output [12:0] DRAM_ADDR, output [1:0] DRAM_BA, output DRAM_CAS_N, output DRAM_CKE, output DRAM_CLK, output DRAM_CS_N, inout [15:0] DRAM_DQ, output DRAM_LDQM, output DRAM_RAS_N, output DRAM_UDQM, output DRAM_WE_N,
1 k, N2 K, @4 d5 I$ P; r# f ///////// FAN ///////// output FAN_CTRL,
! F: F- E b+ j' h output FPGA_I2C_SCLK, inout FPGA_I2C_SDAT, E; v4 N" }# J0 u
///////// GPIO ///////// inout [35:0] GPIO_0, inout [35:0] GPIO_1, 1 ]0 ^/ C: ?# h& P
2 \* R; u. I ]- d
///////// HEX0 ///////// output [6:0] HEX0, ; G# l' W/ N! c3 G
///////// HEX1 ///////// output [6:0] HEX1, 3 i; v0 r7 C% x5 A% F3 x2 c
///////// HEX2 ///////// output [6:0] HEX2,
3 n& _3 e ]8 F! D5 ? ///////// HEX3 ///////// output [6:0] HEX3,
6 v) Z/ ~; `5 @: [- J ///////// HEX4 ///////// output [6:0] HEX4, , K; y( I' J" P' Z9 o# _! a4 z `
///////// HEX5 ///////// output [6:0] HEX5,
; \+ C! l3 j5 T( g/ Y( f`ifdef ENABLE_HPS ///////// HPS ///////// inout HPS_CONV_USB_N, output [14:0] HPS_DDR3_ADDR, output [2:0] HPS_DDR3_BA, output HPS_DDR3_CAS_N, output HPS_DDR3_CKE, output HPS_DDR3_CK_N, output HPS_DDR3_CK_P, output HPS_DDR3_CS_N, output [3:0] HPS_DDR3_DM, inout [31:0] HPS_DDR3_DQ, inout [3:0] HPS_DDR3_DQS_N, inout [3:0] HPS_DDR3_DQS_P, output HPS_DDR3_ODT, output HPS_DDR3_RAS_N, output HPS_DDR3_RESET_N, input HPS_DDR3_RZQ, output HPS_DDR3_WE_N, output HPS_ENET_GTX_CLK, inout HPS_ENET_INT_N, output HPS_ENET_MDC, inout HPS_ENET_MDIO, input HPS_ENET_RX_CLK, input [3:0] HPS_ENET_RX_DATA, input HPS_ENET_RX_DV, output [3:0] HPS_ENET_TX_DATA, output HPS_ENET_TX_EN, inout [3:0] HPS_FLASH_DATA, output HPS_FLASH_DCLK, output HPS_FLASH_NCSO, inout HPS_GSENSOR_INT, inout HPS_I2C1_SCLK, inout HPS_I2C1_SDAT, inout HPS_I2C2_SCLK, inout HPS_I2C2_SDAT, inout HPS_I2C_CONTROL, inout HPS_KEY, inout HPS_LED, inout HPS_LTC_GPIO, output HPS_SD_CLK, inout HPS_SD_CMD, inout [3:0] HPS_SD_DATA, output HPS_SPIM_CLK, input HPS_SPIM_MISO, output HPS_SPIM_MOSI, inout HPS_SPIM_SS, input HPS_UART_RX, output HPS_UART_TX, input HPS_USB_CLKOUT, inout [7:0] HPS_USB_DATA, input HPS_USB_DIR, input HPS_USB_NXT, output HPS_USB_STP, `endif /*ENABLE_HPS*/
& J$ z7 J# p5 v8 V$ C% g ///////// IRDA ///////// input IRDA_RXD, output IRDA_TXD, . p# b# ~; u( x& {
///////// KEY ///////// input [3:0] KEY,
1 l; K: K1 z$ W5 o( X; C2 l# u ///////// LEDR ///////// output [9:0] LEDR,
) u# V8 n7 y# ~+ L ///////// PS2 ///////// inout PS2_CLK, inout PS2_CLK2, inout PS2_DAT, inout PS2_DAT2,
: U: [6 L% H/ ~6 g& C; L4 t ///////// SW ///////// input [9:0] SW, 3 G) r1 x( s$ m8 k$ }
///////// TD ///////// input TD_CLK27, input [7:0] TD_DATA, input TD_HS, output TD_RESET_N, input TD_VS, 0 ~ S, \/ ?. ?3 Z1 A9 N/ F
///////// VGA ///////// output [7:0] VGA_B, output VGA_BLANK_N, output VGA_CLK, output [7:0] VGA_G, output VGA_HS, output [7:0] VGA_R, output VGA_SYNC_N, output VGA_VS ); //======================================================= // tdc/WIRE declarations //======================================================= 4 N( ?6 O7 }2 I* r
wire [31:0] din; wire wr_full; wire rd_empt; wire rd_rqt; wire rd_clk; wire [9:0] ris_c,fal_c; wire wr_rqt; //======================================================= // REG/WIRE declarations //======================================================= wire HEX0P; wire HEX1P; wire HEX2P; wire HEX3P; wire HEX4P; wire HEX5P;
/ o) V1 S$ a' P0 i f- C$ Y
$ }- _1 H6 c/ F. B8 t, @6 I( a! J% M+ V" o9 q1 V
//======================================================= // Structural coding //======================================================= wire reset_n;
* U5 v* X8 t! R X5 P A. @, lassign reset_n = 1'b1; //======================================================= // delay_inst //======================================================= top_sch delay_inst( .clock(DRAM_CLK), .st2(sin), .wr(wr_rqt), .ris_c(ris_c), .fal_c(fal_c) ); sysfifo fifo_inst( .data({{12{1'b0}},ris_c,fal_c}), .rdclk(rd_clk), .rdreq(rd_rqt), .wrclk(DRAM_CLK), .wrreq(wr_rqt), .q(din), .rdempty(rd_empt), audio_nios u0(
' S( s$ I$ S3 h5 C' w .clk_clk (CLOCK_50), // clk.clk .reset_reset_n (reset_n), // reset.reset_n .pll_sdam_clk (DRAM_CLK), // pll_sdam.clk .pll_outclk3_clk (rd_clk), .key_external_connection_export (KEY), // key_external_connection.export .seg7_conduit_end_export ({ HEX5P, HEX5, HEX4P, HEX4, HEX3P, HEX3, HEX2P, HEX2, HEX1P, HEX1, HEX0P, HEX0}), // seg7_conduit_end.export .pio_0_external_connection_export (LEDR), // pio_0_external_connection.export .sw_external_connection_export (SW), // sw_external_connection.export .din32_external_connection_export (din), // din32_external_connection.export .wr_full_external_connection_export (wr_full), // wr_full_external_connection.export .rd_rqt_external_connection_export (rd_rqt), // rd_rqt_external_connection.export .rd_empt_external_connection_export (rd_empt), // rd_empt_external_connection.export 0 Q$ l* [/ { P1 F6 g& g) a
.sdram_wire_addr (DRAM_ADDR), // sdram_wire.addr .sdram_wire_ba (DRAM_BA), // .ba .sdram_wire_cas_n (DRAM_CAS_N), // .cas_n .sdram_wire_cke (DRAM_CKE), // .cke .sdram_wire_cs_n (DRAM_CS_N), // .cs_n .sdram_wire_dq (DRAM_DQ), // .dq .sdram_wire_dqm ({DRAM_UDQM,DRAM_LDQM}), // .dqm .sdram_wire_ras_n (DRAM_RAS_N), // .ras_n .sdram_wire_we_n (DRAM_WE_N) // .we_n & p4 F0 ?# F) G+ x! l! ~7 w4 b' h
);
$ A. G1 K. C, k2 K+ F: \+ c) p8 E" Y# }$ s; E
* J% g/ X+ \: _8 U4 A
Endmodule
) u! C3 T2 E6 ?' }) M4 ~ |