ZYNQ_project:IP_ram_pll_test

例化MMCM ip核,产生100Mhz,100Mhz并相位偏移180,50Mhz,25Mhz的时钟信号。

例化单口ram,并编写读写控制器,实现32个数据的写入与读出。

模块框图:

代码:

复制代码
module ip_top(
    input       wire            sys_clk     ,
    input       wire            sys_rst_n   ,

    output      wire    [7:0]   douta       ,
    output      wire            clk_100Mhz  ,
    output      wire            clk_100Mhz_180Phase  ,
    output      wire            clk_50Mhz   ,
    output      wire            clk_25Mhz  
);

    // 例化间连�??
    wire            locked    ;
    // wire            clk_50Mhz ;
//ila_0 ila_0_inst(
//    .clk                ( clk_100Mhz ) ,
    
//    .probe0             ( clk_100Mhz ) ,
//    .probe1             ( clk_100Mhz_180Phase ) ,
//    .probe2             ( clk_50Mhz ) ,
//    .probe3             ( clk_25Mhz ) 
//);
    wire            ENA     ;         
    wire            WEA     ;         
    wire    [4:0]   ADDRA   ;       
    wire    [7:0]   DATA_INA; 
    wire            rst_n   ;
    assign  rst_n   = sys_rst_n && locked ;
clk_wiz_0 clk_wiz_0_inst(
    .clk_in1            ( sys_clk       ) , 
    .resetn             ( sys_rst_n     ) ,
    .locked             ( locked        ) ,  
    .clk_out1           ( clk_100Mhz    ) ,
    .clk_out2           ( clk_100Mhz_180Phase ) ,
    .clk_out3           ( clk_50Mhz     ) ,
    .clk_out4           ( clk_25Mhz     ) 
);

ram_wrA ram_wrA_inst(
    .sys_clk            ( clk_50Mhz     ) ,
    .sys_rst_n          ( rst_n         ) ,

    .ENA                ( ENA           ) ,
    .WEA                ( WEA           ) ,
    .ADDRA              ( ADDRA         ) ,
    .DATA_INA           ( DATA_INA      )  
);

blk_mem_gen_0 blk_mem_gen_0_inst(
    .clka               ( clk_50Mhz     ) , 
    .ena                ( ENA           ) , 
    .wea                ( WEA           ) , 
    .addra              ( ADDRA         ) , 
    .dina               ( DATA_INA      ) , 
    .douta              ( douta         ) 
);

endmodule

module ram_wrA (
    input       wire            sys_clk     ,
    input       wire            sys_rst_n   ,

    output      reg             ENA         ,
    output      reg             WEA         ,
    output      wire    [4:0]   ADDRA       ,
    output      wire    [7:0]   DATA_INA    
);
    parameter DATA_NUM = 32 ;
    reg     [4:0]       cnt_wr ; // 读写计数器。
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if(~sys_rst_n) 
            cnt_wr <= 5'd0 ;
        else if(ENA && (cnt_wr == DATA_NUM - 1))
            cnt_wr <= 5'd0 ;
        else if(ENA)
            cnt_wr <= cnt_wr + 1'b1 ;
        else 
            cnt_wr <= 5'd0 ;
    end

    // output      reg             ENA         ,
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if(~sys_rst_n) 
            ENA <= 1'b0 ;
        else
            ENA <= 1'b1 ;
    end
    // output      reg             WEA         ,
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if(~sys_rst_n) 
            WEA <= 1'b1 ;
        else if(cnt_wr == DATA_NUM - 1)
            WEA <= ~WEA ;
    end
    // output      wire    [4:0]   ADDRA       ,
    // output      wire    [4:0]   DATA_INA    
    assign  ADDRA    = cnt_wr ;
    assign  DATA_INA = {3'b000,cnt_wr} ;
    
endmodule

`timescale 1ns/1ns
module test();
    reg             sys_clk     ;
    reg             sys_rst_n   ;

    wire    [7:0]   douta       ;
    wire            clk_100Mhz  ;
    wire            clk_100Mhz_180Phase  ;
    wire            clk_50Mhz   ;
    wire            clk_25Mhz   ;
ip_top ip_top_inst(
    .sys_clk                ( sys_clk             ) ,
    .sys_rst_n              ( sys_rst_n           ) ,

    .douta                  ( douta               ) ,
    .clk_100Mhz             ( clk_100Mhz          ) ,
    .clk_100Mhz_180Phase    ( clk_100Mhz_180Phase ) ,
    .clk_50Mhz              ( clk_50Mhz           ) ,
    .clk_25Mhz              ( clk_25Mhz           )  
);

    parameter CYCLE = 20 ;

    initial begin
        sys_clk    = 1'b1 ;
        sys_rst_n <= 1'b0 ;
        #( CYCLE * 10 )   ;
        sys_rst_n <= 1'b1 ;
        #(CYCLE * 3000)   ;
        $stop             ;
    end

    always #( CYCLE / 2 ) sys_clk = ~sys_clk ;


endmodule

// `timescale 1ns/1ns
// module test();
//     reg             sys_clk     ;
//     reg             sys_rst_n   ;

//     wire            clk_100Mhz  ;
//     wire            clk_100Mhz_180Phase  ;
//     wire            clk_50Mhz   ;
//     wire            clk_25Mhz   ;

// ip_top ip_top_inst(
//     .sys_clk                ( sys_clk             ) ,
//     .sys_rst_n              ( sys_rst_n           ) ,

//     .clk_100Mhz             ( clk_100Mhz          ) ,
//     .clk_100Mhz_180Phase    ( clk_100Mhz_180Phase ) ,
//     .clk_50Mhz              ( clk_50Mhz           ) ,
//     .clk_25Mhz              ( clk_25Mhz           )  
// );

//     parameter CYCLE = 20 ;

//     initial begin
//         sys_clk    = 1'b1 ;
//         sys_rst_n <= 1'b0 ;
//         #( CYCLE * 10 )   ;
//         sys_rst_n <= 1'b1 ;
//         #(CYCLE * 3000)   ;
//         $stop             ;
//     end

//     always #( CYCLE / 2 ) sys_clk = ~sys_clk ;


// endmodule

时序图:

仿真:

相关推荐
辰丁电子43 分钟前
PCB设计:EMMC设计规范
fpga开发·pcb设计·pcb工艺·layout·pcb layout
coward911 小时前
千兆以太网卡(Ethernet)驱动初始化完成,但是无法udhcpc获取ip
服务器·网络·嵌入式硬件·tcp/ip
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第211题】【10_网络协议篇】第2题:说一下什么是 HTTP 协议?
java·网络协议·http·https·web通信
遗悲风2 小时前
防火墙双 ISP 出口 IP-Link 链路检测、NAT 与 Web 认证综合实验
tcp/ip·安全·接口隔离原则·防火墙
软件技术员3 小时前
SSL.com 证书:免费单域名 90 天证书
网络·网络协议·ssl
茉莉玫瑰花茶3 小时前
IP 分片和组装的具体过程
服务器·网络·tcp/ip
nvd113 小时前
GCP 7层 外部 HTTP 负载均衡器深度解析
网络协议·http·负载均衡
leikooo3 小时前
ARTS 0802: 合并有序链表、AI 时代的技术断层与 TCP 200ms 延迟之谜
人工智能·tcp/ip·链表
Bruce_Liuxiaowei16 小时前
轻量级 IOC 管理方案:Streamlit 驱动的恶意IP情报平台
网络·jvm·网络协议·tcp/ip·安全
Ivan CloudBay1 天前
CDN 能完全隐藏源服务器 IP 吗?
运维·服务器·tcp/ip