• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

PLL+RAM的IP核配置测试试验设计Verilog代码VIVADO ARTIX-7开发板

09/29 10:47
518
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24110Q9242J10.docx

共1个文件

名称:PLL+RAM的IP核配置测试试验设计Verilog代码VIVADO  ARTIX-7开发板

软件:VIVADO

语言:Verilog

代码功能:

PLL+RAM的IP核配置测试试验

例化PLL和RAM的IP核,并用在线调试工具查看RAM的写入读出

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在ARTIX-7开发板验证,ARTIX-7开发板如下,其他开发板可以修改管脚适配:

ARTIX-7开发板.png

设计文档:

一、实验简介:

本实验主要是调用xilinx的PLL和RAM,并通过工程的建立,下载,运用xilinx的在线调试工具观察调试信号。

其中PLL的例化过程如下:

首先在菜单中找到IP catalog然后在下图打开的页面中搜索clocking,即时钟IPcore。

双击clocking wizard出现如下对话框,在clocking options界面,由于我们开发板输入的时钟是100Mhz,因此我们在clk_in1输入100Mhz,其他设置如下。

在output clocks界面我们产生一个50Mhz的分频时钟,其他页面采取默认。

整体产生结果如下图示,这样我们就借助于PLL资源产生了一个稳定的50Mhz的时钟。

RAM产生的IP核过程类似,在IP catalog界面我们输入block memory,双击这个IP核。

然后我们选择产生一个single dual port ram。

在接下来的页面我们选择RAM写数据宽度和地址深度,其数据宽度为16bit,深度为1024,即这个ram的地址范围是0-1023。

接下来我们继续设置ram的读地址空间和数据宽度,如下图所示。

这样我们就生成一个例化的ram。

将生成的PLL和RAM例化到实验2代码,同样设置好xdc文件,编译生成该工程的bit文件。

二、实验过程

将目录“... at7_prj_02at7_prjat7_prj.runsimpl_1”文件夹下的 at7_prj.bit 文件下载到开发板上,自动弹出调试界面,我们点击运行,即可观察实际的ram写入和读出过程。

部分代码展示:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2019/04/13 17:54:08
// Design Name: 
// Module Name: at7_prj
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
module at7_prj(
  input sys_clk_i,//外部输入100MHz时钟信号
  input ext_rst_n
      );
wire clk_50m;    //PLL输出50MHz时钟
wire sys_rst_n;    //PLL输出的locked信号,作为FPGA内部的复位信号,低电平复位,高电平正常工作
reg  [31:0] clk_cnt;
(*mark_debug="TRUE"*)reg         ram_wen;
(*mark_debug="TRUE"*)reg  [15:0] ram_waddr;
(*mark_debug="TRUE"*)reg  [ 9:0] ram_wdata;
(*mark_debug="TRUE"*)reg         ram_ren;
(*mark_debug="TRUE"*)reg  [15:0] ram_raddr;
(*mark_debug="TRUE"*)wire [ 9:0] ram_rdata;
//PLL例化
clk_wiz_0     u1_clk_wiz_0
 (
 // Clock in ports
  .clk_in1(sys_clk_i),      // input clk_in1
  // Clock out ports
  .clk_out1(clk_50m),        // output clk_out1
  // Status and control signals
  .reset(!ext_rst_n),       // input reset
  .locked(sys_rst_n));      // output locked
  
always @(posedge clk_50m or negedge sys_rst_n)
begin
    if(!sys_rst_n) 
    begin
           clk_cnt <= 32'h0;
    end       
    else 
    begin
      if(clk_cnt > 32'd100000000)
      begin
          clk_cnt <= 32'b0;
      end
      else
      begin
          clk_cnt  32'd1000)
      begin
          ram_wen <= 1'b1;
      end
      else
      begin
          ram_wen <= 1'b0;
      end
  end    
end 
always @(posedge clk_50m or negedge sys_rst_n)
begin
    if(!sys_rst_n) 
    begin
           ram_waddr <= 10'b0;
    end       
    else 
    begin
      if(ram_wen ==  1'b1)
      begin
          ram_waddr <= ram_waddr + 10'b1;
      end
      else
      begin
          ram_waddr <= 10'b0;
      end
  end
end 
always @(posedge clk_50m or negedge sys_rst_n)
begin
    if(!sys_rst_n) 
    begin
          ram_wdata  32'd1002)
      begin
          ram_ren <= 1'b1;
      end
      else
      begin
          ram_ren <= 1'b0;
      end  
  end    
end  
always @(posedge clk_50m or negedge sys_rst_n)
begin
    if(!sys_rst_n) 
    begin
           ram_raddr <= 10'b0;
    end

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1328

  • 2-24110Q9242J10.docx
    下载

相关推荐