找回密码
 注册
关于网站域名变更的通知
查看: 397|回复: 1
打印 上一主题 下一主题

基于SOPC的单通道TDC设计(1)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-12 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于SOPC的单通道TDC设计(1)

8 z, D: a3 k# p3 T+ V0 B; Q6 h- \
) s" v0 S9 }- x& F- l1 硬件系统的构建
经过“基于超前进位延时链的时间数字转换器”和“延时链测试以及亚稳态分析”两篇文章后,开始着手构建基于SOPC的单通道TDC
最终构建的硬件系统框图如图 11所示。Top_sch的内部结构图如图 12所示,其中各模块的相关说明请参见前文。Sysfifo的内部框图如图 13所示。Nios II硬件系统连接如图 14所示。
图 11系统的顶层框图
Top_sch为单通道TDCsysfifo为先入先出存储器,主要作用是起到数据缓冲作用,因为tdc的时钟频率为300MHz,而Nios II的频率为100MHz,端口操作频率为10MHz赫兹audio—_nios为基于Nios II的硬件系统。
图 12 top_sch的RTL视图
图 13 sysfifo内部框图
( |  w) v% {* ~
图 14 Nios II硬件系统连接图
硬件系统源程序如下:
1.1 系统顶层源程序
module tdc1000_soc(
      ///input tdc///
                input sin,
4 V1 Q: U1 t4 {' {# y
      ///////// ADC /////////
      inout              ADC_CS_N,
      output             ADC_DIN,
      input              ADC_DOUT,
      output             ADC_SCLK,
- q) G7 a4 I9 p" }
      ///////// AUD /////////
      input              AUD_ADCDAT,
      inout              AUD_ADCLRCK,
      inout              AUD_BCLK,
      output             AUD_DACDAT,
      inout              AUD_DACLRCK,
      output             AUD_XCK,

$ Q8 n5 X8 ?/ X! {0 i3 Q; f- r: f
      ///////// CLOCK2 /////////
      input              CLOCK2_50,

2 ~7 v5 m% s5 i. Z
      ///////// CLOCK3 /////////
      input              CLOCK3_50,

' i3 J2 g% F; |, F, H0 l
      ///////// CLOCK4 /////////
      input              CLOCK4_50,
. D8 R7 E9 ~# K" m  O, _
      ///////// CLOCK /////////
      input              CLOCK_50,
9 H) M/ u+ a1 a( x0 }
      ///////// 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,

- B) m' }3 F/ H
      ///////// FAN /////////
      output             FAN_CTRL,
+ W! s0 E& @3 v7 H1 X
      ///////// FPGA /////////
      output             FPGA_I2C_SCLK,
      inout              FPGA_I2C_SDAT,

  ]+ L. N. U9 a6 g  y: E2 b4 q
      ///////// GPIO /////////
      inout     [35:0]         GPIO_0,
      inout     [35:0]         GPIO_1,

! A; ^8 \1 N6 j, {/ u, ^! }" v
; M; d, `5 Y6 R  u  ]4 @$ m& r
      ///////// HEX0 /////////
      output      [6:0]  HEX0,
/ d) k! u5 m1 T$ f" L; G1 ]
      ///////// HEX1 /////////
      output      [6:0]  HEX1,

# d1 F) A1 P' Z: l7 Q" o# U
      ///////// HEX2 /////////
      output      [6:0]  HEX2,
' {8 L2 L% |9 t/ b0 m- e. ~
      ///////// HEX3 /////////
      output      [6:0]  HEX3,

. w7 R2 K  t3 a+ p( w# l
      ///////// HEX4 /////////
      output      [6:0]  HEX4,
. U, V! F  `' Y4 m5 d5 l( @- b
      ///////// HEX5 /////////
      output      [6:0]  HEX5,

& C& {9 v+ Q% ~. |8 e
`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*/

& W% Y2 [+ D6 [
      ///////// IRDA /////////
      input              IRDA_RXD,
      output             IRDA_TXD,

) `9 E- c4 v8 C0 r* i; H
      ///////// KEY /////////
      input       [3:0]  KEY,
: I- z% i# Z6 M* q
      ///////// LEDR /////////
      output      [9:0]  LEDR,
0 W7 O; k4 d9 R: T1 r/ Q
      ///////// PS2 /////////
      inout              PS2_CLK,
      inout              PS2_CLK2,
      inout              PS2_DAT,
      inout              PS2_DAT2,

/ N6 L! a" J+ z* z' c) |
      ///////// SW /////////
      input       [9:0]  SW,
4 @. L) ?: {3 u5 N* L9 z- T9 }3 e
      ///////// TD /////////
      input              TD_CLK27,
      input      [7:0]  TD_DATA,
      input             TD_HS,
      output             TD_RESET_N,
      input             TD_VS,
% p6 p" n+ p& D% v3 d
      ///////// 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
//=======================================================
; l$ r. n! v" ?( `9 ]" ~: _
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;

