当前位置:首页 > 编程笔记 > 正文
已解决

ZYNQ_project:IP_ram_pll_test

来自网友在路上 186886提问 提问时间:2023-11-11 23:07:48阅读次数: 86

最佳答案 问答题库868位专家为你答疑解惑

例化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

时序图:

仿真:

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"ZYNQ_project:IP_ram_pll_test":http://eshow365.cn/6-37999-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!