博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于M9K块的单口RAM配置仿真实验
阅读量:6360 次
发布时间:2019-06-23

本文共 1566 字,大约阅读时间需要 5 分钟。

FPGA器件中通常嵌入一些用户可配置的存储块,Altera的Cyclone系列器件也不例外。Cyclone器件的嵌入式称之为M4K存储块,这些存储块是独立于FPGA本身的逻辑资源的。也就是说如果用户只使用这些存储器,那么FPGA中的纯逻辑资源消耗可以为零。Cycone的M4K不仅不消耗额外的FPGA逻辑资源,而且可以拿来当RAM用的,标称速率可以达到250M,这个速率不是在cyclone系列的每个器件都能达到,资源少如EP1C3估计就困难,但100M的读写速度还是没有问题的.

2011042914360261.jpg

2011042914412060.jpg

2011042914413725.jpg

一、实验步骤

2011042922454874.jpg

2011042922475980.jpg

2011042922491232.jpg

三、TestBench编写

`timescale 1 ns/ 1 ns

module m9kram_vlg_tst();

reg clk;

reg [11:0] ram_addr;
reg [7:0] ram_din;
reg ram_wr;
reg rst_n;                                     
wire [7:0]  ram_dout;                     
m9kram i1 (

 .clk(clk),

 .ram_addr(ram_addr),
 .ram_din(ram_din),
 .ram_dout(ram_dout),
 .ram_wr(ram_wr),
 .rst_n(rst_n)
);
initial                                               
begin                                                 
rst_n=0;
ram_wr=0;  
ram_addr=12'hzzz;
ram_din=8'hzz;
#200;
rst_n=1;

#3_000; //Delay 3us

task_wr_ram(12'd0, 8'd0); //address 0 write 0  

task_wr_ram(12'd1, 8'd1);  //address 1 write 1
task_wr_ram(12'd2, 8'd2);  //address 2 write 2
task_wr_ram(12'd3, 8'd3);  //address 3 write 3              

@(posedge clk); 

ram_addr=12'd0; //read address 0
@(posedge clk); 
ram_addr=12'd0; //read address 1
@(posedge clk);
ram_addr=12'd0; //read address 2
@(posedge clk);
ram_addr=12'd0; //read address 3
#100;
$stop;
end  

initial begin

clk=0;
forever
#5 clk=~clk;
end   
//write ram task                                            
task task_wr_ram;
input[11:0] t_addr;
input[7:0] t_data;
begin
@(posedge clk);
fork
ram_wr=1;
ram_addr=t_addr;
ram_din=t_data;
join
@(posedge clk);
fork
ram_wr=0;
ram_addr=12'hzzz;
ram_din=8'hzz;
join
end
endtask               
endmodule

四、ModelSim仿真

2011042922515254.jpg

五、fork...join的用法

如果希望在仿真的某一时刻同时启动多个任务,可以使用fork....join语句。例如,在仿真开始的 100 ns 后,希望同时启动发送和接收任务,而不是发送完毕后再进行接收,如下所示:

initial

begin
  #100 ;
  fork /*并行执行 */
Send_task ;
Receive_task ;
  join
End

转载于:https://www.cnblogs.com/spartan/archive/2011/04/28/2032056.html

你可能感兴趣的文章
开源Linux监控系统:Icinga
查看>>
Android模拟器检测常用方法
查看>>
sqlite 中判断某个表是否存在的方法
查看>>
历史数据的清理方法
查看>>
rrdtool学习和自定义脚本绘制图形备忘
查看>>
LayuI固定块关闭
查看>>
linux基础命令(4)
查看>>
七夕情人节,赵强老师视频课程全场7.7折!Oracle最低一折!
查看>>
Extjs的文件上传问题
查看>>
以链接克隆方式创建vSphere虚拟机
查看>>
Managed File Transfer and Network Solutions
查看>>
物联网的遐想和展望
查看>>
iphone 软件开发让我们的事业有着一个更大的发展平台
查看>>
iOS自定义控件:自定义TableView、CollectionView空数据占位图
查看>>
如何将一个String和多个String值进行比较
查看>>
Spring Cloud Netflix—如何加入Hystrix
查看>>
extjs链接
查看>>
链表倒数第n个节点
查看>>
最长公共子序列Lcs(打印路径)
查看>>
0618图的整理
查看>>