FPGA IP核笔记

本文详细介绍了FPGA中三种类型的存储器IP核:单端口RAM、简单双端口RAM和真正双端口RAM,强调了它们的读写模式和接口信号。此外,还提及了ROM的读操作特性以及必须预先加载的.coe文件格式。最后,讨论了PLLIP核的功能,包括其异步复位、锁定检测以及如何通过ODDR2将时钟信号输出。
摘要由CSDN通过智能技术生成

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
    );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值