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

基于FPGA的EMIF总线时序设计Verilog代码ISE仿真

08/01 14:21
862
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2406041G532S4.doc

共1个文件

名称:基于FPGA的EMIF总线时序设计Verilog代码ISE仿真

软件:ISE

语言:Verilog

代码功能:

读数据时,在 Lead period阶段,对应存储映射区片选信号nCSO1=0(低电平),地址信号A[14.0]有效,在Active period,读信号nRD=0读取数据总线D[15.0]上数据,在Trail period阶段,读信号nRD=1,地址信号A[14.0]保持有效,片选信号nCS01保持为低电平。其中SYSCLKOUT=120MHz。

QQ图片20240527204456.png

写数据时,在 Lead period阶段,对应存储映射区片选信号nCSO1=0(低电平),地址信号A[14.0]有效;在 Active period,写信号nWE=0,数据总线D[15.0]上待写数据有效;在 Trail Period阶段,写信号nWE=1,片选信号nCSO1保持为低电平,地址信号A[14.0]保持有效,D[15.0数据写入寄存器。其中SYSCLKOUT=120MHz。

QQ图片20240527204820.png

公共输入信号:

CLK10M:频率为10M的时钟信号

nRST:异步复位信号,低电平有效。

nCS01:片选信号,低电平有效。

nWE:写信号,高电平有效。

nRD:读信号,低电平有效。

A[14.0]:地址信号

输出信号:

D[15.0]:数据总线输出

EMIF总线时序设计.jpg

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

读过程,读的值存储在read_data

写过程

部分代码展示:

module?EMIF(
input?clk_120M,//120MHz
input?nRST,//异步复位,低电平有效
input?nCS01,//片选信号,低电平有效
input?nWE,//写信号,低电平有效
input?nRD,//读信号,低电平有效
input?[14:0]?A,//地址
inout?[15:0]?D//数据
);
wire?XTIMCLK;
reg?XCLKOUT=1;
assign?XTIMCLK=clk_120M;//输出120MHz
always@(posedge?clk_120M?or?negedge?nRST)
if(~nRST)
XCLKOUT<=1;
else
XCLKOUT<=~XCLKOUT;//2分频
//读过程
//假设要读地址为15'b000000000000001,地址可以自行修改
reg?[15:0]?read_data=16'd0;
reg?[3:0]?RD_cnt=4'd0;
always@(posedge?clk_120M?or?negedge?nRST)
if(~nRST)
RD_cnt<=4'd0;
else
if(nCS01==0?&&?nRD==0)//CS低电平有效,读有效
RD_cnt<=RD_cnt+1;
else
RD_cnt<=4'd0;
always@(posedge?clk_120M?or?negedge?nRST)
if(~nRST)
read_data<=16'd0;
else//设读地址为15'b000000000000001,地址可以自行修改
if(RD_cnt==4'd3?&&?A==15'b000000000000001)//RD_cnt计数值为3时,去读D数据
read_data<=D;
else
read_data<=read_data;//否则保持
//写过程
reg?[15:0]?write_data;//写数据
//设要写地址为15'b000000000000010,地址可以自行修改,写数据为16'h01;
always@(*)
if(~nRST)
write_data=16'd0;
else
if(nCS01==0?&&?nWE==0)//CS低电平有效,写有效
if(A==15'b000000000000010)//

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

  • 2-2406041G532S4.doc
    下载

相关推荐