EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于SOPC的单通道TDC设计(1)
! M6 s1 M( T3 a5 {0 ]2 H0 y0 w4 s, t9 O" m
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内部框图 / H+ p% O1 g5 w) d' Z; Q% [
图 14 Nios II硬件系统连接图 硬件系统源程序如下: 1.1 系统顶层源程序module tdc1000_soc( ///input tdc/// input sin,
/ e/ l( l# i7 D! I; R ///////// ADC ///////// inout ADC_CS_N, output ADC_DIN, input ADC_DOUT, output ADC_SCLK, + _( z' f: J& R. Q" B% h+ y
///////// AUD ///////// input AUD_ADCDAT, inout AUD_ADCLRCK, inout AUD_BCLK, output AUD_DACDAT, inout AUD_DACLRCK, output AUD_XCK,
4 ]$ z2 ~! ^! z ///////// CLOCK2 ///////// input CLOCK2_50, ' x: ~0 d1 T$ Q Z
///////// CLOCK3 ///////// input CLOCK3_50, 8 z7 [. l3 u$ q9 ]5 P" m
///////// CLOCK4 ///////// input CLOCK4_50,
& b9 l# j1 l( V% C7 ^, n! u ///////// CLOCK ///////// input CLOCK_50, 6 `: G9 w8 Z' Y* T
///////// 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, : I6 F5 y( N: |; `; N
///////// FAN ///////// output FAN_CTRL, $ d' z" B+ Y3 q, ^# V
output FPGA_I2C_SCLK, inout FPGA_I2C_SDAT,
# P: S# i1 L3 Z ///////// GPIO ///////// inout [35:0] GPIO_0, inout [35:0] GPIO_1,
( ]4 P) W5 h% O, ^/ D$ v. `" h
///////// HEX0 ///////// output [6:0] HEX0,
1 U- o5 ~* _* h/ ^+ J% J ///////// HEX1 ///////// output [6:0] HEX1,
- }2 |$ A; I9 N- [, [2 } L ///////// HEX2 ///////// output [6:0] HEX2, : `4 ~& U% } a3 c
///////// HEX3 ///////// output [6:0] HEX3,
% t, t' Q1 @( @, w- ^) ^' ^, H ///////// HEX4 ///////// output [6:0] HEX4,
% e- B. m3 S6 v+ u/ }9 b ///////// HEX5 ///////// output [6:0] HEX5,
; c @3 |! H# ~; y`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*/ ' o8 q& t: T$ K
///////// IRDA ///////// input IRDA_RXD, output IRDA_TXD, / G* H4 Q X2 }5 p: _
///////// KEY ///////// input [3:0] KEY, + d% ]$ b# @. q7 q
///////// LEDR ///////// output [9:0] LEDR,
6 g* q3 C& B. m s ///////// PS2 ///////// inout PS2_CLK, inout PS2_CLK2, inout PS2_DAT, inout PS2_DAT2,
/ d2 @% c9 R5 b+ W ///////// SW ///////// input [9:0] SW, 6 b! z" d( A2 ^* G+ |
///////// TD ///////// input TD_CLK27, input [7:0] TD_DATA, input TD_HS, output TD_RESET_N, input TD_VS, " ~& J1 }2 Q3 M% G
///////// 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 //======================================================= - V2 P1 S! V) S5 ~+ t" C* j
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; 9 L9 p+ C$ r0 U. i4 Y0 U% e
7 }( z# K% n- ]' {" T7 H5 J: G* j2 P
2 [0 [+ ^4 K% s- J! }0 R+ i4 X//======================================================= // Structural coding //======================================================= wire reset_n;
/ ~. K! m8 a* @1 R' D; @assign 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( . M9 _ I$ [* e
.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
1 M5 @) |2 q$ y8 }3 R( C! t+ d .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
/ j6 d7 q" T8 b4 [8 f );
% n8 E* C3 c. @0 T+ |* j- a
, r) ^! H* ^" W/ ~4 V! T9 {
! @4 |$ n' \1 @$ H. PEndmodule " m3 ?% p/ ]* z f9 J3 ~. D7 L2 g
|