当前位置: 首页 > news >正文

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) beginif(~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) beginif(~sys_rst_n) ENA <= 1'b0 ;elseENA <= 1'b1 ;end// output      reg             WEA         ,always @(posedge sys_clk or negedge sys_rst_n) beginif(~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 beginsys_clk    = 1'b1 ;sys_rst_n <= 1'b0 ;#( CYCLE * 10 )   ;sys_rst_n <= 1'b1 ;#(CYCLE * 3000)   ;$stop             ;endalways #( 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

时序图:

仿真:

http://www.lryc.cn/news/226523.html

相关文章:

  • Leetcode刷题详解——优美的排列
  • [PHP]Kodexplorer可道云 v4.47
  • C/C++数字判断 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
  • 云栖大会丨桑文锋:打造云原生数字化客户经营引擎
  • 如何用java写一个网站:从零搭建个性化网站
  • Easyui DataGrid combobox联动下拉框内容
  • 力扣学习笔记——11. 盛最多水的容器
  • Spring Boot: 约定优于配置的软件设计思想
  • TCP触发海康扫码相机S52CN-IC-JQR-NNN25
  • ArcGIS:如何迭代Shp文件所有要素并分别导出为Shp文件?
  • [工业自动化-11]:西门子S7-15xxx编程 - PLC从站 - 分布式IO从站/从机
  • Linux技能篇-yum源搭建(本地源和公网源)
  • 电脑清灰涂硅脂后电脑CPU温度不降反升
  • 吴恩达《机器学习》8-1->8-2:非线性假设、神经元和大脑
  • services.Jenkins Additional property tags is not allowed
  • vColorPicker——基于 Vue 的颜色选择器插件
  • Direct3D粒子系统
  • 第24章_mysql性能分析工具的使用
  • 【Git】Merge/Rebase/Cherriy-Pick的区别
  • Python复习:序列(列表元组字符串)
  • DevChat助力成为软件开发的“钢铁侠”
  • c: struct sort descending and ascending in windows and Ubuntu
  • Python - 利用 OCR 技术提取视频台词、字幕
  • VUE页面导出PDF方案
  • 机器学习笔记 - WGAN生成对抗网络概述和示例
  • HoudiniVex笔记_P0_Houdini中文文档与翻译
  • 基于PowerWord的储能在主动配电网中的仿真研究
  • 并查集与最小生成树
  • 平面运动机器人的传感器外参标定
  • 【星海随笔】SDN neutron (二) Neutron-plugin(ML2)