我是靠谱客的博主 奋斗蚂蚁,最近开发中收集的这篇文章主要介绍FPGA IP核笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

IP核之RAM

Xilinx 推出的 RAM IP 核分为两种类型:单端口 RAM 和双端口 RAM。其中双端口RAM 又分为简单双端口 RAM 和真正双端口 RAM。对于单端口 RAM,读写操作共用一组地址线,读写操作不能同时进行;对于简单双端口 RAM,读操作和写操作有专用地址端口(一个读端口和一个写端口),即写端口只能写不能读,而读端口只能读不能写;对于真正双端口 RAM,有两个地址端口用于读写操作(两个读/写端口),即两个端口都可以进
行读写。
单端口 RAM 接口信号
单端口RAM接口信号
RAM 读写操作模式共分为三种:

  1. Write First(写优先模式):若我们在在同一个时钟沿下对同一个地址进行读写,则读出的数据为写入的数据。 Read
  2. First(读优先模式):若我们在在同一个时钟沿下对同一个地址进行读写,则读出的数据为该地址写入数据前存储的数据。
  3. Change(不变模式):在该模式下不能同时进行读写操作,输出数据为同时读写操作前输出的数据。

RAM module模块

ram_256x8 your_instance_name (
  .clka(clka), 		// input clka
  .wea(wea), 		// input [0 : 0] wea写使能信号,高电平有效。在 RAM中,该信号固定存在。低电平时读
  .addra(addra), 	// input [7 : 0] addra
  .dina(dina),		 // input [7 : 0] dina写入 RAM 的数据,位宽为 8bit。
  .douta(douta)		 // output [7 : 0] douta读出 RAM中的数据,位宽也是 8bit。
);

注:若RAM未初始化则在第一次操作时需先写入。

IP核之ROM

ROM 的读操作是在读时钟的上升沿触发的,在读时钟上升沿我们只要给相应的地址就能在时钟的上升沿读出该地址内的数据了。
建立该文件时必须初始加载 .coe 格式文件
文件格式:

MEMORY_INITIALIZATION_RADIX=10;        //表示ROM内容的数据格式是10进制
MEMORY_INITIALIZATION_VECTOR= 
0,
1,
2,
3,
~~~
253,
254,
255;      //每个数据后面用逗号或者空格或者换行符隔开,最后一个数据后面加分号
rom256x8 your_instance_name 
(
	.clka		(sys_clk)		, // input clka
	.addra		(address)		, // input [7 : 0] addra
	.douta		(ROM_Data) 	// output [7 : 0] douta
);

IP核PLL

在这里插入图片描述
其中 RESET 为异步复位管脚,用来对 PLL IP 进行异步复位,LOCKED 为锁定管脚,用来检测 PLL IP 核是否已经锁定,当输出时钟稳定时该信号会输出高电平表示输出稳定。

module  pll
(
    input   wire    sys_clk     ,   //系统时钟50Mhz

    output  wire    clk_mul_2   ,   //系统时钟经过
    output  wire    locked          //检测锁相环是否已经锁定,
                                    //只有该信号为高时输出的时钟才是稳定的
);

pll_ip  pll_ip_inst
(   // Clock in ports
    .CLK_IN1    (sys_clk        ),
    // Clock out ports
    .CLK_OUT1   (clk1           ),
    // Status and control signals
    .LOCKED     (locked         )
);
wire    clk1;	//局部变量

//调用ODDR2源语使时钟信号通过普通IO口输出
ODDR2 #(
    .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
    .INIT(1'b0), // Sets initial state of the Q output to 1'b0 or 1'b1
    .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
    ) 
    ODDR2_inst1 
    (
    .Q(clk_mul_2), // 1-bit DDR output data
    .C0(clk1), // 1-bit clock input
    .C1(~clk1), // 1-bit clock input
    .CE(1'b1), // 1-bit clock enable input
    .D0(1'b1), // 1-bit data input (associated with C0)
    .D1(1'b0), // 1-bit data input (associated with C1)
    .R(1'b0), // 1-bit reset input
    .S(1'b0) // 1-bit set input
    );

最后

以上就是奋斗蚂蚁为你收集整理的FPGA IP核笔记的全部内容,希望文章能够帮你解决FPGA IP核笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部