+ O2 p7 `2 n$ r1 _; H7 g' ^
( C$ ]2 _0 U1 \1 P0 {  p& G& I/ z( G3 y4 ?, o  y
//=======================================================
//  Structural coding
//=======================================================
wire reset_n;
+ Y4 f! z& L* V' X+ V: q
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),
        .wRFull(wr_full));
audio_nios u0(

$ e7 |: J# L( _0 l" Z' Z
                .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
# e7 g; H( B9 o, T) c) r9 Q
                .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
  b5 \8 V# I: I
        );

. C" H/ B, g  a* P8 V
* L2 i* O: r3 I8 z- x" b+ U* |- R! ]0 f9 i
Endmodule

  S9 H$ t7 m# D: o" f2 R0 A. f

该用户从未签到

2#
 楼主| 发表于 2019-4-12 10:44 | 只看该作者
1.2 TDC顶层源程序
module top_sch #(parameter WIDTH=1000)(
        clock,
        st2,
        wr,
        rd_o,
        ris_c,
        fal_c
);
output wire wr;
input wire        clock;
input wire        st2;
output [9:0] ris_c;
output [9:0] fal_c;
output rd_o;

8 N$ W& z" n3 j( s! W4 z3 V+ W9 R4 x& N/ |$ {! {$ R( Z3 H

/ F! ]) Y; S2 W
wire        [WIDTH-1:0] SYNTHESIZED_WIRE_0;
wire        [WIDTH-1:0] SYNTHESIZED_WIRE_1;
wire        [WIDTH-1:0] SYNTHESIZED_WIRE_2;
wire        [WIDTH-1:0] SYNTHESIZED_WIRE_3;
wire        [WIDTH-1:0] SYNTHESIZED_WIRE_4;
wire rd_o_f,rd_o_r;

, y' m  t2 m* T9 v* q- G* {7 B) I6 z( c6 z

5 b0 s# T' k( _6 |$ K1 S
add200        b2v_inst(
        .clock(clock),
        .data_a(SYNTHESIZED_WIRE_0),
        .dataa(SYNTHESIZED_WIRE_1),
        .result(SYNTHESIZED_WIRE_2));
1 B0 g; V( b% O9 u5 P1 M

3 B, j3 ^+ M( m9 T* b( h8 P
o_add        b2v_inst2(
        .result(SYNTHESIZED_WIRE_2),
        .ris_o(SYNTHESIZED_WIRE_3),
        .fal_o(SYNTHESIZED_WIRE_4));
6 K, y- C" h5 i. z4 _' ^
$ ^- v- E9 E' H. p3 V; h: E
l_add        b2v_inst3(   
        .result(SYNTHESIZED_WIRE_1));

3 |; C- k, U! x  r2 b$ \  a; |3 t  F
r_add        b2v_inst4(
        .st1(st2),
        .result(SYNTHESIZED_WIRE_0));
encoder b2v_inst5(
    .clk(clock),
         .rd_o(rd_o_r),
         .srin(SYNTHESIZED_WIRE_3),
         .tenout(ris_c)        
        );
encoder b2v_inst6(
    .clk(clock),
         .rd_o(rd_o_f),
         .srin(SYNTHESIZED_WIRE_4),
         .tenout(fal_c)        
        );
Endmodule
1.3 FIFO顶层源程序
// synopsys translate_off
`timescale 1 ps / 1 ps
// synopsys translate_on
module sysfifo (
        data,
        rdclk,
        rdreq,
        wrclk,
        wrreq,
        q,
        rdempty,
        wrfull);

& R. b# v# |3 D) q& p$ F" i
        input        [19:0]  data;
        input          rdclk;
        input          rdreq;
        input          wrclk;
        input          wrreq;
        output        [19:0]  q;
        output          rdempty;
        output          wrfull;
. Z/ L+ {" N# I; q! A, P# t( }: I
        wire [19:0] sub_wire0;
        wire  sub_wire1;
        wire  sub_wire2;
        wire [19:0] q = sub_wire0[19:0];
        wire  rdempty = sub_wire1;
        wire  wrfull = sub_wire2;

7 y, b- ~1 D. U' ~" B
        dcfifo        dcfifo_component (
                                .data (data),
                                .rdclk (rdclk),
                                .rdreq (rdreq),
                                .wrclk (wrclk),
                                .wrreq (wrreq),
                                .q (sub_wire0),
                                .rdempty (sub_wire1),
                                .wrfull (sub_wire2),
                                .aclr (),
                                .rdfull (),
                                .rdusedw (),
                                .wrempty (),
                                .wrusedw ());
        defparam
                dcfifo_component.intended_device_family = "Cyclone V",
                dcfifo_component.lpm_numwords = 16,
                dcfifo_component.lpm_showahead = "OFF",
                dcfifo_component.lpm_type = "dcfifo",
                dcfifo_component.lpm_width = 20,
                dcfifo_component.lpm_widthu = 4,
                dcfifo_component.overflow_checking = "ON",
                dcfifo_component.rdsync_delaypipe = 4,
                dcfifo_component.underflow_checking = "ON",
                dcfifo_component.use_eab = "ON",
                dcfifo_component.wrsync_delaypipe = 4;

. a$ Q8 X/ _& Y* J+ ~4 M- n9 F; R2 ]* J# Y) \) m6 a
endmodule

- C+ _' w2 x& W9 o. ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-31 10:46 , Processed in 0.122070 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表